自动扩展服务器上的 PHP 会话

自动扩展服务器上的 PHP 会话

(抱歉与 SO 交叉发布。我不确定哪里更合适。)

我正在开发一个部署到 Amazon Web Services 的 PHP Web 应用程序。我们在自动扩展应用程序服务器前面安装了负载均衡器。

我们目前面临的问题是处理会话。虽然粘性会话是一个合理的解决方案,但我们希望会话持续相当长的时间(理想情况下是几周)。这可能会随着时间的推移损害负载平衡器的性能。此外,使用自动扩展意味着,我们会不时删除一台服务器,从而丢失其上的所有活动会话。当然,我们可以只使用一个通用数据库来存储会话,但如果每个请求都需要再次往返数据库,我会有点担心性能。

如果您能提出任何对您有用的解决方案,或者任何我们可以尝试的想法,我将不胜感激。

提前感谢你的帮助,罗斯

答案1

PHP 将其会话存储在纯文本文件中。您是否尝试过将它们存储在通用存储中?

类似问题:在云文件系统中共享 PHP 会话

以下是一篇有关此特定问题和不同方法的文章:http://kevin.vanzonneveld.net/techblog/article/enhance_php_session_management/

答案2

IME,使用基于文件的会话和数据库会话之间的开销很小(上次我详细研究这个问题时,我在 3 个 mysql 节点上使用了主/主复制) - 但与前者相比,后者通常需要额外的网络行程(访问本地 mysql 实例与仅限本地的文件系统相比,差异不可衡量)。将基于数据库的存储扩展到共享存储库也简单得多,而且由于它是一种简单的键/值方法,因此很容易在 nosql dbs 上实现 - 其扩展性甚至比关系数据库更容易。

答案3

其他人链接的文章中已经提到过这一点,但值得单独重复:Memcache 是这里非常有用的选项。它速度极快,可以轻松扩展到多个 Memcache 服务器/实例,并且非常容易实现,不会给数据库带来太多开销或负载。我成功地在一个每天有数百万次点击的网站上以最小的努力实现了这一点,并且它在现有硬件上提供了更多的增长空间。

这样做还允许使用 Memcache 自己的老化策略,而不是运行 PHP 的会话垃圾收集器。

相关内容