论面向服务架构设计及其应用

摘要:SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构,他最早是由Gartner于20世纪90年代中期提出的面向服务架构概念。到了21世纪,随着XML和Web Service等技术的发展,SOA正式实现了从概念转向应用,走进人们的视野,在诸多领域得以推广和发展。

关键词:SOA;面向对象;架构

面向服务架构面向服务架构(Service-Oriented Architecture, SOA) 是一种应用框架,是近些年来国际基础软件产品和大型信息系统研发的一种非常重要的支撑技术,也是众多企业进行信息化建设、实现信息资源的有效开发利用的重要支撑技术。通过实施甚于SOA的系统架构,用户可以构建、部署和整合服务,无需依赖应用程序及其运行平台,从而提高业务流程的灵活性,帮助企业加快发展速度,降低企业开发成本,改善企业业务流程的组织和资产重用。本文从SOA的基础及主要技术和标准说起,结合项目实例进行深入的理解。

1 SOA(面向服务架构面向服务架构)

1.1 什么是SOA

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型。组件模型图示了建立系统的软件组件。它可以由类模型建立起来,既可从新系统的蓝图开始,也可从其他项目或第三方销售商引入。组件模型是较小软件块的高层级聚合,它提供了一个基于"黑匣子"的积木式来构造软件。组件模型最主要的优点包含三个方面:将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来;接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言;构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

SOA的常用实现方式是Web service。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。使用web service实SOA的好处是:可以实现一个中立平台,来获取服务,获取更好的通用性。

1.2 SOA的主要技术和标准

Web服务作为实现SOA中服务的最主要手段。我们首先来了解跟Web Service相关的标准,它们大多以"WS-"作为名字的前缀,所以统称WS-*Web服务最基本的协议包括UDDIWSDLSOAP,通过它们,我们可以提供直接而又简单的Web Service支持如图1-1所示。

 

图 1.1

但是基本协议无法保证企业计算需要的安全性和可靠性,所以我们需要增加这方面的协议,比如WS-Security,WS-Reliability和WS-ReliableMessaging;对于复杂的业务场景,我们需要WS-BPEL和WS-CDL这样的语言来将多个服务编排成为业务流程;管理服务的协议如WS-Manageability,WSDM等。跟Web服务相关的标准,还在快速发展当中。目前在SOA产品和实践中,除了基本协议外,比较重要的还包括BPEL,WS-Security,WS-Policy和SCA/SDO。如表1-2所示给出了一个基本的总结。

 

1.2

 目前,Web的标准和技术在演变当中,不同的技术环境的支持力度也不同,但是前面提到的基本核心协议,都有很好的支持。关于Web服务协议的接受和支持程度,如图1-3所示。

 

1.3 1

1.3 主要技术说明

1) 消息传输技术

XML Web服务和ebXML都使用SOAP 作为消息传输技术,但是XML Web服务服务定义了松散耦合的协议堆栈,该堆栈由可靠传输 (WS-Reliability) 和 安全 (WS-Security) 的各个规范组成,而ebXML将所有这些功能都融入到自己的消息传递标准和ebMS中,从而使用混合技术。

2) 服务描述和发现

XML Web服务分别使用WSDL和UDDI标准,UDDI注册机制是基于目录的体系结构,其注册内容包括技术模型和业务模型,本身可扩展但目前其注册的内容和描述还不够丰富和完整。

ebXML将服务描述和发现机制对应两个标准,一是注册信息模型ebRIM,二是注册服务规范ebRS。ebXML注册机制要比UDDI丰富和完善的多,它的注册机制用途广泛,可以表示范围广泛的数据对象,包括 xml 模式、业务流程描述、ebXML Core Component、UML模型、一般贸易合作伙伴信息及软件组件。为了支持如此多样的数据,使用一个定义良好的信息模型而不是目录,将ebXML注册设计得更像一个数据库

3) 业务流程协作

基于Web服务的业务流程协作和服务编排,有WS4BPEL、WS-CDL、基于XML的工作流XPDL等,这些基于XML和Web服务的标准都彼此相对独立,甚至是不同的组织制定。

ebXML标准也包含业务流程协作的标准,如ebCPPA、ebBPPS。

总之,ebXML是一个独立的规范集,具有内部一致性,而且不依赖于新兴标准和规范,它的用途主要定位在有特殊要求的电子商务方面,目前,ebXML已被国家确定为国标推荐,但其应用看起来还要有一段路要走。而XML Web服务由于其内容相对简单,技术实现容易,对应的一系列协议栈相对松耦合,因此其在构建SOA的应用中使用越来越广泛。

2.3. SCA与JBI

SCA(Service Component Architecture),即服务组件架构,提供了一种编程模型,可以支持基于SOA的应用程序实现。SCA是一种模型,可以支持实现服务组件的各种技术,连接服务组件的各种存取方法。对于组件,不仅包括不同的编程语言,也包括这些语言使用的框架和环境。对于存取方法SCA合成操作支持各种通讯、服务存取技术,如:WS、MQ、RPC。SCA规范包括了Assemble Model和Client Model两部分。前者约定了如何将异种组件(Java类,BPEL,Web Service)组装并发布成SOA服务,是SCA最大的特点和最核心的概念;后者则约定了如何在异种语言环境中调用SOA服务。通过这两部分的规范,就可以完全解决了服务从服务端到客户端的跨语言、跨环境的问题。图4为SCA的服务组件组装模型。

