1.无状态的价值无状态服务器意味着什么?对对象来说,它们结合了状态(数据)和行为。一个真正无状态的对象是没有成员变量的。然而,这不是人们在分布式企业应用中所指的无状态。分布式企业应用中的无状态服务器是指在各次请求之间不保存状态的对象。这样的对象也是可以有成员变量,但当你调用无状态服务器上的方法时,这些成员变量的值是没有意义的。举例,如返回一个web页面告诉你一本书的所有信息。可以通过访问一个url而发出请求,在url中你提供一个ISBN号,服务器用它产生http应答。在交互过程中,服务器对象在生成html页面之前可能记住了从数据库中得到的这本书的ISBN号,数目,单价等信息。服务器对象还可能通过业务逻辑来决定显示什么风格的页面给用户。一旦服务器对象完成工作,这些记住的信息也没什么用了。接收到下一个ISBN号就重新开始了。现在设想下,你需要记录由一个特定客户ip地址所访问的所有ISBN号,记录可以保存在服务器对象维护的一张表中。然后,这张表必须在各次请求之间保持它的值,这就成了有状态服务器对象。问题主要出在服务器的资源上。在等待用户去考虑一个web页面时,任何有状态的服务器对象都需要保存它的状态。而无状态服务器对象则可以处理来自其他会话的请求。举个例子:有100个人需要查询书籍,处理一本书的请求需要1秒钟,每个人隔10s请求一次,而且所有的请求都分布的很平均。如果我们使用有状态服务器对象来处理用户请求,就必须给每个用户分配一个服务器对象,即100个对象。但是在90%的时间里,这些对象都呆在那里不知道干什么。如果我们不做ISBN号记录而只使用无状态服务器对象来处理请求,就只需要10个服务器对象满负荷工作。结论就是:如果在请求之间不需要保存状态,就不用关心是哪个对象来处理某一次请求;如果状态需要保存,就必须找到同一对象来处理。无状态使得我们可以缓存这些对象,用很少的对象就可以处理很多的用户。空闲状态的用户越多,无状态服务器就越有用。可以想象,无状态服务器对一个高流量的网站来说非常有用。由于http是无状态的协议,因此使用无状态更加适用。所以,把应该把所有的东西都做成无状态对吗?当可以这样做的时候,答案是肯定的。问题在于很多与客户端的交互本身就是有状态的。例如购物车,购物车的信息必须在用户的整个会话中保存。实质上这是一个有状态的业务事务,也就说明会话必须是有状态的。2.会话状态购物车的内容就是会话状态,意味着车中的数据只与特定的会话有关。这种状态存在于业务事务中,与其他的会话及它们的业务事务是分开的。会话状态也区别于我们称之为记录数据的信息,记录数据是长期保存在数据库中的持久化数据,它对所有的会话都可见。会话状态需要提交成为数据库中的记录。会话状态最大的问题出现在处理隔离性的时候。不能把会话中的所有数据都看成会话状态。会话可以临时缓存实际上并不需要在各次请求间保持的数据,以便提高服务性能。由于丢失这些缓存的数据也不会影响程序的正确性,这样的数据有别于会话状态,会话状态必须在各次请求间记录以保证程序的正确执行。3.存储会话状态的方法1.客户会话状态在客户端保存数据,有几种可选的方法:在web应用中可以将数据编码在url中,使用cookie,串行化数据使其成为web表单中的某个隐藏域,或者把数据放在胖客户端的对象结构中。2.服务器会话状态在各次请求之间把数据放在内存里。通常也可以把数据以序列化对象的方式更长久的存放起来。对象可以存放在应用服务器的文件系统中,或者存放在某种共享的数据源中。可以是一张数据表,它以会话标识为关键字,以已序列化对象为值。3.数据库会话状态也是在服务器端存储的方式,但这种方式把会话数据分解成多个表和域,并把它保存在数据库汇总。上述几种方法的选择有很多值得考虑的地方。首先,考虑客户端和服务器之间所需的带宽。使用客户会话状态意味着在每次请求时必须将会话数据通过网络传输。有些数据需要传输,因为它必须在表现层可见。但使用客户会话状态意味着每次请求必须传送服务器索要用到的会话数据,即使客户端根本不用这些数据来显示。所有这些说明除非会话状态真的很少,否则不要使用客户会话状态这种方式。还应注意安全性和完整性。必须认识到恶意的用户会修改会话状态,除非对数据进行加密。会话数据必须进行隔离。大多数情况下,在一个会话中进行的动作不应该影响其他会话中的动作。实际上,会话数据的部分含义是它对会话外的任何事务都是不可见的。采用数据库会话状态时,这是个棘手的问题,因为必须花力气将会话数据与存放在数据库中的记录数据相隔离。如果系统中有很多用户,应该考虑使用集群来提高吞吐率。这种情况下还需要考虑是否需要会话迁移。会话迁移允许一次会话从一台服务器转移到另外一台服务器,从而可以由一台服务器处理一个请求,其他服务器处理其他请求。预期相反的方式是服务器亲和,它要求某次特定会话的所有请求只能由一台服务器处理。会话迁移能更好的均衡服务器,特别是会话很长的情况下。然后用服务器会话状态很难支持会话迁移,因为只有处理会话的那个服务器才能容易的找到会话的状态。也有办法处理这个问题---这类方法将模糊数据库会话状态与服务器会话状态之间的界限。服务器亲和会带来意想不到的问题。在尽量保证服务器亲和时,服务器集群并不能总是判断出每个请求所在的会话。因此,集群系统不得不提高亲和力,把来自同一个客户端的所有请求交给一台应用服务器。通常是客户端的ip,绑定到一个特定的服务器上。当发现大量的负载集中在某台服务器的时候,就知道情况变糟糕。当服务器决定使用会话状态时,需要把它转化成一种便于快速访问的形式。如果使用服务器会话状态,很容易直接访问到会话状态。如果使用客户会话状态,就需要黄钻换到你想到的格式。如果使用数据库会话状态,就要到数据库中去取信息。在一个零售系统中,每个会话也许没有那么多数据,但肯定有很多处于空闲状态的用户,因此,数据库会话能发挥很好的性能。在一个租约系统中,则会有不停读写数据库的可能,这是服务器会话性能较好。在许多系统中,最令人担心的是用户经常会取消一次会话,而且再也不会用它。在b2c的应用中经常遇到一个尴尬的问题:用户常常不会直接取消会话,而是消失的无影无踪。这时采用客户会话最合适,因为你可以很容易的忘掉那个用户。在其他方式中,必须能够发现那些被取消的会话并将它们清除掉,或者采用某种支持会话超时的系统。好的服务器会话状态实现自动支持会话超时。与用户取消会话一样,需要考虑系统失效:客户机可能崩溃,服务器可能死掉,网络连接可能突然断掉。数据库会话能很好的应付这3种情况。服务器会话状态可不可以取决于会话数据是否放到了持久的存储介质上。客户会话在客户机崩溃时无能为力,但能应付其他两种情况。还有开发代价。通常服务器会话状态是最容易使用的,特别是不需要将会话数据存储到持久介质上。数据库会话和客户会话状态则通常需要对数据进行解析和转换。

