【问题标题】:Can AWS ELB sticky sessions be used for backend requests?AWS ELB 粘性会话能否用于后端请求?
【发布时间】:2016-07-06 00:40:36
【问题描述】:

我目前将我的 Web 应用程序托管在 AWS 上,我使用两个 ELB 实例,一个用于负载平衡前端请求到应用程序服务器,另一个用于负载平衡从应用程序服务器到 API 服务器的后端请求,像这样(对不起,糟糕的ascii图):

           /-->APP1--\    /-->API1
User-->ELB1           ELB2
           \-->APP2--/    \-->API2

换言之,APP 服务器发出的 API 请求在两个后端 API 服务器之间进行负载均衡。

但是,因为我在 API 服务器上缓存响应,并且使用了一种不在 API 服务器之间共享的缓存失效机制,所以我希望用户的会话被卡在一个后端 API 服务器上。

我已经让用户的会话卡在一个 APP 服务器上,使用正常的 ELB 负载均衡器生成的 cookie 粘性,但是有什么方法可以让后端 ELB 卡在会话上?当然,这些请求不是来自浏览器,所以没有什么可以管理 cookie,而且似乎 ELB 只能使用 cookie 管理粘性。我可以模拟我的后端请求所需的 cookie 吗?

【问题讨论】:

    标签: amazon-elb sticky-session


    【解决方案1】:

    要结束这个问题,是的,这很容易实现,只需从 ELB 捕获“Set-Cookie”响应标头,然后在后续请求中将 cookie 传回。但是,请参阅下面的警告。

    【讨论】:

      【解决方案2】:

      我认为如果不做大量繁琐的工作,就不可能在您的应用服务器和 API 服务器之间实现粘性。我可能是错的,并且非常愿意纠正,但我不相信有一个简单的解决方案,除非您用于应用服务器逻辑的语言可以提供一些东西。

      无论如何,最好的解决方案是将您的应用服务器和缓存解耦。在由不同服务器提供服务的 API 服务器之间共享单个缓存会更有意义。这将提高您的基础架构的容错能力,并在您的缓存中为您提供质量更好的数据(尤其是在您扩大规模时)。您可以使用ElastiCache 服务为您执行此操作,并避免任何繁重的工作。

      【讨论】:

      • 结果相当容易。我只是捕获“Set-Cookie”响应标头,并存储我收到的任何 AWSELB cookie,然后在后续请求中发送 cookie。 APP 会话现在固定在一个 API 实例上。
      • 但请注意:如果您的前端/后端服务器数量较少,则所有前端服务器都可能卡在一个或几个后端服务器。换句话说,这种方法降低了负载平衡器动态平衡负载的能力。
      • 这在文档中有明确的概述。粘性会话严重阻碍了可扩展性。
      • 是的,但这指的是正常的粘性——将前端用户(浏览)会话绑定到一个前端应用服务器。当然,这会稍微阻碍可扩展性,但由于用户会话通常是短暂的,所以这不是一个大问题。上面描述的情况是一个更大的问题——对于小型集群,比如只有两台前端服务器和两台后端服务器,两台前端服务器很有可能只绑定到一台后端服务器。这将对可扩展性产生更多更大的影响。
      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 2021-09-06
      • 2016-04-16
      • 1970-01-01
      • 2015-09-14
      • 2016-12-07
      • 1970-01-01
      • 2016-12-09
      相关资源
      最近更新 更多