数据架构师:SOA可以产生良好的性能吗?

日期: 2008-06-23 作者:Robert Catterall 来源:TechTarget中国

  在本文中,我将解释SOA潜在的优势,并描述一些可以在SOA环境中帮助实现性能目标的技术。来自IBM Database Magazine 。


  前言


  答案是肯定的,但是您必须抛弃关于应用程序的传统观念。
 
  面向服务体系结构(SOA)是近来的热门概念。但是,它不仅仅是一个概念 —— 许多组织已经把基于SOA的应用程序投入生产环境,更多的组织正在开发这样的应用程序。


  为什么SOA会引起如此广泛的关注?SOA的支持者指出,SOA实现可以帮助组织改进敏捷性、质量和运营灵活性。这些都很吸引人,但是许多IT系统人员对于加入SOA热潮犹豫不决。主要原因是SOA对应用程序性能的影响。


  在本文中,我将解释SOA潜在的优势,并描述一些可以在SOA环境中帮助实现性能目标的技术。


  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的性能可能会成为问题,这是因为抽象要通过额外的代码来实现,这通常会增加机器指令路径长度。减少应用程序组件接口也会增加路径长度(为了处理一团乱麻的点到点连接,必须增加集中式服务访问基础结构)。因此,就出现了一个问题:基于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应用程序的性能。如果把SOA应用程序看作完全不同于老式应用程序的工作方式,您就会发现不但能够实现相似的性能,而且通过改进服务质量,客户机的性能水平甚至可能出现重大突破。


  实现这个目标容易吗?当然不。这涉及许多步骤:决定应用程序处理应该异步执行还是同步执行,确定实现数据缓存的方式和位置,决定如何在事务化环境中处理传统的批功能,评估和实现企业服务总线和工作流组合技术以帮助设计和执行复杂的离线事务处理,等等。这需要投入大量时间和资金。


  但是请记住,许多组织正在做本文所描述的事情。您可能是领导者,可以通过抢占先机帮助组织获得竞争优势。IT行业正在变化,您应该抓住领先的机会。


  关于作者
  
  Robert Catterall [rcatterall@catterallconsulting.com] 是 Catterall Consulting公司的总裁,该公司致力于帮助客户使用关系型数据库技术(尤其是DB2)。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 购买应用集成工具可以采取平衡做法

    购买应用程序集成工具需要好好看看你的公司需求,知道从供应商里面要寻找哪些关键功能。