首页 >运维 >安全 >session一致性设计

session一致性设计

大鹏
大鹏原创
2021-06-25 18:09:37223浏览

session一致性

什么是session

web-server可以自动为同一个浏览器的访问用户自动创建session,提供存储功能。一般把用户登录信息存到session中。

什么是session一致性问题

当后端只有一台web-server的时候,每次http请求,都能找到正确的session。问题是不能满足高可用,一台server挂了就完蛋了。冗余+故障转移,部署多台web-server,nginx路由到不同的web-server。每次http请求都路由,不保证路由到同一个server,就有了一致性问题。

解决session一致性的常用方案

一致性hash

最先想到的方案,根据客户端IP做hash,保证同一个IP落在一个web-server上。还可用根据业务字段做hash,例如userId、cityId,使用更灵活。但这样破坏了单一原则,让网关和业务粘连,如非必要不推荐使用。优点:节省缓存,可用水平扩展。缺点:部分服务重启,会丢失session,导致部分用户重新登录。如果hash水平扩展,rehash后session重新分布,会有一部分用户路由不到session

session同步

多web-server之间的session互相同步,这样每个web-server都包含全部的session信息。缺点:因为包含全部session,集群数量受内存限制,扩展受限。

客户端存储

登录信息保存到客户端,每次请求带着用户信息。服务端完全无状态化,方便扩展。优点:服务端不用存储。缺点:每次http请求携带用户信息,浪费流量;存在信息泄露风险;cookie存储信息不能太多。

后端集中存储

web-server链接一个统一的存储,保存session信息,推荐存到redis集群,方便后续扩展。优点:没有信息泄露风险;水平扩展不会丢数据;缺点:增加了一次网络请求,需要修改业务代码,查询redis。

以上是session一致性设计的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn