假设 EC2 上的 Web 服务器集群同时具有 Elastic Load Balancing 和 Auto Loading(即实例根据需求启动和终止),有人能告诉我用户浏览器会话发生了什么吗?负载均衡器是否足够智能来跟踪会话?或者至少足够智能来将特定用户的请求一致地发送到同一个实例?还是我必须自己找到并管理这个问题的解决方案?
答案1
需要更多信息,这取决于您如何实现会话。尽管某些负载平衡器足够“智能”,可以根据会话进行重定向,但依赖它实际上只是意味着您的架构首先就被破坏了。
理想情况下,您需要集中式或分布式会话存储。好的选择是像 MySQL 这样的集中式数据库,或者像memcached。您可能希望从数据库开始,然后如果确实开始获得流量,再转向 memcached。
您的应用程序使用什么框架或语言?
答案2
不,ELB 不是基于粘性会话的负载均衡器。它是基于“非严格循环”的负载均衡器,不考虑您的会话方案。以下是一些详细信息:http://clouddevelopertips.blogspot.com/2009/07/elastic-in-elastic-load-balancing-elb.html
如果您想使用 elb,那么您需要确保您的会话方案可以处理任何请求时路由到 elb 池中任何服务器的请求。
答案3
您有两个选择。
最好的选择是按照 anveo 所说的去做。使用集中式会话存储意味着他们可以访问您的任何一台服务器,并且仍然拥有他们的会话。您可以启动和终止实例,而不必担心对用户的影响。
另一个选项是使用 ELB 的粘性选项。您可以创建会话 cookie,负载平衡器每次都会将会话 cookie 路由到同一个实例。这样做的问题是,您不能随意终止实例,因为人们会丢失他们的会话(如果这很重要的话)。这种方法的唯一好处是它非常容易实现。而且丢失会话通常并不那么糟糕。用户只需重新登录即可。