Php 如何使用Amazon Web服务(AWS)同步会话?

Php 如何使用Amazon Web服务(AWS)同步会话?,php,session,amazon-ec2,amazon-web-services,amazon-elb,Php,Session,Amazon Ec2,Amazon Web Services,Amazon Elb,我们正在使用AmazonWebServices(AWS),我们有多个Web服务器和一个负载平衡器。web服务器的问题是,$\u会话对于每个服务器都是唯一的。我在$\u会话中保留了一些有关用户的信息 同步此信息的正确方法是什么?是否有任何方法可以将保存这些会话的地方统一起来,或者我应该使用MySQL来存储这些数据(我真的不喜欢最后一个选项)?虽然概念上与您出于某种原因试图避免使用的MySQL选项类似,但最近引入了一个非常吸引人的选项,它解决了PHP中典型的会话处理是不可伸缩的,因此无论如何都需要某

我们正在使用AmazonWebServices(AWS),我们有多个Web服务器和一个负载平衡器。web服务器的问题是,$\u会话对于每个服务器都是唯一的。我在$\u会话中保留了一些有关用户的信息


同步此信息的正确方法是什么?是否有任何方法可以将保存这些会话的地方统一起来,或者我应该使用MySQL来存储这些数据(我真的不喜欢最后一个选项)?

虽然概念上与您出于某种原因试图避免使用的MySQL选项类似,但最近引入了一个非常吸引人的选项,它解决了PHP中典型的会话处理是不可伸缩的,因此无论如何都需要某种自定义解决方案:

会话用于跨多个HTTP保存短期数据 请求[…]PHP的本机会话处理程序存储 将会话数据传输到本地文件系统;然而,这种方法变得越来越重要 分布式web应用程序中不可靠。在随后的请求中 用户可能无法路由到同一服务器,从而导致数据丢失 实际上被遗忘了。用户将被注销并感到困惑

为了克服这个问题,PHP开发人员已经实现了定制 使用数据库存储用户会话数据的解决方案, 共享文件系统、Memcache服务器、防篡改cookie和其他 存储机制。[…][我的重点]


根据您的使用情况,您可能希望相应地尝试一下这个可能非常快速的会话存储。

我认为您需要的是“粘性会话”。如果我是对的,亚马逊给你两种不同的选择

负载平衡器(基于持续时间,我建议使用这种)

和基于应用程序的会话粘性

为了补充上述答案,您需要一个分布式缓存,比如DynamoDB,它是一个付费的亚马逊服务。它的使用速度惊人且非常出色,但是如果您正在寻找其他开源替代方案,您可以查看以下内存读/写选项

  • Memcached-非常适合高读/写比率。来自开发人员社区的轻量级和强大支持
  • JCS-Java缓存系统-非常灵活,适用于读/写比率较低的系统。另外,定制复制也很好,根据粘性级别的不同,这总是可以像简单的web应用程序内存读/写一样快,因为ELB保持一定程度的粘性。因此,一旦会话被定向到另一个实例,会话信息才会被复制。到目前为止,我们一直在使用它,并取得了良好的效果
  • EhCache-建立了缓存框架,但其分布式缓存产品并非完全免费使用。这可能有点过分,因为它确保了完整的复制,而在这种情况下可能并不真正需要
    为什么要避免将会话存储在数据库中(特别是MySQL)?因为我们的产品已经准备好了,我们只需要扩展它。改变它现在的工作方式将需要改变网站的核心,这将需要时间和在多个地方的变化,所以我们试图找到最简单的解决方案,这将几乎不需要改变。