会话粘性通常会提高 Rails 应用程序的性能吗?

Posted

技术标签:

【中文标题】会话粘性通常会提高 Rails 应用程序的性能吗?【英文标题】:Does Session Stickiness generally improve performance in Rails apps? 【发布时间】:2016-02-24 08:48:32 【问题描述】:

我有一个使用 mysql RDS 实例在 AWS Elastic Beanstalk 上运行 Rails 4.2.5 的应用程序。我的应用程序通常运行两个 EC2 实例,但有时它可以扩展到更多。我使用 Devise 进行身份验证。

我注意到 Beanstalk GUI 现在支持在 Elastic Load Balancer 中启用会话粘性:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html#using-features.managing.elb.sessions

这似乎通常会提高大多数 Rails 应用程序的性能,因为如果用户返回同一台机器,应该会有更多的缓存命中。

我的问题是:ELB 使用它有什么问题(如果有的话)?

【问题讨论】:

【参考方案1】:

我认为您不能说通常启用粘性会话会提高性能 - 我会说您要么偶尔会遇到更差的性能,要么会保持不变。

ELB 应该将传入呼叫路由到有工作能力的服务器,当您启用粘性会话时,给定客户端的呼叫将继续被路由回同一服务器,即使该服务器已经很重加载。您冒着这样的风险,即偶然一大堆会话在服务器上变得“粘滞”,而另一台服务器的容量过多。

这取决于您的用户和应用程序的详细信息(即典型的“会话”将持续多长时间、用户数量等)

启用会话粘性有时有充分的理由,但在我看来,尝试提高性能可能不是其中之一。

【讨论】:

有趣的一点,谢谢。您可以通过设置合理的自动扩展限制来防止这种情况,因为 ELB 不会路由到不健康的实例。

以上是关于会话粘性通常会提高 Rails 应用程序的性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 AWS Elastic Beanstalk 中使用应用程序控制的会话粘性吗?

与 docker swarm 的粘性会话

我可以通过身份验证与 HAProxy 和 socket.io 进行粘性会话吗?

生产环境中的Tomcat集群/负载均衡性能

为 Apache/Tomcat 负载平衡启用粘性会话模式

如何提高 H2 Select 查询性能?