JBI Java商业集成(Java Business Integration)的简称。JBI的制订者们认为传统的EAI和B2B解决方案使用非标准的技术,这使得用户往往被锁定到特定的方案和产品提供商上,与此同时,没有任何一个单独的提供商可以覆盖EAI和B2B领域的所有问题。因此他们提出这个标准以期解决这个问题。这个标准定义了一个标准的体系结构允许第三方的组件插入到标准的基础设施上,并且即使这些组件是有不同提供商提供的,它们也可以以一种可预见的和可靠的方式互操作。从高层次上看,JBI 定义了可以从可插入组件构建集成系统的体系结构,这一结构中组件的交互使用一种经过中介的消息交换机制,而这一消息交换模式是基于WSDL 2.0或WSDL 1.1的。

从上面的分析来看,SCA定义了与具体技术无关的服务组件组装模型,SCA的定位,主要在于细粒度的组件和服务组装方式。SCA由于技术无关性及众多厂商的参与,他们得到了大多数厂商的支持。而JBI,它们都是基于Java的技术,JBI更多的像服务总线的 Java标准定义,其粒度比SCA要大,且更多的是服务间的通讯和组装模式,当前支持的主流厂家也不多,但是开源的实现相对还是比较多的。

2.4. WS4BPEL与WS-CDL

WS4BPEL,即Web服务业务流程执行语言,它是一种可执行语言,能够与各种促使业务流程自动化的软件系统相兼容。Web服务编制,通过说明性的方式(而不是编程的方式)表达了进行Web服务合成的需求。此标准主要用于组织内部的业务流程管理及服务编排,目前越来越多的BPM产品基于此规范实现。

WS-CDL,即Web Services Choreography Definition Language,Web服务编排定义语言,它定义为在多个交易伙伴之间建立形式化关系,它不要求所有被集成的端点(endpoints)都有Web服务基础设施。此规范更多地用于组织之外的服务与流程编排,目前在国内还不常用。

另外,XPDL也可以用于服务的编排和组合,但它主要用于传统的工作流定义,目前它也是BPM产品实现的重要技术标准。

2.5. JSR168与WSRP

JSR168 是java 规范要求,它为创建portlet建立标准的api,它是为实现porltet、基于java的门户服务器和其他web应用程序之间的互操作性而设计的。 JSR168的主要价值在于它被独立软件开发商(isv)所广泛采用。在采用JSR168之前,企业应用程序开发商不得不支持所有开发商门户的不同 portlet集,支持多个门户开发商不同的portlet集在类似业务信息、内容管理、检索和分析这样的领域中非常令人头疼。使用JST168规范,现在开发商只需要支持一种portlet集。目前,JSR168在基于Java技术开发Portal产品上,得到了广泛的支持,但也仅限于Java技术。

WSRP,即Web Services for Remote Portlets的缩写,它定义了如何利用基于 SOAP  Web 服务在门户应用程序中生成标记片断的规范。通过定义一组公共接口,WSRP 允许门户在它们的页面中显示远程运行的 portlet,而不需要门户开发人员进行任何编程。对于最终用户,这些 porlet 就和运行在他们本地的门户上一样,但是实际上这些 portlet 来自于远程运行的 portlet 容器,并且交互是通过 SOAP 消息的交换来实现的。在面向服务的体系结构中利用 WSRP 将是一个强大的组合,从而使面向呈现的 portlet 应用程序可以被发现并重用而不用任何额外的开发和部署活动。WSRP是由OASIS组织制定,目前已得到多数厂商的支持,鉴于它基于Web服务标准,而且技术相对独立,因此随着此标准的逐渐完善,相信越来越多的Portal生产企业会支持此标准。

从项目中看SOA

我们用一个小的项目来进行看待,项目的开发分为三个方面:

1)将所有的接口功能放在同一个工程下,这个工程非常重要;因为我们的服务提供者及消费者都会用到;

2)针对接口功能的具体实现,并将对应的服务暴露到zookeeper注册中心中;

3)消费者只需要引用接口功能的工程;在配置文件中,配置注册中地址及生成远程服务代理就可以在Java代码中调用了。这样做针对消费者端其实具体的实现细节并不在此端而是在服务提供者那端,如果服务端的代码进行了更新(例如:算法做了一定的调整),那么发布后,消费者自动调用到最新的方式。

接口

    主要是定义一些基本功能的的接口Java文件,提供为消费者、服务提供者引用使用

 

服务提供者

       引用接口工程(这个地方的引用,意思是将接口工程的生成.jar 放到此工程中),并实现此接口功能;此工程中还需要在配置文件中声明暴露服务的zookeeper注册中心地址;

 

 

 

消费者

      引用接口工程,并通过zookeeper注册中心获取对应的服务地址,进行调用

具体调用:

从上面,我们可以简单的看出SOA的基本实现流程,同理,在大型的项目中,这种方法上同样使用的。

结语

 总体来说,使用SOA框架开发的优点还是很多的,首先就是更易维护,还有他更高的可用性和更好的伸缩性。 随着业务复杂性与规模的不断增长,以及业务的多变性因素,使得敏捷软件开发变得尤其重要,在尽可能满足客户需求的同时,维持良好的软件质量与系统可用性。 将整体应用拆分开来,从而确保以业务为中心的服务设计理念更加符合敏捷交付与DevOps文化的实际要求。而这,正是当前越来越重要的微服务架构的真正来源。

 

posted @ 2020-05-11 18:44  啾啾丶丶  阅读(808)  评论(0编辑  收藏  举报