我在一个经典负载平衡器上使用两个ec2实例。我的用户在分析过程中出现了502个错误,特别是在进行ajax调用时。换句话说,如果用户连接到服务器实例,则在使用程序过程中的ajax调用将定向到另一个服务器实例。这就导致了错误。我需要用户在他/她的会话期间针对相同的服务器实例。
在谷歌上面提到的问题后,我发现了这个:
负载均衡、AJAX和你
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html
根据这些文档,我应该在我的负载均衡器上应用粘性会话。但是,它要求客户端在浏览器上启用cookie。我真的不想那样。
这个问题还有其他解决办法吗?如有任何建议,我将非常感谢。
您面临的问题是因为您的应用程序是有状态的。在理想的负载平衡和自动伸缩设置中,所有实例都应该是无状态的,这意味着将用户重定向到其他实例不会有任何问题。
要做到这一点,所有与用户会话相关的状态信息应该在实例之外存储和处理,例如在DynamoDB或ElasticCache中。这将增加更多的成本,并需要更改您的应用程序,但这是您应该瞄准的,它将允许您在url中传递stateid
,而不是cookie。
遗憾的是,我不认为你可以实现你想要的没有负载平衡cookie或应用程序级cookie。