最近比较关心如何构造所谓有状态的容器应用。我们提到有状态,无状态,其实纠缠不清,因为它隐含了两层含义。一层是逻辑需求,一层是实现。
逻辑需求层面,也许我们应该避免overload这个有状态,无状态的术语,改为session间有没有依赖性。对有依赖性的应用,有时也有人称为stateful application/stateful workloads. 在本文中我们避免这个称谓。

stateful和stateless,如今在业界更多的用于描述实现.

有状态无状态的实现,这里指的是跨session(aka 请求)之间,在service里面(aka 在server上)有没有保持跨session的内容。无状态,在service里面没有需要跨请求session的内容,每个请求session都可以重新开始,在任意一个节点上都可以。

有状态实现,就必须找到存有/知道处理上一个请求session的service节点(一个跨session information的Owner, aka affinity),找到它,然后取到存在service/server里的状态,才能处理。。这样,应用的scale out就变得比较困难。

session间没有依赖性

首先注意session间有无dependency和实现是stateless/stateful不是等同的关系。如果session间无dependency,那么天然是无状态的。如果session间有依赖性,则要看实现。

session间有依赖性

如果session之间是有依赖关系,要用到上次的结果,那么就只能先把上次的结果拿出来。这时候可以用有状态的实现,也可以用无状态的实现,只是状态记录在哪里的问题(客户端,server端,DB)

有状态的实现,就需要寻找这个特殊的owner。

server无状态的实现,有时称为“Share nothing”, 就是:

  1. 客户端每次请求带着所需状态。这种在web应用一般比较少见,因为对客户端的掌控力有限。
  2. 在每次session结束后,把状态写入一个持久化DB,这样下次从DB中读取
    这样虽然麻烦一点(对DB的存取多一些),但是能够scale out,所以总的处理能力和吞吐量上升了。

stateful的好处:

  • client变的简单,在server端记录数据,不需要client通过cookie等记录

stateless的好处:

  • 可以scaleout

Serverless就是把所有的stateful问题,通过存储来倒换,转化成stateless的。所以两个serverless之间的交互通过一个存储。这也有些[缺点](https://blog.csdn.net/SpanningWings/article/details/87314099)。

概念上DB层是有状态的实现

因为从概念上DB层,数据必须保持在“DB server”(这一层是state owner),符合我们说的有状态实现的定义。虽然在数据库内部实现,也可以分出stateless层来, 但最终有一层必须是stateful层,因为信息只会存在那里。最终有一个Owner的概念。最低最低,存储介质比如硬盘,是state owner。

各层基本上是个OR的关系,只要各层之间就插入一个有状态层的实现,就能够实现对“逻辑上session间有依赖关系”的支持。

Stateless,stateful实现相关推荐

  1. 有状态和无状态(@stateless/@stateful)

    基本概念:  有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的.在不同方法调用间不保留任何状态.  无状态就是一次操作,不能保存数 ...

  2. J2EE从头开始__EJB3

    这么多天以来,一直都在找软件,找方案,到底要怎样做J2EE项目呢 Eclipse,Jboss,Mysql这些是免费的吗,没花钱的东西就是不放心. 我喜欢正版,不喜欢因为是免费的所以不负任何责任的.. ...

  3. 2019 Flutter 心愿单

    | 作者:Ryan Edge | 原文链接:medium.com/flutter-com- | 公众号链接:mp.weixin.qq.com/s/5ghu1YkFw- 我之前去了 DartConf 2 ...

  4. JPA、EJB、事物管理、WebSphere ---相关内容整理

    目录 1.前言 ■实现原理:容器管理事务 ■代码实现简单描述: 2.EJB 标签 2.1.EJB中的有状态与无状态( @stateless/@stateful ) 2.1.@Stateless 与 @ ...

  5. 密码学常用英文单词翻译

    文章目录 索引abcde a b c d e 索引fghijk f g h i j k 索引lmnopq l m n o p q 索引rstuvwxy r s t u v w x y z 索引abcd ...

  6. What comes after microservice?

    What comes after microservice? (Jin Qing's Column, Oct. 25, 2021) Reading "The Evolution of Dis ...

  7. 学 Flutter 不理解 Widget/Element/Render 三棵树?啥也不是!

    一.导语 Hi,大家好,这里是承香墨影! Flutter 是 Google 发布的跨平台 UI 框架,而其中与 UI 相关的,最重要的就是 Widget & Element & Ren ...

  8. Play with Neutron IPv6 (by quqi99)

    作者:张华  发表于:2016-06-13 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 实验 ...

  9. OpenSIPS的无状态及有状态路由

    从SIP消息路由的角度看,OpenSIPS既可以作为无状态代理,也可以作为有状态代理.区别仅仅是处理SIP信令的脚本中调用了什么函数而已. 在有状态模式下,OpenSIPS在内存中记录了SIP事务的状 ...

最新文章

  1. 代码总是被嫌弃写的太烂?装上这个IDEA插件再试试!
  2. KTHREAD 结构体属性介绍
  3. Python idle下载、安装与使用教程
  4. 微信好友特征数据分析及可视化
  5. mysql 创建定时器
  6. flutter对比Android绘制流程,Flutter与android的对比---View
  7. windows下升级nodenpm
  8. 使用yuicompressor 压缩js, CSS
  9. 关于input样式的一些技巧
  10. install memcached for ubuntu
  11. kafka 查看消费者组
  12. breakall lisp文件_CAD图导入SU中一次成面的方法
  13. PropertyUtils.copyProperties复制对象失败
  14. iOS动画之CAAnimation
  15. 项目管理之项目章程和三个重要说明书
  16. 谈谈如何提升工作效率,需要从这4方面入手!
  17. 各类符号汇总:希腊、数学等
  18. table表单的修改和保存
  19. 浅谈如何带领好一个团队
  20. 已经无限接近于真实!EA下一代寒霜引擎展示令人惊叹的毛发效果

热门文章

  1. 首个MaaS正式上线,元界即服务将会是未来吗?
  2. PHP 删除文件夹下所有文件
  3. 使用Photoshop实现雪花飘落的效果
  4. Ubuntu20.04换源,安装基本脚本,自用
  5. 【C语言游戏】三子棋完整代码和正确结果截图
  6. java开发微信模板消息推送
  7. 百度百科怎么创建?怎么编辑百科词条才能通过?|独家
  8. 21.9.15 ActivityThread
  9. ubuntu启动时黑屏,无法进入登录界面
  10. 尚硅谷VUE项目-前端项目问题总结07--产品详情页【vuex-排他操作foreach-放大镜-轮播图-兄弟组件通信$bus-购物车-路由跳转传参-路由传参+会话存储】-游客身份-节流