`
wsql
  • 浏览: 11781432 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

SOA带来的性能思考

 
阅读更多

做性能测试的一个项目,仔细观察了sotown的框架,有了一个思考,soa的性能如何?

SOA 的优点

我已经在前面几个关于soa的文章中,其中soa优点也是ibm soa 架构师认证考试中重点提到的SOA的优点。

敏捷性。 组 成 SOA 应用程序的代码是模块化的;换句话说,代码被包含在可重用的块中,可以用这些代码块构建其他应用程序。可以通过抽象进一步提高编程生产力,抽象把技术细节 (比如编程语言、服务器平台和操作系统、应用服务器类型、DBMS、数据库模式等)隐藏在提供服务的程序后面,服务消费程序的开发人员看不到,也不需要了 解这些细节。当发现新的应用程序功能需求时,SOA 使组织的 IT 人员能够快速地做出反应。

质量。 复 杂应用程序的结构就像是一团乱麻,在程序和数据库对象之间存在着许许多多点到点连接。(一团乱麻这个比喻不是我说的,我最初是听一家金融公司的 IT 执行官这么说的。)SOA 会大大减少应用程序中连接点的数量,并大量使用标准语言描述应用程序提供的服务(Web Services Description Language[WSDL] 是用来描述服务的一种 XML 格式)和调用服务(常常通过另一种 XML 格式 Simple Object Access Protocol[SOAP] 来实现)。简化的 SOA 结构会降低应用程序的脆弱性;也就是说,代码修改不容易损坏应用程序。

运营灵活性。 在 SOA 中会使用抽象和标准接口,这意味着 IT 系统人员可以为应用程序基础结构的不同部分使用不同的平台和操作系统。还可以混合使用不同的编程语言、DBMS 和应用服务器。

听起来不错,不是吗?



SOA 的性能可能会成为问题,这是因为抽象要通过额外的代码来实现,这通常会增加机器指令路径长度。减少应用程序组件接口也会增加路径长度(为了处理一团乱麻的 点到点连接,必须增加集中式服务访问基础结构)。因此,就出现了一个问题:基于 SOA 的应用程序能够产生良好的性能吗?我的答案是 “可以”。我相信产生良好的性能取决于三个关键措施:对修改数据的操作使用异步处理,对数据获取请求进行缓存,对批作业进行事务化处理。

异步处理。 在 本文中,我将讨论如何解除应用程序的客户端与后端数据库修改之间的关联。例如,假设一位用户通过零售商的基于 Web 的销售应用程序提交了一个订单。这个操作会在应用程序所用的数据库中进行一些修改。如果应用程序是基于 SOA 的,那么与老式的整体式体系结构的应用程序相比,使这些数据修改生效所需的时间会长一些。但是,这是否意味着在单击 “Submit” 之后用户必须等待更长时间呢?不一定。

假设当把用户的订单信息放到一个消息队列中之后(队列可能由 IBM 的 WebSphere MQ 管理),订单输入应用程序就认为事务已经结束。这个过程会非常快。队列可以配置为可恢复的资源,所以即使整个应用程序系统崩溃了,仍然可以保留订单输入数 据。用户可以做其他事情,与此同时一个过程从队列中取出订单信息消息并适当地修改数据库。

这样做会有风险吗?是 的,但是我认为风险不大。因为订单输入数据库的更新对于最终用户对 “Submit” 的单击操作是异步的,所以如果用户马上单击订单确认页面上的 “View Order History” 链接,那么产生的视图很可能不包含刚才提交的订单。如果还没有用 MQ 队列中刚才提交的订单信息更新(获取 “订单历史” 信息的)数据库,就会发生这种情况。我相信这种风险变成现实的可能性相当小,因为用户很可能过几秒才会想要查看订单历史,他还要花时间找到并单击 “View Order History” 链接。对于订单输入应用程序的后端从 MQ 队列中获取订单信息消息并相应地修改数据库来说,几秒时间应该足够了。

通过对数据库更新操作使用异步处理,可以 改进性能(从用户的角度来看);另外,MQ 还会提高应用程序的可用性(同样是从用户的角度来看)。如果后端数据库系统无法执行更新处理(可能由于服务器或操作系统故障、程序逻辑错误或数据库维护操 作),前端队列仍然能够接收消息,应用程序仍然可以向单击 “Submit” 按钮的用户显示 “Order received”。消息会保存在队列中;当数据库恢复正常时,就会继续处理消息。同样,在用户的 “Submit” 单击操作和对应的后端数据库更新之间增加一个队列,也有助于避免后端服务器负载过大,服务器负载过大可能导致系统崩溃和非常显著的应用程序服务停顿。(在 这种情况下,消息队列的作用相当于汽车引擎的膨胀罐,这个装置有助于避免引擎过热。)

对数据获取操作进行缓存。 同 样,这个思想也是使用技术和应用程序体系结构让 SOA 发挥其优势(敏捷性、质量和灵活性),同时产生用户满意的性能。数据缓存的概念相当简单:把经常获取的数据拷贝存储在接近应用程序体系结构边界的缓存服务 器上,这样的话数据获取请求就不必通过很长的路径访问后端数据库(记录数据库)。在数据缓存技术中,比较复杂的问题是如何以及时精确的方式把后端数据库的 更新传播到缓存服务器。这个问题是可以解决的,而且不同的组织采用不同的方法更新数据缓存服务器。一些组织采取 “自产” 的办法,利用自行开发的代码使中间层数据存储与后端记录数据库保持近似同步(从技术上说,可以让缓存数据存储与后端数据库保持绝对同步,但是近似同步的开 销通常比较小,而且常常足以满足用户的需要)。其他组织使用不同厂商提供的数据缓存解决方案。无论数据缓存实现是自行开发的,还是购买的,组织都能够通过 使用数据缓存显著改进数据获取性能。在 SOA 环境中,不同的功能层、抽象和基于标准的应用程序子系统接口以及与 SOA 特有数据的关联都会增加事务响应时间,数据缓存产生的速度收益可以抵消这些时间开销,所以在 SOA 环境中尤其有意义。

对批作业进行事务化处理。 我 在以前的专栏文章 “Do You MQ?” 中讨论过批量事务化(参见参考资料)。这种技术的基本思想是,对于一个批量输入文件包含的所有记录,按照事务程序输入的形式来处理。这通常需要在批作业开 始时增加一个步骤,读取输入文件记录并把包含的信息放到一个队列中的消息中。连接这个队列的应用程序可以读取消息并执行程序逻辑来处理输入信息(这个处理 过程可以包括数据库更新)。与这个消息处理过程相关联的输出数据也可以放到一个队列中的消息中,输出最终可以组合成一个文件并传输给客户机。

当然,与传统的批处理形式相比,以这种事务化方式处理批文件的 CPU 效率并不高;而且如果事务以串行方式运行,采用事务化方式会增加处理输入文件所需的时间。并行地执行事务(也就是,让多个同时运行的事务处理输入文件记 录,而不是在一个事务内实现并行)可以显著减少所需的时间,但是这要求服务器上的 CPU 足以支持多线程(如果主机服务器的空闲处理能力很少,进程就难以实现有效的并行)。

我并不担心事务化批处理会导致在特定的时间段内集中过大的负载,相反,我认为事务化是消除传统批处理时间窗的好方法。如果批处理已经事务化了,就不再需要以文件形式接收输入。一个队 列包含来自文件的输入记录,这个队列可以(以可靠的方式)作为 Web 服务向最初发送文件的客户机公开。这样做的好处是,客户机可以在生成输入记录时随时发送它们,而不必把记录集中在一个文件中并在特定时间发送。由于采用事 务化处理,与处理客户机输入记录相关联的输出可以在生成时及时地返回给客户机。因此,如果客户机在上午 9 点生成输入记录并发送给您的组织,那么在上午 9:05 就能够收到响应(甚至更快),而不需要等待 24 小时才收到包含其他许多响应输出的批量响应输出文件。用户会对组织离线地(也就是以异步方式)处理输入记录的能力感到吃惊。这个特色会给您的组织提供重大 的竞争优势。

思考 —— 但是要以不同的方式思考

SOA 看起来似乎会损害性能,但这往往是一种误解,在我的前一篇文章中也认为soa会有性能的开销,比如esb。因为人们习惯于按照老式应用程序的思路考虑 SOA 应用程序的性能。如果把 SOA 应用程序看作完全不同于老式应用程序的工作方式,您就会发现不但能够实现相似的性能,而且通过改进服务质量,客户机的性能水平甚至可能出现重大突破。实现这个目标容易吗?当然不。这涉及许多步骤:决定应用程序处理应该异步执行还是同步执行,确定实现数据缓存的方式和位置,决定如何在事务化环境中处理传统的批功能,评估和实现企业服务总线和工作流组合技术以帮助设计和执行复杂的离线事务处理

分享到:
评论

相关推荐

    基于 SOA 应用程序的性能测试方法

    基于 SOA 应用程序的性能测试方法, 比较系统

    soa心得体会soa心得体会;

    soa心得体会;soa心得体会;soa心得体会;soa心得体会;

    解读SOA :SOA实践方法论

    解读SOA Interpret SOA SOA越来越被企业接受,很多公司都准备规划SOA。但具体怎么上,没有一套很好的方法论是不行的。资料是IBM在长期的摸索中总结的一套SOMA方法论,由于是内部培训资料,所以比较难得。 内容 ...

    SOA实践指南-分布式系统设计的艺术.pdf

    第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3 性能和可重用性  13.4 性能和向后兼容性  13.5 总结 第14章:soa和安全  14.1 安全需求  14.2 处理安全需求  14.3 实践...

    SOA的模式SOA的模式

    SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式SOA的模式

    SOA资源,SOA教程,SOA开发

    SOA资源,SOA教程,SOA开发SOA资源,SOA教程,SOA开发

    面向服务架构(SOA)中南大学SOA原理与技术 00 课程简介(共66页).ppt

    面向服务架构(SOA)中南大学SOA原理与技术 01 SOA技术概述(共74页).ppt 面向服务架构(SOA)中南大学SOA原理与技术 02 Web服务基础(共66页).ppt 面向服务架构(SOA)中南大学SOA原理与技术 03 Web服务实现(共...

    基于管理软件SOA的性能测试方法

    基于管理软件SOA的性能测试方法。SOA应用程序的性能测试包括了benchmarkingtest(基准测试),capacitytest(容量测试)和soaktest(浸泡测试)三个主要测试阶段。基准测试(BenchmarkingTest)  SOA应用程序的性能测试包括...

    SOA作业及要求,soa

    SOA作业及要求SOA作业及要求SOA作业及要求

    SOA的设计误区(SOA架构师必读)

    如果无法更准确的把握SOA实施对于技术性能的要求,我们可以首先了解一下结构问题。SOA设计不是一项独立、分离的任务。成功需要理解并适应各种关系以及SOA解决方案要素和关键企业IT资产之间相互依赖的关系。  在充分...

    SOA概述SOA基础

    讲述关于SOA的原理,有关架构,是一种新兴的技术,用来支持WEbservice,提供服务

    SOA设计模式.doc

    SOA 社区也受邀贡献出他们在生产环境里使用并验证过的模式,社区的回应带来了34 个新模式。最后的目录是85个独立的或复合的模式,加上28个候选模式,他们目前还继续接受来自SOA社区的进一步审阅。这些模式可以用作...

    SOA Practition SOA实践指南

    SOA Practition SOA实践指南

    SOA实践指南 分布式系统设计的艺术.part3

    第13章:soa和性能  13.1 性能在哪儿重要  13.2 从远程存储过程到服务  13.3 性能和可重用性  13.4 性能和向后兼容性  13.5 总结 第14章:soa和安全  14.1 安全需求  14.2 处理安全需求  14.3 实践...

    SOA不止是一种IT技术

    来自微软的DeVadoss在访谈中指出SOA并不仅仅只是一种IT技术,人们思考SOA,思考服务。客户不想要SOA,他们要的是商业价值。对于面向服务创造商业价值,它必 须发掘新的商业机会才行。更灵活,这才是价值。人们思考...

    SOA与Web服务SOA与Web服务

    SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务

    Oracle 构建综合 SOA 平台

    现今复杂多变的业务环境带来的挑战是如何从固定的功能和运营性能中提炼出具体的业务策略和规则,以它们为基础来创建能够适应未知需求的 IT 环境。这就强调了在提交这些提炼过的性能时面向服务的体系架构(SOA) 的优势...

    SOA成熟度模型为SOA 护航

    SOA成熟度模型(SOA Maturity Model)可以为IT和业务用户提供一种框架,使其能够正确地评估SOA在企业中的适用性和收益。 在过去的10年中,面向服务的架构(SOA)已经成为应用设计、开发和实施领域中意义最为重大的一...

Global site tag (gtag.js) - Google Analytics