我目前在AWS上托管我的Web应用程序,我使用两个ELB实例,一个用于平衡前端请求到应用服务器,另一个用于平衡后端请求从应用服务器到API服务器,像这样(抱歉蹩脚的ascii图):
/-->APP1--\ /-->API1
User-->ELB1 ELB2
\-->APP2--/ \-->API2
换句话说,APP服务器发出的API请求在两个后端API服务器之间均衡负载均衡。
但是,因为我在API服务器上缓存响应,并使用API服务器之间未共享的缓存失效机制,我希望用户的会话被卡住到一个后端API服务器。
我已经将用户的会话粘在一个APP服务器上,使用正常的ELB负载均衡器生成的cookie粘性,但有没有办法让后端ELB卡在会话中?当然,这些请求并非来自浏览器,因此没有什么可以管理cookie,而ELB似乎只能管理cookie的粘性。我可以模仿后端请求的必要cookie吗?
答案 0 :(得分:1)
要关闭这个问题,是的,只需捕获“Set-Cookie”即可轻松实现这一目标。来自ELB的响应头,然后在后续请求中将cookie传回。但是,请参阅下面的警告。
答案 1 :(得分:0)
我不相信可以在App服务器和API服务器之间实现粘性,而不会造成一大堆凌乱的工作。我可能是错的,而且我非常愿意纠正,但我不相信有一个简单的解决方案,除非您用于App Server逻辑的语言可以提供。
无论如何,这里最好的解决方案是将您的应用服务器和缓存分离。在由不同服务器提供服务的API服务器之间共享单个缓存会更有意义。这将增加您的基础架构的容错能力,并在缓存中为您提供质量更好的数据(特别是在您扩展时)。您可以使用ElastiCache服务为您执行此操作,避免任何繁重的工作。