有位星球水友提问:
如何保证session一致性?
这个问题太泛了,今天系统性讲讲session常见的N种方案,不知道是不是兄弟你想要的。
什么是session?



-
session的同步需要数据传输,占内网带宽,有时延 -
所有web-server都包含所有session数据,数据量受内存限制,无法水平扩展 -
有更多web-server时要歇菜

-
每次http请求都携带session,占外网带宽 -
数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患 -
session存储的数据大小受cookie限制


-
只需要改nginx配置,不需要修改应用代码 -
负载均衡,只要hash属性是均匀的,多台web-server的负载是均衡的 -
可以支持web-server水平扩展
-
如果web-server重启,一部分session会丢失,产生业务影响,例如部分用户重新登录 -
如果web-server水平扩展,rehash后session重新分布,也会有一部分用户路由不到正确的session

-
没有安全隐患 -
可以水平扩展,数据库/缓存水平切分即可 -
web-server重启或者扩容都不会有session丢失
-
session同步法:多台web-server相互同步数据 -
客户端存储法:一个用户只存储自己的数据 -
反向代理hash一致性:四层hash和七层hash都可以做,保证一个用户的请求落在一台web-server上 -
后端统一存储:web-server重启和扩容,session也不会丢失
-
web层、service层无状态是大规模分布式系统设计原则之一,session属于状态,不宜放在web层 -
让专业的软件做专业的事情,web-server存session?还是让cache去做这样的事情吧
发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/6559