3

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

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

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

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

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

4

2 回答 2

1

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

于 2016-04-07T23:02:55.867 回答
0

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

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

于 2016-03-19T23:06:55.470 回答