看到SOA的一堆名词,读者可能会感到迷惑,有必要结合实际的应用环境进一步阐释SOA的相关概念。
总体框架
图1所示的就是一个SOA应用系统的大体框架结构。它大体上可以分为五个部分:
● 展现层(presentation):图1中5区,通过portal等技术建立展现平台,方便用户在这个界面上提出服务请求。
● 业务处理建模(business process modeling):图1中的4区,SOA元模型从MDA中继承了平台无关模型来对业务处理过程建模。这一部分独立于服务设计和部署层。模型驱动架构MDA(Model Driven Architecture)的主要缺陷是在模型设计阶段就对需求有完整的描述,而且没有需求变更的反馈机制。SOA通过添加敏捷方法AM来应对需求变更的情况。
● 服务层(Services): 图1中的3区,整个SOA的核心层,它承上启下,对上响应业务模型,对下调用相关组件群完成业务需求,形成“业务驱动服务、服务驱动技术”的SOA事务处理格局。服务可以根据粒度分层。虽然细粒度提供了更多的灵活性,但同时也意味着交互的模式可能更为复杂。粗粒度降低了交互复杂性,但敏捷性却下降。
● 企业组件层(enterprise components):图1中的2区,这里是相关组件发挥作用的场所。这些组件是平台相关的。因为到了这一层,许多底层软硬件平台的特性已经不再透明了。
● 系统软件层(Operational System):图1中的1区,这一层包括操作系统、数据库管理系统、CRM、ERP、商业智能(BI)等异构系统,是一个集成的平台。
除此之外,诸如QoS、安全性等(图1中7区)也是SOA架构的组成部分。
在上面的介绍中,自上而下有一条线,如图2所示,由业务建模开始,通过定义业务过程,得到服务模型,它是平台无关的,实现了模型与实现的分离。再通过设计组件群,得到平台相关的组件模型。
实施原则
Jason Bloomberg在其《Principles of SOA》中指出,SOA的实践必须遵循以下原则:
● 业务驱动服务,服务驱动技术。从本质上说,在抽象层次上,服务位于业务和技术中间。面向服务的架构设计师一方面必须理解在业务需求和可以提供的服务之间的动态关系;另一方面,同样要理解服务与提供这些服务的底层技术之间的关系。
● 业务敏捷是基本的业务需求。SOA考虑的是下一个抽象层次:提供响应变化需求的能力是新的“元需求”,而不是处理一些业务上的固定不变的需求。从硬件系统以上的整个架构都必须满足业务敏捷的需求,因为,在SOA中任何的瓶颈都会影响到整个IT环境的灵活性。
● 一个成功的SOA总在变化之中。SOA工作的场景,更像是一个活的生物体,而不是像传统所说的“盖一栋房子”。IT环境惟一不变的就是变化,因此面向服务架构设计师的工作永远不会结束。对于习惯于盖房子的设计师来说,要转向设计一个活的生物体要求有崭新的思维方式。SOA的基础还是一些类似的架构准则。
与其他概念的关系
1. SOA与Web Services的关系
SOA构架是独立于技术实现的。SOA并不必用Web Services来实现,相反,Web Services也并不一定遵循SOA标准。
不过,Web Services的特性十分适合用来实现SOA架构。Web Services 之间能够交换带结构的文档(比如XML),这些文档可能包含完全异构的数据信息。这些文档可以同时附带关于数据的数据:元数据(metadata)。换句话说,Web Services可以有较粗的粒度,这样较粗的粒度正好可以构成SOA中服务的粒度。
说到底,两者是相交的圆,SOA服务和Web Services之间的区别还在于设计。SOA概念并没有确切地定义服务具体如何交互,而仅仅定义了服务如何相互理解。其中的区别也就是定义如何执行流程的战略与如何执行流程的战术之间的区别。而另一方面,Web Services在需要交互的服务之间如何传递消息有具体的指导原则;从战术上实现SOA模型是通过 HTTP传递的SOAP消息中最常见的SOA模型。因而,从本质上讲,Web Services是实现 SOA的具体方式之一。
2. SOA中的服务与组件对象(Components Objects)的关系
相似之处在于:都有一个或多个接口,并且,服务发布者和使用者都遵守这些接口。
不同之处在于:SOA是关于模式(schemas)的,组件对象是关于对象类型(object types)的;SOA通过像SOAP这样的标准消息机制(messages)来实现通信,而组件对象通过方法调用(method calls)来交互。与CORBA 中的接口定义语言IDL (Interface Definition Language)相比,SOA 在WSDL (Web Services Definition Language) 中采用XML,会显得更加普遍和通用。
联系之处在于:服务最终还是通过类和组件对象来实现的。
SOA被认为是传统紧耦合的、面向对象的模型的替代者。像通用对象代理架构CORBA (Common Object Request Broker Architecture)和分布式组件对象模型DCOM (Distributed Component Object Model)。在SOA 中,单个服务可以用面向对象方法来设计,但是,整个SOA的设计却是面向服务的。下面的表格中给出了SOA与分布式组件架构的不同点。
3. SOA与网格计算(Grid Computing)的关系
网格计算(Grid Computing)是利用互联网技术,把分散在不同地理位置的计算机组成一台虚拟超级计算机。每一台参与的计算机就是其中的一个“节点”,所有的计算机就组成了一张节点网——网格。从实质上来说“网格计算”是一种分布式应用,网格中的每一台计算机只是完成工作的一个小部分,虽然单台计算机的运算能力有限,但成千上万台计算机组合起来的计算能力就可以和超级计算机相比了。
网格计算基于因特网,提供了资源整合和共享的平台。十分适合作为SOA架构的实施平台。
我们来具体地看一下:
SOA 的构建策略:创建一个面向服务的计算SOC(service-based computing)环境;可以用类似于web services的技术来设计服务:使用SOAP通信机制;采用XML数据格式;强调服务的重用和互操作;最大化的应用现有资源;希望有一个类似于网格计算环境的基础平台。
网格作为平台的基本特点:网格被视为一个由各种计算资源组成的统一环境,其管理软件将网格整合成一个完整而协调的透明计算整体;网格是一个虚拟的应用服务器;是一个应用实现和数据处理的理想平台;服务在网格中部署和调用执行;商业逻辑和服务调用被当成网格程序一样在平台上运行;网格为SOC计算的有效性、快速性、灵活性、伸缩性和计算环境的管理提供便利。
SOA带给企业什么?
作为需要构建SOA应用的企业来说,究竟有些什么好处呢?我们来看一下:
● 集成现有系统,不必另起炉灶。面向服务的体系结构可以基于现有的系统投资来发展,而不需要彻底重新创建系统。通过使用适当的 SOA 框架并使其用于整个企业,可以将业务服务构造成现有组件的集合。使用这种新的服务只需要知道它的接口和名称。服务的内部细节以及在组成服务的组件之间传送的数据的复杂性都对外界隐藏了。这种组件的匿名性使组织能够利用现有的投资,从而可以通过合并构建在不同的机器上、运行在不同的操作系统中、用不同的编程语言开发的组件来创建服务。遗留系统可以通过 Web 服务接口来封装和访问。
● 服务设计松耦合, 带来多方面优点。服务是位置透明的,服务不必与特定的系统和特定的网络相连接。服务是协议独立的,服务间的通信框架使得服务重用成为可能。对于业务需求变化,SOA能够方便组合松耦合的服务,以提供更为优质和快速的响应,允许服务使用者自动发现和连接可用的服务。松耦合系统架构使得服务更容易被应用所集成,或组成其他服务,同时提供了良好的应用开发、运行时服务部属和服务管理能力。提供对服务使用者的验证(authentication) 授权(authorization),来加强安全性保障,这一点也优于其他紧耦合架构。
● 统一了业务架构,可扩展性增强。在所有不同的企业应用程序之间,基础架构的开发和部署将变得更加一致。现有的组件、新开发的组件和从厂商购买的组件可以合并在一个定义良好的 SOA 框架内。这样的组件集合将被作为服务部署在现有的基础构架中,从而使得可以更多地将基础架构作为一种商品化元素来加以考虑,增强了可扩展性。又由于面向服务的敏捷设计,在应对业务变更时,有了更强的“容变性”。
● 加快了开发速度,减少了开发成本。组织的 Web 服务库将成为采用 SOA 框架的组织的核心资产。使用这些 Web 服务库来构建和部署服务将显著地加快产品的上市速度,因为对现有服务和组件的新的创造性重用缩短了设计、开发、测试和部署产品的时间。 SOA 减少了开发成本,提高了开发人员的工作效率。
研究表明,一般系统的接口的开发费用占到整个开发费用的33%,最高的竟达到了70%。在SOA中,接口的重用会节省费用60%。而且节省的费用不是一次性的,而是每年。随着业务需求的发展和新的需求的引入,通过采用 SOA 框架和服务库,为现有的和新的应用程序增强和创建新的服务的成本大大地减少了。同样,开发团队的学习难度也降低了,因为他们可能已经熟悉了现有的组件。
● 持续改进业务过程,降低激变风险。SOA允许清晰地表示流程流,这些流程流通过在特定业务服务中使用的组件的顺序来标识。这给商业用户提供了监视业务操作的理想环境。业务建模反映在业务服务中。流程操纵是以一定的模式重组部件(构成业务服务的组件)来实现的。这将进一步允许更改流程流,而同时监视产生的结果,因此促进了持续改进。重用现有的组件降低了在增强或创建新的业务服务过程中带来的风险,也减少了维护和管理支持服务基础架构的风险。
|