繁体   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