相关疑难解决方法(0)

可以使用内存缓存守护进程池更有效地共享会话吗?

我们正在从 1 个网络服务器设置转移到两个网络服务器设置,我需要开始在两台负载平衡机器之间共享 PHP 会话。我们已经安装(并启动)了memcached,所以我很高兴我可以通过只更改文件中的3 行(session.save_handlersession.save_path)来完成新服务器之间的共享会话:php.ini

我替换了:

session.save_handler = files
Run Code Online (Sandbox Code Playgroud)

和:

session.save_handler = memcache
Run Code Online (Sandbox Code Playgroud)

然后在主 Web 服务器上,我将session.save_path指向 localhost:

session.save_path="tcp://localhost:11211"
Run Code Online (Sandbox Code Playgroud)

在从属网络服务器上,我将 设置session.save_path为指向主服务器:

session.save_path="tcp://192.168.0.1:11211"
Run Code Online (Sandbox Code Playgroud)

工作完成,我测试了它并且它有效。但...

显然,使用 memcache 意味着会话在 RAM 中,如果机器重新启动或 memcache 守护进程崩溃,会话将会丢失 - 我对此有点担心,但我更担心两个网络服务器之间的网络流量(尤其是当我们扩大规模),因为每当有人负载平衡到从网络服务器时,他们的会话将从主网络服务器通过网络获取。我想知道是否可以定义两个,save_paths以便机器在使用网络之前查看自己的会话存储。例如:

掌握:

session.save_path="tcp://localhost:11211, tcp://192.168.0.2:11211"
Run Code Online (Sandbox Code Playgroud)

奴隶:

session.save_path="tcp://localhost:11211, tcp://192.168.0.1:11211"
Run Code Online (Sandbox Code Playgroud)

这会成功地跨服务器共享会话并帮助提高性能吗?即节省 50% 的时间网络流量。还是这种技术仅适用于故障转移(例如,当一个内存缓存守护进程无法访问时)?

注意:我并不是特别询问内存缓存复制 - 更多关于 PHP 内存缓存客户端是否可以在池中的每个内存缓存守护进程内达到峰值,如果找到一个会话,则返回一个会话,如果没有找到,则只创建一个新会话在所有商店。在我写这篇文章的时候,我想我对 PHP 的要求有点高,哈哈...

假设:没有粘性会话、循环负载平衡、LAMP 服务器。

php performance lamp memcached

25
推荐指数
2
解决办法
3万
查看次数

标签 统计

lamp ×1

memcached ×1

performance ×1

php ×1