无状态服务与有状态服务

无状态服务与有状态服务

两者定义:

  • 无状态服务(stateless service) 对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息
  • 有状态服务(stateful service) 则相反,它会在自身保存一些数据,先后的请求是有关联的。即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理。典型的设计如tomcat中
    的session。例如登录:用户登录后,我们把登录者的信息保存在服务端 sesssion中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而而找到用户的信息。

示例:

  • 无状态数据示例:一个Web服务器返回静态HTML页面。无论谁发出请求或何时发出请求,服务器总是返回相同的页面内容,不需要记住之前的请求。
  • 有状态数据示例:一个在线购物车系统。系统需要记住每个用户的购物车内容,直到他们完成购买。这意味着系统必须在多次请求之间维护和更新状态信息。

状态服务与无状态服务比较:

  • 单体条件下面,服务只有一个,因此状态每个时刻也就只有一种状态。在分布式集群环境下面,就存在一个状态同步问题,因此也有有状态服务设计无状态服务设计。比如session,如果session保存在每一台服务器上,那么就是有状态设计,可能会出现集群内,服务状态不一致的现象;如果session由专门的一台服务器来保存,就是无状态设计,服务不保存状态,需要的时候从同一的服务器中获取,保证了服务在任何时刻的状态一致。

  • 有状态的服务,会有比较明显的缺点:

    • 服务间数据需要同步,成为副本关系,逻辑复杂也浪费资源(这也是分布式系统最为关键的问题)
    • 服务端保存大量数据,增加服务端压力;
    • 服务端保存用户状态,无法进行水平扩展;
    • 客户端请求依赖服务端,多次请求必须访问同一台服务器;
  • 无状态的应用服务器,不保存上下文信息,只负责对用户的每次请求提交数据进行处理然后返回处理结果 无状态应用服务器之间是对等的关系,无依赖,请求到哪个服务器,处理结果都一样的。

在这里插入图片描述

再抽象下

无状态就是一次操作,不能保存数据。

有状态就是有数据存储功能,既然可以存储数据,而数据又是变化的,在分布式系统中,种种问题也都是因为数据同步引起的。在CAP定理中,因为P的存在就导致了要在C、A中做选择。

参考文章:

精通有状态与无状态:https://www.iteye.com/topic/960532

分布式系统中的“无状态”和“有状态”详解:https://cloud.tencent.com/developer/article/1620559

分布式无状态设计及幂等设计:https://www.jianshu.com/p/f8745ab297a4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值