SOA最佳实践之构建数据服务层

日期: 2008-07-02 作者:John GoodsonJason Bloomberg 来源:TechTarget中国

  最近,几乎所有大型企业或者已在SOA部署中取得了一定的进展,或者已将SOA部署计划放到了议事桌上。他们很快发现SOA就像蛛网一样逐渐蔓延,最终几乎涉及到了IT与业务的每个角落。由于数据在业务和系统操作中的重要性,数据库管理员、信息技术专家、数据集成专家以及所有和企业数据管理有关系的人员都被会被(不管是有意识性地或是非意识性地)征去为SOA的建设做贡献。
  
  将信息封锁在整体化的应用程序(monolithic application)中是现代业务所需的灵活性开发的极大障碍。如果要在业务中使用任何高性能敏捷服务,就必须解决技术上的难题:如何在企业中实现跨平台的信息访问(即数据存取)。


  在传统的分布式架构中,开发人员可能会写一段数据存取代码,然后接着想办法实现重用性。然而,如果这段数据存取代码有问题,那么这个问题必然会蔓延到所有需要使用这段代码的程序中,带来严重后果。并且将来每有变化产生时(比如基层的数据库、数据模型、或者所用的编译环境等的变化),所有用到这段数据存取代码的地方必须同时更新。


  从结构化的数据存储方式(比如相关的数据库、大型主机的数据源和各种企业应用),到半结构化或非结构化的数据(比如网页、PDF文档、office应用文件、XML文档、电子邮件、媒体的内容、显示内容、或者各种各样的内容和数据连接、表格),数据来源的多样化决定了使用传统紧耦合的数据存取方法来存取和处理所有这些来源、类型都不相同的信息必会带来技术支持上的巨大难题。


  而架构合理的SOA则能在实现业务功能的同时有效处理各种数据——以抽象的服务的形式。具体到数据存取方面,如果将存取抽象为数据服务的形式并且把存取代码转移到基础的支撑框架中,那么就可以在整个大环境中以一个更为松耦合和更有敏捷性的方式解决上述问题并处理各种变化。实质上,数据服务层已抽象为所有数据存取、更新和设定操作的存取点,这使我们可以对底层的数据持久层所用的数据模型有一个宏观了解。它就像业务服务和底层的数据持久层之间的桥梁;业务用户无需担心他们所用的数据到底来自数据库、某个企业应用、某文件系统、甚至另一公司或者任何地方。这种不受数据源限制的随时随地的自由存取是各公司与各种各样的系统集成问题不断奋斗的成果。


  数据服务层必须有一个独立于底层数据源的可对标准的可重用的数据服务进行读写的接口。使用这些服务的应用程序与底层数据源提供者之间的松耦合特性使数据库管理员在修改、整合、转移甚至从数据服务层移除底层数据源时无需调整数据服务层的接口。这样,管理员便可以在保持对这些数据的结构的控制同时为应用程序提供所需的信息。随着时间的推移,灵活性越来越高,企业应用的维护工作的难度也会减小。


  在SOA产生之前,开发人员在构建应用的同时人工嵌入硬编码,用这种方式来获得数据服务层的类似功能。将这种数据存取和数据提取代码直接嵌入到应用中的方式限制了应用的灵活性和可重用性,导致企业转向传统的中间件(比如ETL和EAI产品),寻求以中间件的方式提供数据服务层的功能。其中ETL的方法最适合在无需灵活性的静态应用(static application)中使用。但是它的造价昂贵,并且需要很高的管理费用。EAI的方法采用集中的数据交互的管理方式,但仍然无法满足许多企业对(像数据服务层的)灵活性的要求。


  即使在企业开始部署真正的SOA时,设计拙劣的数据服务层也会产生性能上的问题。在许多情况下,各个应用都有相应的数据库,其中包含业务参考数据的备份,比如客户信息、产品信息和库存水准。(见图1)



  企业必须按固定的计划同步这些数据库,而这种做法会导致数据没有时效性,或者数据在各应用之间的不一致性。这样,即使企业以松耦合服务的方式实现了应用功能,这些服务的灵活性和可重用性仍然会受到数据持久层的限制。在SOA部署中引入数据服务层即可解决这些问题。如图2所示,数据服务程序负责与各应用相关的连接和事务处理。



  数据服务层负责管理各数据服务程序之间的联系,保证各个应用能实时了解到数据的变化,而无需知道变化的原因。使用数据服务作为业务服务层下面的基础服务提高了可重用性和敏捷性,并缩短了新服务的开发和部署所需的时间。构架良好的数据服务层依赖于使用标准的API接口(比如ODBC、JDBC、ADO.net和SDO)的有高度兼容性的高性能数据存取中间件。


  总而言之,将数据服务层作为SOA部署的基础组成部分可以最大化SOA所能提供的效益。特别是,它能为常见的数据问题提供以下解决方案:


  减少对人工编码的数据管理逻辑的依赖:通过建立抽象的、共享的数据服务,可以应用最有效的数据存取中间件使数据服务成为架构设计的一部分。


  解决了集成的灵活性问题:数据服务层取代了点对点或硬编码的传统集成方法,在数据持久层上提供了松耦合的特性。


  解决了数据查询的瓶颈问题:数据服务层使企业能够部署基于内容的路由技术来避免一些瓶颈问题。


  数据一致性获得提高:数据服务是企业中进行数据存取操作的唯一位置,促使企业实现数据的“唯一真实”性。部署数据服务层能够保证各应用程序从正确的数据源获取数据,并为各应用程序提供一致的所需信息。


  毫无疑问,要建立一个成功的松耦合架构,SOA架构师必须在解决数据存取问题的种种困难中付出艰苦的劳动。以最有效、最灵活的方式对企业中的各种数据仓库进行数据存取操作是建立数据服务的基础,而正因为如此,这也是在SOA中构建所有服务的基础。


  最有效的数据存取方式对构建数据服务层的重要性


  向任何一位业务管理人员询问IT对业务的价值,他都有可能会说数据(以有效信息的形式)才是业务的生命之源,而不是应用程序。从本质上来说他们是对的;信息技术嘛,从定义上来说就是一切都取决于信息。但实际上这两者(数据和应用程序)只能在理论上区别开来,在实际应用中却是密不可分的。如果不经过应用程序的处理,数据经常是无法访问且/或无法理解的;反之,如果没有数据,大多应用程序也无法提供实际的业务功能。


  要让数据在SOA最佳实践中发挥最大效应,建立一个数据服务层是必需的;同样,认识到数据存取是这个数据服务层的基础组成部分也很重要。而数据存取又取决于像ODBC、JDBC、ADO.NET和SDO等标准。即使采用了(比如用Hibernate开源工具包构建的)持久层,高质量的数据存取中间件也是相当重要的。Hibernate下的低速JDBC driver或者LINQ(Microsoft’s Language Integrated Query)下的底速ADO.NET provider不可避免地终将妨碍服务的发展。后果是多方面的。以最有效、最灵活的方式对企业中的各种数据存储进行数据存取操作是建立数据服务的主要原因,因此也是构建SOA中所有服务的关键。


  数据存取中间件不存在任何影响速度性能的问题。并且,由于数据服务层实质上是数据存取的一种抽象,因此这些服务可以隐藏数据存取中的诸多潜在缺陷。其它可隐藏的缺陷还包括:


  可伸缩性问题


  数据库平台、应用程序和版本的兼容性问题


  各种数据源处理标准的数据存取操作(比如创建、读取、更新和删除)的细节上的差异


  各数据库、表格甚至各行之间都不相同的数据源的安全等级问题


  由于异类数据中的语义差异产生的数据映像问题


  结构化和非结构化数据混合产生的问题,比如文件格式问题


  SQL版本差异问题


  SOA实际上会将数据存取对扩展性、性能和互操作性产生的影响放大,因为企业不但很可能重用底层的代码,还会在许多服务和组合应用中使用现有的数据服务。


  因此解决这些数据相关的问题的第一步就是建立共享的、集中的数据服务,这会使所部署的SOA适应性强并且易于维护。这样,不管有多少应用程序在使用,数据存取逻辑只会出现在一个地方。结果就是,集中的数据存取取代了将所有数据相关的服务调用代码分散到各个业务服务中的方式,为你创建了一个以最有效的数据存取方案解决所有数据存取问题的环境。


  在这一点上——采用最有效的存取方案——即使再多的强调也毫不过分。即使是对于在做数据管理工作的大多人,数据存取中间件几乎也只是一个一闪即逝的想法而已。其中一个原因是各种商业数据库都有与数据库软件相应的默认连接驱动。实际上,这些“免费”驱动可能一点也不适合给定的IT环境。但除非并且直到技术或维护方面的问题达到一定的严重程度,以致可以查到根源所在的数据连接层,这种情况通常不会浮出水面。正如我们已经说过的原因,这种问题可能渗透在SOA深处,并且可能极其难以分析解决。


  简而言之,让企业SOA的数据服务层依赖于与数据库绑定的数据存取中间件是很不理智的做法。对于免费的开源驱动也是如此。数据存取方式作为数据服务层的根本,需要你的慎重考虑和详细计划。在多重服务重用数据存取代码以及不断部署新服务的动态环境中需要能满足苛刻要求的代码。


  你的最佳选择是第三方的数据存取中间件,并且最好选择核心业务和技术包含数据连接内容的供应商。要确定你的数据存取中间件所需的具体特性,包括能极大地提高查询性能的功能。这些特性包括连接池、以及对数据存取可调性的支持,比如调整网络数据包的大小。为有更好的可伸缩性和高度可用性,数据存取中间件应该是多线程并且线程安全的,并为客户端提供到其它服务器的负载平衡和故障转移功能。


  同时,数据存取中间件也要对不同类型和版本和数据库以及各相应略不相同的SQL提供良好的支持。这种对相异性的支持也应该包括对多重计算平台、芯片和操作系统的支持。另外,为达到最佳性能和最好的灵活性,数据存取中间件应该包含线协议驱动,以避免由于使用过时的数据库驱动产生的管理费用和维护方面的问题。线协议驱动对数据库客户端软件和库的没有任何要求,简化了安装和管理过程并能使用更有效、性能更好的操作。这种驱动必须支持全部的相关协议,包括JDBC、ODBC、ADO.NET、以及正在发展中的SDO。


  最后,还要全面地考虑数据存取中间件在IT安全方面的问题,包括网络安全与数据库安全,以保证通信安全和代码安全。当然,还应该包含多种身份验证和授权验证方式。


  任何企业都应该将选择最有效的数据存取中间件作为构建SOA的关键部分。数据存取是SOA的基础组成部分,如果选择不妥,整个服务体系都会受到很深的影响。原则上,甚至可以说不管数据服务层上面的SOA基础设施如何,都可以毫无疑问地认为数据存取技术是SOA中的关键技术。

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

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

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

  • 揭秘New Relic APM技术细节

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

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

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

  • IDC携华为发布白皮书,全面阐释数据中心云灾备

    华为是全球领先的信息与通信(ICT)解决方案供应商。作为负责任的稳健经营者、创新的信息社会使能者、合作共赢的产业贡献者,华为致力于构建更美好的全联接世界,丰富人们的沟通和生活。华为坚持围绕客户需求的持续创新,与合作伙伴开放合作,在电信网络、企业网络、终端和云计算等领域构筑了端到端的解决方案优势。通过全球专注敬业的17万名华为人,致力于为运营商客户、企业客户和消费者创造最大的价值,提供有竞争力的ICT解决方案、产品和服务。