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

