AWS ELB 粘性会话可以用于后端请求吗?
Can AWS ELB sticky sessions be used for backend requests?
我目前将我的 Web 应用程序托管在 AWS 上,我使用两个 ELB 实例,一个用于对应用服务器的前端请求进行负载均衡,另一个用于对从应用服务器到 API 服务器,像这样(抱歉糟糕的 ascii 图):
/-->APP1--\ /-->API1
User-->ELB1 ELB2
\-->APP2--/ \-->API2
换句话说,APP服务器发出的API个请求在两个后端API服务器上平均负载均衡。
但是,因为我在 API 服务器上缓存响应,并使用 API 服务器之间不共享的缓存失效机制,所以我希望用户会话被困在一个后端 API 服务器上。
我已经将用户的会话粘在一个应用程序服务器上,使用正常的 ELB 负载均衡器生成的 cookie 粘性,但是有什么方法可以让后端 ELB 粘在一个会话上吗?当然,这些请求不是来自浏览器,所以没有什么可以管理 cookie,而且 ELB 似乎只能通过 cookie 来管理粘性。我可以模拟我的后端请求的必要 cookie 吗?
我认为如果不做一大堆杂乱的工作,就不可能在您的应用程序服务器和 API 服务器之间实现粘性。我可能是错的,并且非常愿意接受更正,但我认为没有简单的解决方案,除非您用于 App Server 逻辑的语言可以提供一些东西。
无论如何,这里最好的解决方案是将您的应用服务器和缓存分离。在由单独的服务器提供服务的 API 个服务器之间共享一个缓存会更有意义。这将提高您的基础设施的容错能力,并在您的缓存中为您提供质量更好的数据(尤其是在您扩展时)。您可以使用 ElastiCache 服务为您完成此操作并避免任何繁重的工作。
要结束这个问题,是的,这很容易实现,只需从 ELB 捕获 'Set-Cookie' 响应 header,然后在后续请求中传回 cookie。但是,请参阅下面的警告。
我目前将我的 Web 应用程序托管在 AWS 上,我使用两个 ELB 实例,一个用于对应用服务器的前端请求进行负载均衡,另一个用于对从应用服务器到 API 服务器,像这样(抱歉糟糕的 ascii 图):
/-->APP1--\ /-->API1
User-->ELB1 ELB2
\-->APP2--/ \-->API2
换句话说,APP服务器发出的API个请求在两个后端API服务器上平均负载均衡。
但是,因为我在 API 服务器上缓存响应,并使用 API 服务器之间不共享的缓存失效机制,所以我希望用户会话被困在一个后端 API 服务器上。
我已经将用户的会话粘在一个应用程序服务器上,使用正常的 ELB 负载均衡器生成的 cookie 粘性,但是有什么方法可以让后端 ELB 粘在一个会话上吗?当然,这些请求不是来自浏览器,所以没有什么可以管理 cookie,而且 ELB 似乎只能通过 cookie 来管理粘性。我可以模拟我的后端请求的必要 cookie 吗?
我认为如果不做一大堆杂乱的工作,就不可能在您的应用程序服务器和 API 服务器之间实现粘性。我可能是错的,并且非常愿意接受更正,但我认为没有简单的解决方案,除非您用于 App Server 逻辑的语言可以提供一些东西。
无论如何,这里最好的解决方案是将您的应用服务器和缓存分离。在由单独的服务器提供服务的 API 个服务器之间共享一个缓存会更有意义。这将提高您的基础设施的容错能力,并在您的缓存中为您提供质量更好的数据(尤其是在您扩展时)。您可以使用 ElastiCache 服务为您完成此操作并避免任何繁重的工作。
要结束这个问题,是的,这很容易实现,只需从 ELB 捕获 'Set-Cookie' 响应 header,然后在后续请求中传回 cookie。但是,请参阅下面的警告。