https://juejin.im/post/5c5074ea6fb9a049f23d2a96

6.企业应用架构模式 --- 会话状态相关推荐

  1. 软件开发大师谈企业应用架构模式

    <企业应用架构模式(英文版)> --作者:Martin Fowler 多年来,Martin Fowler --这位享誉世界的软件开发大师--见证了许多企业级应用项目.这些项目通常都包含相似 ...

  2. [201004][企业应用架构模式][王怀民][周斌][译]

    [201004][企业应用架构模式][王怀民][周斌][译] 模式列表 引言 0.1 架构 0.2 企业应用 0.3 企业应用的种类 0.4 关于性能的考虑 0.5 模式 0.5.1 模式的结构 0. ...

  3. 企业应用架构模式-30天阅读计划

    构建计算机系统并非易事.随着系统复杂性的增大,构建相应软件的难度将呈指数增大. 同其他行业一样,我们只有在不断的学习中进步,从成功经验中学习,从失败教训中学习,才有望克服这些困难. 这本书的内容就是这 ...

  4. 《企业应用架构模式》30天阅读计划

    构建计算机系统并非易事.随着系统复杂性的增大,构建相应软件的难度将呈指数增大. 同其他行业一样,我们只有在不断的学习中进步,从成功经验中学习,从失败教训中学习,才有望克服这些困难. 这本书的内容就是这 ...

  5. 图书推荐5:《企业应用架构模式》

    文章目录 基本介绍 推荐理由 总结 延续 基本介绍 书名 企业应用架构模式 作者 (美)Martin Fower 译者 王怀民 周斌 出版社 机械工业出版社 出版时间 2004年12月 页数 363 ...

  6. 企业应用架构模式笔记

    1 企业应用模式概述 1.1 企业应用的模式 企业应用领域要解决的问题在某些方面要比做一个工具软件.或者一个电信通信软件等复杂的得多,比如纷杂的企业数据,各具特色的业务规则,变化莫测的用户需求.因此企 ...

  7. 企业应用架构模式学习笔记

    1.概述 2.分层 表现逻辑处理用户与软件间的交互.表现层的主要职责是向用户显示信息并把从用户那里获取的信息解释成领域层或数据源层上的各种动作. 数据源逻辑主要关注与其他系统的交互,这些系统将代表应用 ...

  8. 企业应用架构模式 读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> 模式列表 Active Record 活动记录:包装数据库表或视图中的行,封装数据库访问,并将业务逻辑加到该数据上的对象. A ...

  9. 第八天-《企业应用架构模式》-通盘考虑

    思考三个方面的技术实践:持续集成.驱动测试开发和重构 1. 从领域层开始 1)事务脚本模式最简单,适合于在关系数据库之上构建:领域模型需要非常专业的技术,还有鱼数据库的连接:表模块模式折中,在.Net ...

  10. 重温经典之《企业应用架构模式》——.NET中的架构模式运用 (Base Patterns 1)

    今天看看几个基本模式,这包括Gateway模式,Mapper模式,LayerSupertype模式和Separated Interface模式. 在这本书的最后一章,Martin Fowler放了一大 ...

