有状态服务和无状态服务

概念
服务一般分为有状态服务(Stateful Service)和无状态服务(Stateless Service)。它们的区别是,当请求发起后,服务在服务端运行时是否需要关联上下文。
有状态服务,服务端需要保存请求的信息,并且其它请求还可以使用已保存的信息。
无状态服务,服务端处理逻辑中所需要的数据,全部来此本次请求中带的信息。虽然服务端也保存了一些信息,但是这些信息要么与请求无关,要么所有请求都可以公用。

区别
无状态服务可以有一个或多个实例;有状态服务只有一个实例。
请求和请求间没有强关联关系,所以无状态服务实现扩展比较方便,请求可以发送至任意服务上去,而不用考虑请求切换问题。
有状态服务可以实现事务,事务简单来说就是多件事情组成一个集合,集合中没见事情要全部正确完成了,这个集合才算完成。如果集合中的事情有一个没有完成,即使其他事情完成了,也得将已完成的事情的相关数据恢复到原来的状态,就是回滚。
比如说,同一个用户的业务逻辑,多次请求的数据可以存放在session中,当另外的几个请求处理完成后,从session中取出数据完成最终的处理。
实现事务,session和cookie都可以,一般session可看作是有状态的,cookie是无状态的。
那么有状态服务方便实现事务,无状态服务其实也能实现事务。

无状态服务实现事务有这几种办法:
1、用session
无状态服务虽然每次请求没有关联,但是对于同一个用户session却是公用的,所以可以将几次请求的数据放在session中,完成数据的传递。
2、隐藏表单
当第一个请求传递了数据到服务端后,可以将第一个请求的数据作为另一个请求中某个表单的隐藏数据,当另一个请求提交时将这个隐藏数据取出来合并到一起提交。
3、用cookie
多次请求的数据保存在cookie中

如何使用
在不考虑水平扩展,并且有事务需要的场景中,使用有状态服务。
需要伸缩扩展,可以用无状态服务,无状态服务实现事务,可以使用例如session,隐藏表单等手段完成事务的实现。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值