负载均衡器 cookie 粘性和用于存储用户会话的 ElastiCache 有啥区别?

Posted

技术标签:

【中文标题】负载均衡器 cookie 粘性和用于存储用户会话的 ElastiCache 有啥区别?【英文标题】:What is the difference between Load Balancer cookies stickiness and ElastiCache for storing user session?负载均衡器 cookie 粘性和用于存储用户会话的 ElastiCache 有什么区别? 【发布时间】:2020-02-27 13:42:01 【问题描述】:

我听说过两种在 Amazon AWS 中存储用户会话的方法。一种方法是将 cookie 粘性与负载均衡器结合使用,另一种方法是将用户会话存储到 ElastiCache。如果我想同时使用 EC2 负载均衡器和 ElastiCache,有哪些优点和缺点?我应该在哪里存储用户会话?

【问题讨论】:

【参考方案1】:

AWS LB 粘性是另外一回事,你不能将东西存储在 LB 粘性中,这是由 AWS 底层服务控制的。负载均衡器使用一个特殊的 cookie 来跟踪对每个侦听器的每个请求的实例。当负载均衡器收到请求时,它首先检查请求中是否存在此 cookie。如果是,则将请求发送到 cookie 中指定的实例。如果没有cookie,负载均衡器会根据现有的负载均衡算法选择实例。

您可以使用粘性会话功能(也称为会话 亲和力),它使负载均衡器能够将用户的会话绑定到 一个具体的实例。这确保了来自用户的所有请求 在会话期间被发送到同一个实例。

LB 粘性会话只是路由来自同一用户的后续请求同一 ec2 实例,它将有助于 WebSocket 等应用程序。

lb-sticky-sessions

因此,如果您正在寻找一种管理和存储敏感数据的方法,并且该数据应该可以跨多个节点使用,那么您需要 Distributed Session Management 使用 Redis 或 Memcached。如果您的用例只是将后续请求粘贴到同一个 EC2 实例上,那么 LB 粘性就足够了。

在 Web 应用程序中有多种管理用户会话的方法, 从仅 cookie 到分布式键/值数据库, 包括服务器本地缓存。在 Web 服务器中存储会话数据 响应给定的请求可能看起来很方便,因为访问 数据不会产生网络延迟。主要缺点是请求 必须仔细路由,以便每个用户与一个交互 服务器和一台服务器。另一个缺点是一旦服务器 下降,所有会话数据也消失了。一个分布式的, 内存键/值数据库可以通过支付小额费用来解决这两个问题 微小的网络延迟的代价。将所有会话数据存储在 大多数时候cookies就足够了;如果您打算存储 敏感数据,那么最好使用服务器端会话。

building-fast-session-caching-with-amazon-elasticache-for-redis

【讨论】:

以上是关于负载均衡器 cookie 粘性和用于存储用户会话的 ElastiCache 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡器粘性会话和非常旧的 Web 服务

Kubernetes 集群上的粘性会话

为 Apache/Tomcat 负载平衡启用粘性会话模式

使用 TCP 负载均衡器代理 WebSockets 而没有粘性会话

使用粘性会话和 websocket 进行扩展

负载均衡session会话保持方法