最新文章

  1. mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例
  2. 【UEditor】百度编辑器插入video视频
  3. python学习中遇到的问题
  4. Spring 事务相关及@Transactional的使用建议
  5. 二叉树经典题之从前序和中序遍历构建二叉树
  6. 计算机应用从组织内部,全国2014年10月自考管理系统中计算机应用试题和答案
  7. pyqt5 qscrollarea到达_PyQt5如何用QPainter在QScrollArea上画线?
  8. C#实现WEB服务器
  9. php 当前页面停留时间,PHP 记录页面停留时间
  10. python实现tkinter可视化一
  11. 大一计算机上机考试模拟试题,计算机等级考试二级上机模拟试题(1)
  12. 服务器修改lang值,golang设置http response响应头与填坑记录
  13. 配置generatorConfig.xml自动生成的代码的sql书写问题
  14. 2021 年百度之星·程序设计大赛 - 初赛三
  15. aceadmin1.4框架treeview多选改造
  16. 缓存算法篇其一-----FIFO(先入先出)
  17. 【AI教程】AI科研绘图
  18. python基础教程四级查数据_四六级成绩还可以这样查?Python助你装B一步到位!!!...
  19. 应用宝shangjia安全评估报告_腾讯应用宝市场的app 安全评估报告怎么写
  20. 【云开发】全网最详细壁纸小程序教程+源码

热门文章

  1. c/c++ linux 进程 fork wait函数
  2. thinkphp5 --接口实例
  3. 1.1 项目过程中遇到date类型插入数据库的问题及解决方法
  4. 兼容ie10以下版本的placeholder属性
  5. Photoshop投影和CSS box-shadow转换
  6. 1011. World Cup Betting (20)——PAT (Advanced Level) Practise
  7. SqlHelper的编写
  8. 项目总结【Excel中附件导出和导入】
  9. WIN server 2003 安装(AD)域控制器
  10. 数据科学之——大数据体系