欢迎来到天天文库
浏览记录
ID:21065410
大小:717.50 KB
页数:107页
时间:2018-10-17
《企业级应用系统体系架构十状态管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、企业级应用系统体系架构(十)状态管理ChenHaopengWednesday,September29,2021References:Ted Neward:EffectiveEnterpriseJava12状态管理对于寻求真理的人而言,有些准则是必须遵守的,真理并非教条或无知,而是通过推理、调查、检验、与探究得来的。无论其意图有多好,信仰都必须构建在事实而非幻想之上,幻想之上的信仰是最糟糕的虚假希望。——ThomasEdison3状态管理在企业级系统中,大部分工作都涉及数据处理。事实上,可以论证,企业级系统只做了一件事,那就是数据处理
2、。在两层架构的客户/服务器系统时代,这还不太明显,那时企业级程序员需要关心两种状态:瞬时状态(transientstate)与持久状态(durablestate)。瞬时状态并不算企业级数据所覆盖的正式部分,持久状态则是无论发生什么都需要被跟踪的部分。4状态管理瞬时状态是那些企业并不关心,也不会为之流泪的数据,因为在系统崩溃的时候,真正重要的东西决不会丢失。电子商务中的购物车是瞬时状态典型的例子。在厚客户端或富客户端的应用中,瞬时状态很容易处理:相当于客户端进程中存储在局部变量中的数据,它们没有被保存在持久的存储介质中。当客户端进程结
3、束的时候,瞬时状态也随之消亡,无需为其生命周期的处理而多费心思。5状态管理不过在瘦客户端中,例如基于HTML浏览器的应用,瞬时状态则呈现出另一种尺度。因为HTTP本就是无状态的协议,自身并不具备保存每一个客户端状态的能力。所以要由程序员在底层协议之上自己实现瞬时状态机制。另一方面则是持久状态,在谈到它时人们自然就会想到“持久数据(persistentdata)”,即需要长久保存的数据。正规的说法是,如果定义了某个持久状态,那么它就绝对会被保存下来,即使遇到JVM终止甚至崩溃的情况也是如此。6状态管理持久状态通常具有隐含的法律性或经济
4、意义。在讨论状态管理时,二者的区别至关重要。因为对瞬时状态有效的机制对持久状态不一定有效,反之亦然。7状态处理第1项:节省地使用HttpSession第2项:使用对象优先的持久化来保存你的领域模型第3项:使用关系优先的持久化来显示关系模型的威力第4项:使用过程优先的持久化来创建一个封装层第5项:识别对象-层次结构的阻抗失配(impedancemismatch)8节省地使用HttpSession在基于HTML/HTTP的应用中,为维护代表客户端的瞬时状态,servlet容器提供了一种称为会话空间的设施,被表示为HttpSession接
5、口。遗憾的是,这种机制并非完全免费的。首先,在服务器端为每个客户端存储数据将会减少该服务器上的可用资源,这意味着服务器的最大负载能力会成比例地下降。这个算式很简单:在会话空间中保存越多的数据,机器能够处理的会话就越少。由此推导出,为了令给定的机器能够支持尽可能多的客户端,必须将会话的存储量保持在最小。实际上,对于真正具备可扩展性的系统而言,无论何时都应该避免使用会话。如果在服务器端可以不产生任何为每个客户端进行处理的开销,那么机器的负载能力(在理论上)可以到达无限,能够支持任意多连接到它的客户端。9节省地使用HttpSession避
6、免使用会话的建议不单单是考虑到系统的可扩展性。对于在Web集群内运行的servlet容器而言,这也是必须的。会话是驻留内存的结构。因为内存是局限于特定的机器,除非Web集群有某种机制,能够令给定客户端的每一次请求都被传送给同一个服务器,否则对应先前的某个请求,其后续处理可能会找不到之前存储的会话对象。10节省地使用HttpSession有一种可能的机制可以对此提供支持:在服务器集群中,指派一个单独的节点作为会话状态服务器。对每一个请求,无论哪个节点正在处理它,该节点都向会话状态服务器查询此客户端的会话状态,然后将会话状态通过网络传给
7、处理此请求的节点。然而,这种机制有两种副作用:(1)每个请求都增加了一次与会话状态服务器之间的往返访问,这增加了客户端请求的等待时间。但更重要的是,(2)所有的会话状态都被存储在集中的服务器上,这使得集群中产生了一个单一故障点(singlepointoffailure)。11节省地使用HttpSession另一种可能的机制是采用P2P(peer-to-peer)方式。当一个请求进入某节点时,此节点发出一个集群广播信号,询问其它节点是否拥有此客户端最近的会话状态。拥有此客户端最近状态的节点对此做出回答,并将该会话状态传递给当前正处理请
8、求的节点。12节省地使用HttpSession与会话相关的另一个需要注意的问题是会话的意外使用。JSP的规范清楚地陈述道,对于给定的JSP网页,“打开”会话的指示(带有session属性的@page指示性标记),缺省地被设置为true
此文档下载收益归作者所有