
# 会话保持
会话保持（Sticky Session）是一种负载均衡技术，确保来自同一客户端的请求在会话期间始终被转发到同一后端服务器。保障会话数据、登录状态、临时缓存等信息有效延续，提升用户访问体验。
#### 为什么需要会话保持
在许多Web应用中，用户会话状态需要在多个请求之间保持一致。例如，用户在电商网站上添加商品到购物车时，希望在后续的浏览和购买过程中，购物车中的商品仍然存在。然而，随着应用规模的扩大，负载均衡技术的引入使得请求可能被分发到不同的后端服务器，导致会话状态丢失。这会导致用户遇到购物车清空、登录状态失效等问题，严重影响用户体验和应用的可靠性。
会话保持技术通过确保来自同一客户端的请求在会话期间始终被转发到同一后端服务器，解决了这一问题。会话保持不仅提升了用户体验，还简化了应用的设计和维护。例如，电商网站可以通过会话保持确保用户的购物车状态在多个请求之间保持一致，银行应用可以通过会话保持确保用户的交易状态在复杂的操作过程中不被中断。通过会话保持，应用开发者可以更专注于业务逻辑的实现，提升应用的整体性能和可靠性。
#### 会话保持的优势是什么
- **会话一致性**：确保同一客户端的请求在会话期间始终被转发到同一后端服务器，维护会话状态。
- **提升用户体验**：避免因会话状态丢失导致的用户体验下降，提升用户满意度。
- **简化应用设计**：减少后端服务器之间的状态同步需求，简化应用设计和维护。
- **提高应用性能**：通过减少状态同步的开销，提高应用的整体性能和响应速度。
- **增强安全性**：确保敏感操作在同一个服务器上完成，减少跨服务器传输带来的安全风险。
 
#### 会话保持的使用场景
- **电商网站**：在用户购物车功能开发中，针对高并发访问和多服务器架构引发的会话状态管理难题，引入会话保持机制。该机制确保用户在添加商品后的多次浏览与购买请求中，购物车数据始终一致且不丢失，从而显著提升用户体验与满意度。
- **银行应用**：为保障转账与支付交易的安全性和一致性，银行IT团队利用会话保持技术解决多服务器架构下可能出现的会话状态丢失问题。此举有效防止交易中断，确保交易流程可靠完整，在提升交易安全性的同时，显著降低用户投诉率。
- **在线教育平台：**针对学生观看视频课程时的学习进度记录需求，运维团队通过会话保持技术克服多服务器架构导致的状态丢失风险。系统能准确维护学生在各请求间的学习进度，优化学习体验，进而提高平台用户留存率。
- **游戏平台**：在多人在线游戏开发中，为确保游戏过程的连续性与公平性，开发团队应用会话保持技术防止多服务器环境下的会话状态中断。保障了玩家状态在多次请求间的一致性，有效优化游戏体验，促进用户活跃度与留存率的双增长。
- **企业内部系统：**企业IT团队为应对大量员工登录及操作请求，采用会话保持技术确保员工会话状态在多请求间持续稳定。该措施避免了因会话失效导致的登录中断，减少了重复操作，显著提升了内部办公效率。
 
#### 会话保持的工作原理
用户请求到达负载均衡实例后，会话保持功能会提取请求中的会话标识，按会话保持策略选择合适的后端服务器，并记录会话状态，确保后续同一会话请求持续转发至同一后端服务器处理，保障会话状态的一致性。
- 访问请求：这些请求可以是用户访问网站、使用移动应用或调用API接口等。请求中通常包含客户端的IP地址、会话ID或Cookie等信息。这些请求通过客户端发起，到达负载均衡实例，触发会话保持机制的运行。负载均衡实例接收用户请求后，首先提取请求中的会话标识（如会话ID或Cookie），并验证其有效性。
- 会话状态检查：负载均衡实例接收到请求并提取会话标识后，查询会话状态数据库，获取与该会话标识相关的会话信息。这一过程确保负载均衡实例能够识别出该请求属于哪个会话。负载均衡实例根据会话保持策略（如基于会话ID、源IP地址或HTTP头部信息）选择合适的后端服务器，并记录该会话的状态信息，确保后续请求能够被正确地转发到同一服务器。
- 请求分发与响应：负载均衡实例将请求转发到选定的后端服务器，确保会话状态的一致性。后端服务器处理请求并生成响应，负载均衡实例将响应返回给客户端。通过这些机制，会话保持确保了会话状态的一致性和应用的高可用性，提升了用户体验和应用的可靠性。
图1会话保持的工作原理   
![](https://support.huaweicloud.com/productdesc-elb/zh-cn_image_0000002592544800.png "点击放大")
#### 会话保持和长连接的区别
会话保持和长连接虽然都涉及"连接"或"状态"的维持，都是提升 Web 应用性能的重要手段，但两者作用于不同维度，互不依赖。
- 会话保持：负载均衡层面的流量分配策略，确保来自同一客户端的请求在会话期间始终被转发到同一后端服务器，确保业务会话不中断。
- 长连接：网络连接模式，客户端与服务器建立TCP连接后，连接通道持续保留和复用，多次数据交互可复用同一条链路，无需反复执行TCP三次握手。
 
表1会话保持和长连接的区别 
| 维度   | 会话保持                               | 长连接                                |
|:---|:---|:---|
| 定义   | 确保来自同一个客户端的请求在一段时间内被同一个后端服务器处理的技术。 | 客户端与服务器之间建立的长时间保持的连接，用于频繁的数据交换。    |
| 主要作用 | 维护会话状态，确保请求的一致性。                   | 实时或近实时通信，减少通信延迟。                   |
| 应用场景 | 电子商务网站、在线银行、需要维护用户会话状态的应用。         | 即时通讯、在线游戏、股票行情推送、实时数据传输。           |
| 实现机制 | 通过负载均衡根据会话标识（如Cookie、IP地址）路由请求。    | 通过TCP连接保持，客户端和服务器之间建立连接后多次发送和接收数据。 |
| 连接时长 | 通常在会话期间保持，会话结束后可能断开。               | 长时间保持，直到显式关闭。                      |
   
#### 会话保持的分类
- 源IP地址：基于源IP地址的简单会话保持，将请求的源IP地址作为散列键（HashKey），从静态分配的散列表中找出对应的服务器。即来自同一IP地址的访问请求会被转发到同一台后端服务器上进行处理。
- 负载均衡器cookie：负载均衡器会根据客户端第一个请求生成一个cookie，后续所有包含这个cookie值的请求都会由同一个后端服务器处理。
- 应用程序cookie：该选项依赖于后端应用，后端应用生成一个cookie值，后续所有包含这个cookie值的请求都会由同一个后端服务器处理。
 
#### 与会话保持相关的操作与特性
会话保持相关的基础操作：
- 购买弹性负载均衡器：您可以登录华为云控制台，[购买弹性负载均衡](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/create/custom)实例，在配置后端服务器组界面，开启会话保持开关，并选择会话保持的类型（基于源IP，基于Cookie）和实践，详情参考[创建后端服务器组（独享型）](https://support.huaweicloud.com/usermanual-elb/elb_ug_hdg_0003.html)或[创建后端服务器组（共享型）](https://support.huaweicloud.com/usermanual-elb/elb_ug_hdg_0004.html)。
- 创建后端服务器组：您也可以直接进入控制台[后端服务器组](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/elbPool/list)界面，开启会话保持功能。
 
