分布式系统session一致性解决方案
在单机系统中,不存在Session共享问题,但是在分布式系统中,我们必须实现session共享机制,使得多台应用服务器之间会话统一,如果不进行Session共享会出现数据不一致,比如:会导致请求落到不同服务器要重复登录的情况。
解决方案
1.session复制
原理:任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。
优点:可容错,各个服务器间session能够实时响应。
缺点:
-
大量的session的同步需要数据传输,占内网带宽,有时延,拖慢服务器性能。
-
有更多web-server时,容易造成网络风暴。
2. 客户端存储
将session存储到浏览器cookie中。每次请求服务器的时候,将session放在请求中发送给服务器,服务器处理完请求后再将修改后的session响应给客户端。
缺点:
- 数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患。
- session存储的数据大小受cookie限制。
3. 粘性session
原理:粘性Session是指将用户锁定到某一个服务器上,例如用户第一次请求时,负载均衡器(nginx)将用户的请求转发到了A服务器上,如果负载均衡器设置了粘性Session的话,那么用户以后的每次请求都会转发到A服务器上,相当于把用户和A服务器粘到了一块,这就是粘性Session机制。
优点:简单,不需要对session做任何处理。
缺点:
- 如果服务器出现故障,一部分session会丢失,会产生业务影响,例如部分用户重新登录。
- 如果服务器水平扩展,rehash后session重新分布,也会有一部分用户路由不到正确的session。
4. 后端统一集中存储
原理:将session存储在一个单独的服务器的存储层,数据库或者缓存,一般用redis/memchache缓存。
优点:服务器出现问题,session不会丢失。
缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。
refer:https://www.cnblogs.com/yumingxing/p/9505512.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-12-05 Linux系统之常用文件搜索命令
2018-12-05 Linux学习之常用权限管理命令(二)