如何使用Amazon Web Services(AWS)同步会话?

时间:2012-05-23 07:38:26

标签: php session amazon-ec2 amazon-web-services amazon-elb

我们正在使用Amazon Web Services(AWS),我们有多个Web服务器和负载均衡器。 Web服务器的问题是,$ _SESSION对于每个服务器都是唯一的。我在$ _SESSION中保留了一些关于用户的信息。

同步此信息的正确方法是什么?有没有办法联合这个地方,那些会话被保存,或者我应该使用MySQL来存储这些数据(我真的不喜欢最后一个选项)?

3 个答案:

答案 0 :(得分:7)

我认为你所寻找的是'Sticky Sessions'。如果我是对的,亚马逊为您提供两种不同的选择。

负载均衡器(基于持续时间,我推荐这个)http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsLBCookies

基于应用程序的会话粘性 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsAppCookies

答案 1 :(得分:4)

虽然在概念上类似于您试图避免出于某种原因的MySQL选项,但在Amazon Web Services (AWS)中使用的一个非常吸引人的选项是最近引入的Scalable Session Handling in PHP Using Amazon DynamoDB,它解决了典型会话处理在PHP中不可扩展,因此无论如何都需要某种自定义解决方案:

  

会话用于跨多个HTTP保留短期数据   要求 [...]。 PHP的本机会话处理程序存储   会话数据到本地文件系统;然而,这种方法变成了   在分布式Web应用程序中不可靠。在随后的请求中   用户可能无法路由到导致数据的同一服务器   有效地忘记了。用户将被注销并感到困惑。

     

为了解决这个问题,PHP开发人员实现了自定义   解决方案用于使用数据库存储用户的会话数据   共享文件系统,Memcache服务器,防篡改cookie等   存储机制。 [...] [强调我的]

根据您的使用情况,您可能需要相应地尝试这个可能非常快的会话存储。

答案 2 :(得分:1)

要添加上面的答案,您要寻找像DynamoDB这样的分布式缓存,这是一项付费的亚马逊服务。它使用起来非常快速和出色,但如果您正在寻找其他一些开源替代品,您可以查看以下内存读/写选项。

  1. Memcached - 非常适合高读/写比率。来自开发者社区的轻量级和强大支持。
  2. JCS - Java缓存系统 - 极大的灵活性,适用于面向低读/写率的系统。此外,它非常适合自定义复制,并且根据粘性程度,这可以像WebB应用程序的简单内存读/写一样快,因为ELB保持一定程度的粘性。因此,一旦会话被定向到另一个实例,那么只有会话信息才会被复制。我们使用它并且到目前为止已经取得了良好的效果。
  3. EhCache - 已建立的缓存框架,但其分布式缓存产品并非完全免费使用。可能是一种矫枉过正,因为它可以确保完全复制,在这种情况下可能并不真正需要。