APP下载

session一致性的解决方案

消息来源:baojiabao.com 作者: 发布时间:2026-05-11

报价宝综合消息session一致性的解决方案

什么是session?

服务器为每个使用者建立一个会话,储存使用者的相关资讯,以便多次请求能够定位到同一个上下文,这个相关资讯就是session。这样,当用户在应用程序的Web页之间跳转时,储存在session物件中的变数将不会丢失,而是在整个使用者会话中一直存在下去。

session是对http无状态协议的补充,达到状态保持的目的

什么是session一致性问题?

session一致性问题

假设使用者包含登入资讯的session都记录在第一台server上,反向代理如果将请求路由到另一台server上,可能就找不到相关资讯,而导致使用者需要重新登入。

解决方法

1. 客户端储存cookie

基于cookie的会话管理

优点:服务端不需要储存缺点:每次http请求都携带session,占网络带宽资料储存在客户端上,并在网络传输,存在泄漏、篡改等安全隐患session储存的资料大小受cookie限制由于技术不断演进,客户端储存cookie出现了资讯全量cookie,cookie储存sessionId和JWT三种方式,他们优缺点各异,可以点选笔者的另一篇部落格检视相关介绍

快速了解会话管理三剑客cookie、session和JWT

2. session复制方法

session复制方法

思路:多个server之间相互同步session,这样每个server之间都包含全部的session优点:只需要设定配置,应用程序不需要修改程式码不足:session的同步需要资料传输,占内网带宽,有延时所有server都包含所有session资料,资料量受最小内存的sever限制,水平拓展能力差3. session中心储存

session中心储存

思路:将session储存在server后端的集中式快取优点:没有安全隐患可以水平扩充套件,支援快取丛集或横向拓展不足:增加了一次网络呼叫需要修改应用程序码4. session会话粘连

session会话粘连

session会话粘连:英文原词为"Sticky Sessions"

思路:反向代理层让同一个使用者的请求保证落在一台server上呢?方法一:四层代理hash。反向代理层使用使用者ip来做hash,以保证同一个ip的请求落在同一个server上(更推荐,保证传输层不引入业务层的逻辑)方法二:七层代理hash。反向代理使用http协议中的某些业务属性来做hash,例如sid,city_id,user_id等,能够更加灵活的实施hash策略,以保证同一个浏览器使用者的请求落在同一个server上优点:只需要改nginx配置,不需要修改应用程序码可以支援server水平扩充套件不足:server水平扩充套件,rehash后session重新分布,会有一部分使用者路由不到正确的session即使hash杂凑均匀,也不能保证server的负载均匀更多内容,欢迎关注微信公众号:全菜工程师小辉~

2020-02-01 03:58:00

相关文章