# 概述
#### 会话保持概述
会话保持（Stickiness / Sticky Session）是指负载均衡器将来自同一客户端的请求持续路由到同一后端目标（服务器或服务器组），而非在多个目标间均衡分发的功能。例如，客户端 A 的流量始终被路由到某台固定服务器，以便该服务器维护会话状态数据；若客户端 A 的请求被分发到两台不同服务器，每台服务器可能缺失另一台上的关键信息。
因此，通过负载均衡器维持一致的客户端连接通常是必要的。华为云弹性负载均衡（ELB）支持两大类会话保持策略：
- 会话保持（Sticky Sessions）：在后端服务器上维护本地会话数据，简化应用架构或提升应用性能，因为服务器可以在本地维护或缓存会话状态信息。华为云提供三种会话保持类型：源IP地址、负载均衡器Cookie 和 应用程序Cookie。
- 后端服务器组间会话保持：在蓝绿部署等场景中，可能部署了多个版本的应用，希望客户端在会话期间继续使用同一版本的应用。此时可使用后端服务器组间会话保持，将客户端的所有通信路由到同一个后端服务器组，而非同一台后端服务器。
两种策略可以单独使用，也可以结合使用。
#### 负载均衡器子网与路由
1. 来自互联网的流量到达ELB的公网IP或域名。
2. ELB实例关联到VPC中的子网， ELB通过用户配置的流量分配策略决定将流量路由到哪个后端服务器组和后端服务器。
3. ELB将请求路由到后端ECS实例（应用型实例可能涉及转发策略配置）。
4. 路由表在VPC内本地路由流量，在ELB子网和后端服务器子网之间路由到ECS实例。
5. ECS实例通过路由表将出站流量返回，沿原路径返回到ELB。
6. ELB通过其公网接口将流量路由出去，经互联网网关返回互联网。
 
#### 如何选择合适的会话保持策略
可以通过回答以下问题帮助您确定负载均衡的会话保持策略。
1. **问题1：是否使用 WebSocket？**
   - 是： WebSocket 本身具有粘性，无需使用任何会话保持策略。
   
   - 否： 继续下一问题。
    

2. **问题2：是否计划进行蓝绿部署（需要同一客户端持续路由到同一后端服务器组）？**
   - 是：至少使用"后端服务器组间会话保持"，继续下一问题。
   
   - 否：继续下一问题。
    

3. **问题3：是否需要将同一客户端的部分或全部流量重复路由到同一台后端服务器？**
   - 是：继续下一问题。
   
   - 否：无需开启会话保持。
    

4. **问题4：使用的是四层协议（TCP/UDP）还是七层协议（HTTP/HTTPS/gRPC）？**
   - 四层协议：使用"源IP地址"会话保持。
   
   - 七层协议：继续下一问题。
    

5. **问题5：是否希望由后端业务应用程序或客户端 Cookie 控制会话保持状态和持续时间？**
   - 是：使用"应用程序Cookie"会话保持。
   
   - 否：使用"负载均衡器Cookie"会话保持。
    
 
#### 不使用会话保持
当ELB不配置任何会话保持时，默认使用客户配置的流量分配算法（如：加权轮询算法）将请求分发到不同的后端服务器。
#### 常见场景
- 有多个后端目标需要路由流量，但目标不维护会话状态。
- 使用不维护会话状态的Web服务器。
- 使用不维护会话状态的应用服务器。
- 无状态微服务架构。
 
#### 工作原理
- ELB根据客户配置的流量分配算法逻辑，确定哪台后端服务器接收流量。
- 每次请求到达，ELB重新运行路由逻辑，请求可能被分发到不同后端服务器。
 
#### 配置方式
**创建后端服务器组时不开启会话保持功能开关**，分配策略类型默认为"加权轮询算法"，建议客户根据实际需求场景配置适合的流量分配策略。
