秦 伟
(长治职业技术学院,山西 长治 046000)
在全球范围内,面向服务的架构(SOA)正成为未来企业软件架构的趋势。在国内,虽然近几年来关于SOA的报道经常见诸各种媒体,但对SOA的研究还处于起步阶段。
《信息周刊》和埃森哲公司通过对中国上千家企业机构的问卷调查,了解在商业科技推动企业竞争力及商业创新的背景下,中国企业部署SOA的现状和未来的趋势。调查的结果显示[1]:拥有SOA应用的企业占8.8%,在大中型企业中,这个比例是10%,四分之三的被调查企业未对SOA采取任何行动。然而在较早开始SOA部署的企业中,60%的大中型企业和超过一半的小型企业都表示他们将增加在SOA上的投入。数据表明,SOA在中国尚处于应用启蒙阶,但企业在SOA上的投入却在快速增加。
面向服务构架(Service-Oriented Architecture,SOA)是一种设计思想,它指导业务服务(business ser⁃vices)的创建和使用的各个方面,同时也定义和提供了一种具有一定特征的IT基础设施。面向服务(SOA)与其说是一种技术,倒不如说是一种思维方式,它是一项大胆的基础架构变革,通过技术和协同工作实现了文化变迁。如今,很多CIO都感受到了SOA的热度,福布斯500强中的大部分企业也都在考虑实施SOA方案。
Web Services是SOA思想在改进DCOM和CORBA缺点上的努力。今天应用Web Services的面向服务架构与过去不同的特点就在于它们是基于标准以及松散耦合的。广泛接受的标准(如XML和SOAP)提供了在各不同厂商解决方案之间的交互性;而松散耦合将分布计算中的参与者隔离开来,交互两边某一方的改动并不会影响到另一方。
SOA的强大和灵活性将给企业带来巨大的好处。如果某组织将其IT架构抽象出来,将其功能以粗粒度的服务形式表示出来,每种服务都清晰地表示其业务价值,那么,这些服务的顾客(可能在公司内部,也可能是公司的某个业务伙伴)就可以得到这些服务,而不必考虑其后台实现的具体技术。更进一步,如果顾客能够发现并绑定可用的服务,那么在这些服务背后的IT系统能够提供更大的灵活性。
集成所要解决的是不同系统在业务与集成需求上多个方面的差异,而且这些系统一般是由不同开发团队、采用不同技术、为解决不同业务问题而开发的。
2.1.1 导致集成问题的业务驱动
我们先来看一些常见的、导致集成问题的业务驱动,以及机构为什么要在SOA与Web服务上进行投入[2]:
1)兼并与收购。兼并与收购(Merger and Acquisi⁃tion,简称M&A)活动常常造成“有多个IT系统可以处理相似事务”的局面,而要体现M&A的商业价值,就必须对这些IT系统加以合并。
2)内部重组。尽管内部重组所产生的影响不如兼并与收购(M&A)那样巨大,但也造成了许多相同的问题,而且出现频率更高。
3)应用/系统合并。如果相视的事务可被多个IT系统处理,那么需要通过合并或替换,以节省资金、减少人数,使业务操作运行更加流畅。
4)不一致/重复/零散的数据。有时,重要的业务数据被分布于多个系统上,必须将它们加以合并和过滤才能有助于决策。
5)新业务战略。创新型公司经营要根据变化的业务环境贯彻新的业务战略,这就要求各个IT系统更高以崭新的方式一同工作。最终,同行业的其他公司也必须做出同样的改变才能保持竞争力。
6)使业务流程流畅。在过去的业务流程中,数据常常是手工录入到不同系统中的。如今,这些系统往往都需要被新的支持“不需人工干预便可进行多系统间事务处理”的系统所替代。
2.1.2 集成面临的技术挑战
下面列出了进行集成时将面临的部分难题[3]:协调由不同系统实现的、不兼容的业务流程;协调不同系统所使用的数据的差别(既包括数据语法,也包括信息语义);协调用以实现不同系统的、不兼容的技术;协调不同系统所采用的事务处理的时间粒度(周期);协调不同系统所使用的交互模式(例如同步通信、异步通信、事件驱动的处理等)。
2.1.3 “理想的”集成方案应满足的要求
除上述技术挑战以外,“理想”的集成方案还必须满足下列要求:低成本、具有较快的投资回报(ROI);易于掌握和管理;不会影响现有系统;具有可伸缩性、可靠性、高可用率、容错性及安全性等等;灵活的易于对各项目的具体需求进行定制。
在进行项目集成的时候,有时战术性与机会性的方法较好,有时战略性与系统性方法更合适——这完全依赖于具体的业务需求。下面分别针对战略性方法和战术性方法列出了一些具体的业务目标,如表1所示。
表1 战略性方法与战术性方法的比较
业务人员与技术人员常常会奇怪,哪一种集成方法更好?是战略性方法还是战术性方法?这没有严格的规律。不过,在众多专用的战术集成上花去的成本,很快就会超过一个更具战略性的方法的成本。
2.1.4 集成可在不同技术层次上进行
集成可在许多不同的IT技术层次上进行[4]。
1)数据集成。关注数据级的集成,常常通过同步各种不同数据库中的内容来实现的。存在的关键涉及协调不同数据库的数据模式、协调数据元素的含义等。
2)消息集成。关注于通过“在应用间交换消息”来构建集成,这些消息通常代表了一个在应用中发生的事务,需要将它们可靠的传递到其他应用。存在的关键问题涉及在应用数据和消息间做相互转换,转换不同应用所采用的不同消息格式。
3)组件集成。关注于用组件技术(如DCOM、CORBA、.NET或J2EE等)来包装传统系统,以及用它们的组件接口来连接组件。存在的关键问题是组件模型之间的集成(比如集成CORBA与DCOM、或J2EE与.NET将是一个难题)。
4)应用集成。关注利用各种应用发布的APIS、对象模型、消息格式、数据库模式等来集成。存在的关键问题涉及协调不同应用的数据模型,以及解决“目前大多数套装应用仅提供了初步的集成设施”的问题。这种形式的集成,一般都是指集成套装应用系统。
5)服务集成。关注于创建抽象的,不与某一数据库、组件模型或套装应用相关的服务,并在集成系统时将这些服务作为构建。存在的关键问题是通常需要一种成熟的集成构架(即一种面向服务的架构),以实现服务接口与下层实现的明确分离。
6)流程集成。关注于通过集成现成的IT资产(比如数据、组件、应用和服务等)来创建新的业务流程。这种形式的集成,将业务流程的定义和管理,显示的与特定的应用分离开。存在的关键问题是通常需要各个机构在业务流程上达成一致,而且需要一个成熟的集成基础设施,以便对现有IT资产进行良好的集成。
7)用户界面集成。通常指在桌面或表示层进行集成(例如portal产品)。关键问题是Portals仅解决了集成难题中与用户互动的部分。
8)B2B集成。关注于多个机构间的关键业务流程与关键服务的自动化。如果只涉及两个机构间的集成,那么只需要将两个系统用VPN和文件传输对接起来即可。如果很多机构都想基于Internet将供应链上的各个流程自动化,那么复杂性将呈指数增长。
目前,用XML和Web服务进行集成与互操作有两种方法[5-8]:
1)Web服务集成(Web Services Integration,WSI):战术性与机会性的“应用Web服务来解决集成与互操作问题”的方法。
2)面向服务的集成(Service-Oriented Integration,SOI)。在SOA的环境下用Web服务进行集成,即一种战略性的系统的“应用Web服务来解决集成与互操作问题”的方法。
这两种方法都是以XML、SOAP和WSDL为基础的,它们都使用由Web服务平台定义的相同技术,但只有SOI基于SOA的原则(包括定义一个SOA治理框架、定义各种SOA流程以及最佳实现方式等),以战略的和系统的方式来应用这些技术。而WSI是让各个集成团队在UDDI注册库中分别编制目录,没有或者很少关注各个项目间的一致性。
实际上,这两种方法,不存在哪个更好,虽然它们会导致不同结果,但是哪个更好取决于项目的目标。下面分别详述WSI和SOI。
2.2.1 Web服务集成(WSI)
如果只追求立即见效与短期投资回报而不考虑长期成本的话,用Web服务集成(WSI)开展战术性与机会性的集成项目是比较凑效的。
通常,一个WSI项目要涉及许多(2个~4个)需要彼此交换数据的系统。项目团队将根据下列信息来定义SOAP消息:要在各系统间交换的数据;各系统已经能够理解的各种传统消息格式;可用于访问各系统的传统API或方法。然后,项目团队将定义WSDL契约(包括接口、操作、消息交换模式)。企业级服务质量(比如安全性、可靠的消息传递、事务管理、故障转移等)是根据实际需要实现的,可以用相应的策略信息定义它在完成一系列WSI项目之后,机构实际上已经创建了一系列点对点集成。当然,这里所谓的点对点集成不是老式的点对点(比如一个使用文件传输(FTP),另一个使用TCP/IP,还有一个使用数据库同步)。这里的点对点指的是它们不必使用相同的数据模型,不必使用相同的安全架构,也不需支持相同程度的可重用性。
2.2.2 面向服务的集成(SOI)
SOI是在SOA的环境下用Web服务进行的集成。SOI是战略性的、系统的应用Web服务来解决集成与互操作问题。如果希望在某一集成架构上作巨大投入,并获得最佳的长期效果,那么SOI将是不错的选择[9,10]。
与WSI不同的是,实现SOI应从第一个集成项目之前开始,在启动SOI阶段应完成如下工作:
1)定义SOA治理框架、过程、准则、模型和工具等。
2)对服务领域进行形式化建模。
3)定义一个服务分类层次,以便各个集成项目可对服务进行一致的分类与编目,以促进将来重用。
4)如果Web服务平台为完成相似任务提供了多种选择,应选择一种一致的方法应用于各个项目。
图1显示了一个SOI如何随着时间而逐步发展。用建模工具创建服务领域的初始数据、服务与流程模型,然后将它们保存在一个元数据仓库中。各个集成项目都是从使用和改进同样的模型开始,因此在该服务领域内的系统间交换信息时,使用的“客户”与“账户”的定义是一致的(尽管它们在各个传统系统内部的表示可能会有所不同)。IT系统在运行时通过服务注册库(比如UDDI)查找服务,然后直接调用服务。
这种既集中有分散的SOI架构,使各个集成团队可以独立实现和注册各自的服务提供者(或者编写一个全新的服务,或者用SOI对传统系统进行包装),同时可以确保各个集成团队所完成的服务可以相互访问和使用。
[1] 中国科永联高级技术培训中心.软件体系结构[DB/oL].http://www.itisedu.com/phrase/[2006-03-31]-358465.html.
[2]Sommerville.软件工程[M].程成,陈霞,译.北京:机械工业出版社,2007.
[3] 毛新生.SOA原理、方法、实践[M].北京:电子工业出版社,2007.
[4] 国家SOA应用中心.中国SOA应用调查[EB/oL].http://se.csai.cn/Monograph/20061116-0855151952.htm.
[5] 国家SOA应用中心.中国SOA应用现状分析报告[EB/oL].http://news.csdn.net/n/2007-0313/101948.html.
[6] 郭海林.浅谈:SOA实施现状及面临的挑战[EB/oL].http://www.enet.com.cn/article/2007/0315/A20070315485059.shtml.
[7] Eric NewComer Greg Lomow.Understanding SOA with Web Services[M].徐涵,译.北京:电子工业出版社,2006.
[8] 崔晓波.SOA概述[EB/oL].http://se.csai.cn2006-11-14./Monograph/200611141-116331889.htm.
[9] Jeff Hanson Event-driven services in SOA[EB/oL].[2005-01-31]http://www.javaworld.com/javaworld/jw-01-2005/jw-0131-soa.html 2005-1.
[10]亦海义.面向服务的体系结构SOA简介[EB/oL].[2006-01-16].http://tech.51cto.com/art/200601/16185.htm.