![](/img/trans.png)
[英]PHPfpm and Nginx not working in Docker with Supervisord
[英]NGINX + phpFPM load balancer and sessions
我有一個問題,我正在使用nginx和PHPFPM 。 我正在使用loadbalancer 2個phpfpm服務器 。
為了保持兩個phpfpm服務器的會話同步,我使用了memcached。 但是當我使用memcached時,我看到該頁面正在變慢 。
當我使用文件作為會話保存類型 web運行速度更快,但會話不會立即同步(我猜文件是owerwriting)。 我正在使用NFS來共享會話。
有什么想法,請問如何在為phpfpm服務器使用nginx loadbalancer時同步會話?
使用NFS over memcached在PHP中看到的速度增加本質上是一種欺騙性的。 PHP會話存儲默認以先到先得的方式鎖定獲取。 這意味着對同一會話的兩個並發請求將導致第一個請求鎖定會話,直到PHP完成或您從代碼中顯式調用session_write_close()
,以釋放鎖定。
但是在基於文件的會話存儲中,PHP依賴於flock,這在NFS中不起作用。
NFS(版本2和3)協議不支持文件鎖定
因此,對於分布式會話存儲,您很少需要基於文件系統的慢速鎖定。 無論如何,大多數內存商店的工作速度更快。 由於NFS通常無法處理flock調用,因此如果兩個並發請求嘗試寫入同一會話文件,則會話將被破壞 。 換句話說,您所看到的更快的是基本上您的請求可能會更快地破壞其會話,因為並發會話沒有鎖定。
如果您的請求需要很長時間並且不需要會話,則最好在完成會話后盡可能早地在代碼中顯式調用session_write_close
,以便任何其他並發請求可以進入會話。 當您對PHP進行大量長輪詢請求時(例如通過AJAX),這通常是一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.