Tucany SCA软件架构设计理念分析(一)
李俊杰
1. 概述
SCA (Service Component Architecture) 是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用 SOA 构建应用程序和系统的模型。它可简化使用 SOA 进行的应用程序开发和实现工作。SCA仅仅是个规范(http://www.osoa.org),各个涉及SOA技术的公司的实现也各不相同。本文主要分析Apache Tuscany开源项目 (http://incubator.apache.org/tuscany/)中的SCA设计架构;因为我们不能满足于会用,而从这些大师们的作品中汲取营养,知其然,也要知其所以然,当我们面对需求(比如说SCA规范),都拥有同样的语言功底,如何设计一个开放性,可扩展性的架构,就是一个挑战。因为Tuscany设计理念博大精深,开放式的结构思想,性能方面的考虑,安全方面的考虑,不一而足,所以不可能在一篇短文中详细介绍,将在后续的文章中不断地深入剖析,提取设计架构和设计技巧的精华之处,供广大软件界同仁共享。<o:p></o:p>
2. SCA规范基础知识
SCA编程模型是高扩展性和语言中立的,它易于被扩展为多种实现语言技术JAVA,C++,BPEL,PHP, Spring 等,多种远程访问 bindings 包括 Web Service,JMS, EJB,JSON RPC等,多种主机环境例如 Tomcat, Jetty, Geronimo, OSGI等。SCA分隔式架构可以使开发者更注重业务逻辑,而不必要关注诸如可靠性,安全,事务等系统属性,这些属性都配置到配置文件中。SCA的组成部分如下图所示:(本文涉及的SCA术语不翻译)
<v:group coordsize="8295,5835" id="_x0000_s1026" editas="canvas" style="WIDTH: 414.75pt; HEIGHT: 291.75pt; mso-position-horizontal-relative: char; mso-position-vertical-relative: line"><o:lock v:ext="edit" aspectratio="t"></o:lock><v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_s1027" type="#_x0000_t75" o:preferrelative="f" style="WIDTH: 8295px; POSITION: absolute; HEIGHT: 5835px"><v:fill o:detectmouseclick="t"></v:fill><v:path o:extrusionok="t" o:connecttype="none"></v:path><o:lock text="t" v:ext="edit"></o:lock></v:shape><v:shape id="_x0000_s1028" type="#_x0000_t75" style="WIDTH: 8306px; POSITION: absolute; HEIGHT: 5850px"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape><w:wrap type="none"></w:wrap><w:anchorlock></w:anchorlock></v:group>
(1)Component<o:p></o:p>
深蓝色方框(Component A和Component B)表示是Component。Component是SCA原子(最基层的组织单元),其封装了实际的业务逻辑。Component可以采用运行环境支持的任何编程技术实现。例如, Apache Tuscany 项目目前支持Java、JavaScript、Ruby、Python和C++组件类型,同时为创建新的组件类型提供了扩展API。<o:p></o:p>
(2)Property<o:p></o:p>
Property (Component A和Component B上方的黄色方框和Composite A的黄色小方框)。Property控制Component的行为,在部署其间可以被可改变。同时Composite也可以有Property,但其Property是Component Property升级(Promote)后的Property。<o:p></o:p>
(3)Service<o:p></o:p>
Service是供其它Component调用时使用。在图中接口用Component方框左边的绿色箭头来表示,被称作SCA的“服务”(Service)。<o:p></o:p>
(4)Reference<o:p></o:p>
Component也描述了被该Component调用的其它组件的接口,在图中这样的接口用组件方框右边的粉红色箭头来表示,称为SCA的“引用”(Reference)。这些Service和Reference被连接在一起,组成一个可运行的系统。<o:p></o:p>
(5)Composite<o:p></o:p>
如果说Component是SCA架构中的原子,那么Composite就是SCA架构中的分子;图中的两个Component,A和B,被组装在一个更大Composite范围内,被称作Composite A。SCA的Composite描述了一个由互相连接的Component所构成的集合。正如你所看到,Composite也声明了Service和Reference,它们被暴露到Composite外部。Composite的service和Reference是Composite内部的Component的Service和Reference的升级。.一个Composite内部的Component彼此连接就如同创建一个运行在同一进程中的紧耦合的应用程序。将Composite通过Service和Reference连接在一起,则形成了一个更加松耦合的系统;系统中的每一个Composite都可能运行在一个单独的进程或处理器中,在网络中通过各种的协议和传输绑定连接起来。通过这个途径SCA为独立和分布式应用提供了统一的编程模型。<o:p></o:p>
(6)Wire<o:p></o:p>
Wire是连接Service和Reference的连线<o:p></o:p>
(7)Promote<o:p></o:p>
Promote是wire的特殊表现形式,是把Component级别Service或者Reference升级为Composite级别的连线。<o:p></o:p>
(8)Domain<o:p></o:p>
为了更直观地介绍domain,如下图所示:
<o:p></o:p>
<v:shape id="_x0000_i1026" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 416.25pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.emz" o:title=""></v:imagedata></v:shape><o:p></o:p>
从上图可以清楚地看出,Domain是个逻辑的概念,管理跨机器,跨进程的Composite,同时Composite也可以跨机器跨进程部署,从而可以管理分布式部署的SCA,所以Domain是个相当重要的SCA概念。其实除了Domain是管理含义外,还有外部接口界面的含义。
<o:p> </o:p>
3. Tuscany SCA软件架构设计思想
通过SCA基础知识的介绍,我们了解了大致的需求,感谢Tuscany的架构师和工程师,是他们奉献了自己的聪明智慧,创作出如此赏心悦目的精品大作,深刻品味大型软件架构设计的精髓,分享软件设计的豪华盛筵,汲取设计的精华。
(1) 插件式软件设计思想
不论是Eclipse,还是炒得火热的ESB,都使用插件式的设计思想,所谓插件式,可插拔的软件架构,就是极大地体现了松耦合的设计理念,虽然是从原有的设计模式阵营中走来,但其出现给现有的设计模式已很大的冲击并提升了和补充现有的设计模式。在Tuscany中同样如此,可以说把插件式的设计思想用到了极致。下面类图非常简单,但它就是类似于注册中心功能的扩展点注册类,它是Tuscany的最基本和最基础的设计架构,后面有相对复杂的设计,也是建立这种基本架构的基础之上拓展出来的。
<v:shape id="_x0000_i1027" type="#_x0000_t75" o:ole="" style="WIDTH: 396.75pt; HEIGHT: 175.5pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.emz" o:title=""></v:imagedata></v:shape>
<v:shape id="_x0000_i1033" type="#_x0000_t75" o:ole="" style="WIDTH: 415.5pt; HEIGHT: 464.25pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.emz" o:title=""></v:imagedata></v:shape>
基本工作原理:
上面的静态类图表现了注册结构的静态分析,类org.apache.tuscany.sca.core. DefaultExtensionPointRegistry的getExtensionPoint流程图体现了在如何从注册中心获取需要的对象的过程。从本质上分析ExtensionPointRegistry就类似于Collection,其功能无外乎可添加,可删除,可获取,这儿用HashMap<Class<?>, Object>来实现,HashMap也就是put,get,remove方法。可以把DefaultExtensionPointRegistry理解为HashMap的特殊封装,其中<Class<?>, Object>是非常重要的。
换句话说,META-INF/services下面的文件相当于插件板组,其中包含着若干个插件板,每个插件板的插件孔是可以预先调配的。另外,类似于树的概念,有些插件板的插孔也可以插入子插件板,下面显示一个简单插件板的例子,插件板的名称是“org.apache.tuscany.sca.contribution.resolver. ModelResolverExtensionPoint” ,插件板的名称一般是Java接口的名称,而插孔的名称一般为实现类的名称,该例子仅仅声明了一个插孔,插孔名称为“org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint “,另外我告诉你一秘密,凡是以“ExtensionPoin”结尾的,一般是子插件板,呵呵!一般人我不告诉他。
分享到:
相关推荐
Tuscany SCA(Service Component Architecture)是由Apache软件基金会所提供的一个开源框架,用于实现服务组件架构。它支持SCA规范,能够简化服务的部署、管理和交互。Tuscany SCA框架可以帮助开发者快速构建和部署...
《Tuscany SCA在行动》一书深入探讨了Service Component Architecture(SCA)与Apache Tuscany项目,这是IT领域内对服务组件架构及其实现的重要研究资料。以下是基于标题、描述、部分目录和标签生成的相关IT知识点:...
Apache Tuscany是Apache软件基金会的一个开源项目,它实现了Service Component Architecture(SCA,服务组件架构),这是一种用于构建和集成分布式应用程序的规范。这个实例可能是关于如何使用Apache Tuscany来开发...
Apache Tuscany SCA(Service Component Architecture)是Apache软件基金会开发的一个开源项目,它提供了一个用于构建、部署和管理服务的框架。SCA是一种服务导向架构(SOA)标准,旨在简化不同技术间的互操作性,使...
**SCA(Service Component Architecture)服务组件架构**是Apache Tuscany项目的一部分,它是一种用于构建分布式应用程序和服务的开源框架。Tuscany SCA提供了一种声明式的方式来组合和管理服务,使得开发者能够关注...
Apache Tuscany SCA(Service Component Architecture)是一个开源框架,由Apache软件基金会开发,用于构建分布式应用程序和服务。SCA是一种标准,它定义了一种模型来组合、管理和部署服务及组件,使得开发人员能够...
Apache Tuscany SCA(Service Component Architecture)是一个开源项目,由Apache软件基金会维护,它提供了一个框架和中间件,用于构建、部署和管理分布式应用程序。SCA是一种标准,旨在简化服务导向架构(SOA)的...
Tuscany架构 Tuscany架构.jpg Tuscany架构.jpg
标题中提及的"Tuscany SCA"是Apache Tuscany项目中的一个子项目,名为Service Component Architecture (SCA),它是一个用于构建分布式系统的框架,其主要目的是简化企业级应用的开发和部署。SCA提供了一种声明式的...
Apache Tuscany是一个开源的服务组件架构(Service Component Architecture,简称SCA),它提供了一种用于构建和部署分布式应用程序和服务的标准化模型。SCA的核心目标是简化服务的开发、组装和管理,允许开发人员...
ServiceMix、Tuscany和SCA(Service Component Architecture)是企业级服务导向架构(SOA)领域的关键...随着技术的发展,SCA及其实现如Tuscany将继续影响企业级应用的设计和实现,推动SOA和微服务架构的进一步发展。
Apache Tuscany是Apache软件基金会开发的一个开源项目,其核心目标是实现Service Component Architecture(SCA,服务组件架构)规范,这是一种用于构建Service-Oriented Architecture(SOA,面向服务架构)的应用...
SOA(Service-Oriented Architecture,面向服务架构)是一种软件设计模式,它强调将功能组织成一系列可重用的服务,这些服务可以通过网络进行交互。SCA(Service Component Architecture,服务组件架构)是实现SOA的...