簡體   English   中英

NGINX + phpFPM負載均衡器和會話

[英]NGINX + phpFPM load balancer and sessions

我有一個問題,我正在使用nginxPHPFPM 我正在使用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)協議支持文件鎖定

在unix stackexchange上查看此答案

因此,對於分布式會話存儲,您很少需要基於文件系統的慢速鎖定。 無論如何,大多數內存商店的工作速度更快。 由於NFS通常無法處理flock調用,因此如果兩個並發請求嘗試寫入同一會話文件,則會話將被破壞 換句話說,您所看到的更快的是基本上您的請求可能會更快地破壞其會話,因為並發會話沒有鎖定。

如果您的請求需要很長時間並且不需要會話,則最好在完成會話后盡可能早地在代碼中顯式調用session_write_close ,以便任何其他並發請求可以進入會話。 當您對PHP進行大量長輪詢請求時(例如通過AJAX),這通常是一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM