怎么理解和设计应用的无状态化?

什么是无状态?

无状态(statelessness)指的是服务内部变量值的存储。这句话怎么理解?我们可以理解为在我们的服务器内部存储一个变量。
一个请求过来,那么此时带着该变量的就为有状态,或者在客户端存储了该变量,请求过来时,需要重复使用该变量的也是有状态的体现。

那么我们怎么做,可以让我们的应用软件是无状态。那么我们需要将该变量存储在
第三方的一些服务或者中间件上,比如将用户登陆token存储在redis上。
这样将有状态的信息隔离在了第三方服务上,从而保证我们自己的应用本身无状态化。

判断是不是无状态?
1. 发起两个相同的请求a,b
2. 查看请求的上下文信息
3. a请求默认使用b请求信息  则为有状态
4. a请求没有使用到b请求的信息,则为调用了其他服务器或者中间件所存储的公共信息, 则为无状态。

无状态的场景使用       
        
WEB服务器
    请求和请求本身之间是是无状态的。
服务器模块本身                
    是无状态的。特定版本的模块只会存在一个实例。我们不会实例化软件模块,
尽管我们需要实例化软件模块中的类,这些类会保持状态,
但是模块本身不会这样做。符合这部分定义的软件实体样例包括WAR、EAR以及JAR文件。

有状态的场景和使用
CAS服务器
    请求推客户端cookie TGC的形式存在.
    下一次请求会带着这个cookie进行与CAS认证服务内TGT授权和校验服务进行交互,以维护上下文关系。
MSN QQ 微信 网络游戏等服务器
    这种存在即时性通讯的服务,会维护每个链接的状态,通过请求来维护或者管理或者重现这种上下文关系。
    
对比无状态和有状态

有状态:服务间数据需要同步 主从同步  副本同步等  扩容复杂  双机热备等 宕机容易丢失数据
无状态:服务间数据不需要同步  扩容快速   热备冷备切换容易 容易水平扩展。

怎么做到应用无状态化?
    a. 通过配置管理中心 进行配置文件的有状态化 驱动应用的无状态化。
    b. 通过第三方软件服务进行存储处理、集群、扩容等手段,来保证所应用的隔离达到应用的无状态化。
    c. 通过自己设计第三方的隔离服务,集成所需要无状态化的应用服务。
    

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值