总体框架
图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的设计却是面向服务的。