这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
【序】
- 众所周知,REST约束了 ==服务器需要是无状态的== (REST知识补充->详解REST和RESTful)
- REST是于2000年提出的架构风格,session的提出应该早于REST(通过维基百科查询cookie的历史,写到cookie的技术专利申请于1995年)。
- session是有状态的,为了解决HTTP的无状态特性带来的不便:在当时看来,HTTP的无状态确实可能有不便之处,因为即使在现在的小型系统中,session也经常被使用。
现在还是有大量系统在使用着session:这对于简单系统(单体架构)来说并无大碍,甚至可能开发起来更为方便;
但是在分布式系统做水平拓展时,由于状态只存在于一台服务器,就会造成找不到对应状态的问题
一、将有状态转为无状态
通过将状态传递到一个单独可共享的地方,独立于server存在。
比如传递到redis等,以使server保持”无状态”
推荐这篇文章 集群/分布式环境下5种共享session处理策略
其中的 session共享机制-非粘性session处理方式
、session持久化到数据库
属于这种方案
二、保持有状态
解决方案是:分布式共享session
即session还是存在于服务器中
可通过绑定让过来的请求始终发到存有其状态的服务器
或通过复制,让所有的服务器都保存状态
依旧推荐这篇文章 集群/分布式环境下5种共享session处理策略
其中的 粘性session
、服务器session复制
、session共享机制-粘性session处理方式
、terracotta实现session复制
都属于这种方案
【附】推荐 无状态鉴权的最优做法:jwt
鉴权是几乎每个系统都会做的事
在没有jwt之前,我们通常会采取以上提到的解决方案,服务器有状态 或 将状态独立于服务器
有了jwt之后,鉴权变得更加简单起来
jwt提供的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权
贴一个不错的文章链接,这里就不做赘述:JWT实现无状态登录
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END