SOA
论面向服务架构设计及其应用
杨紫媛
(石家庄铁道大学)
摘 要: 面向服务的架构是一种软件体系结构,应用程序的不同组件通过网络上的通信协议向其他组件提供服务。通信可以是简单的数据传递,也可以是两个或多个服务彼此协调连接。这些独特的服务执行一些小功能,例如验证付款、创建用户帐户或提供社交登录等。面向服务的架构不太关于如何对应用程序进行模块化构建,更多的是关于如何通过分布式、单独维护和部署的软件组件的集成来组成应用程序。这些通过技术和标准来实现,通过技术和标准使得组件能够更容易地通过网络(尤其是IP网络)进行通信和协作。SOA架构中有两个主要角色:服务提供者(Provider)和服务使用者(Consumer)。而软件代理则可以扮演这两个角色。该Consumer层是用户(人、应用程序或第三方的其它组件)与SOA交互的点,和Provider层则由SOA架构内的所有服务所构成。基于上述理论,本文将结合实际开发项目,讲解SOA架构模型是怎样的,来理解什么是SOA架构,它的优势又是什么。
关键词:SOA架构;面向服务架构;
On Service-Oriented Architecture Design and Its ApplicationMVC architecture
YANG Zi-yuan
(Shijiazhuang Tiedao University)
Abstract:A service-oriented architecture is a software architecture in which different components of an application provide services to other components through communication protocols on the network. Communication can be simple data transfer, or it can be two or more services coordinated with each other. These unique services perform small functions, such as verifying payments, creating user accounts, or providing social logins. Service-oriented architecture is not so much about how to build applications modularly, but more about how to compose applications through the integration of distributed, separately maintained and deployed software components. These are implemented through technologies and standards, which enable components to communicate and collaborate more easily through networks (especially IP networks). There are two main roles in the SOA architecture: service provider (Provider) and service consumer (Consumer). The software agent can play these two roles. The Consumer layer is the point where users (people, applications, or other third-party components) interact with the SOA, and the Provider layer is composed of all services within the SOA architecture. Based on the above theory, this article will combine the actual development projects that I have participated in, explain the attempts to build an SOA architecture, and the problems encountered to understand what is an SOA architecture and what are its advantages
Key words:SOA architecture; service-oriented architecture;
一、什么是SOA架构
面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。SOA的精髓是严格的松散耦合,不允许直接访问其它服务的数据,大家按照一个契约或标准(service interface)来进行交流。SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代。
二、面向服务架构的主要技术和标准
面向服务架构的主要技术有Web服务、ESB。涉及到的标准有:UDDI协议、WSDL规范、SOAP协议
1、UDDI协议
UDDI(统一描述、发现和集成协议)计划是一个广泛的、开放的行业计划,它使得商业实体能够(1)彼此发现,(2)定义他们怎样在Internet上互相作用,并在一个全球的注册体系架构中共享信息。UDDI是这样一种基础的系统构筑模块,他使商业实体能够快速、方便地使用他们自身的企业应用软件来发现合适的商业对等实体,并与其实施电子化的商业贸易。
UDDI同时也是Web服务集成的一个体系框架。它包含了服务描述与发现的标准规范。UDDI规范利用了W3C和Internet工程任务组织(IETF)的很多标准作为其实现基础,比如扩展标注语言(XML)、HTTP和域名服务(DNS)等协议。另外,在跨平台的设计特性中,UDDI主要采用了已经被提议给W3C的SOAP(Simple Object Access Protocol,简单对象访问协议)规范的早期版本。
2、WSDL规范
WSDL是Web Services Description Language(Web服务描述语言)的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。它是Web服务的接口定义语言,由Ariba、Intel、IBM、MS等共同提出,通过WSDL,可描述Web服务的三个基本属性:
1、服务做些什么——服务所提供的操作(方法);
2、如何访问服务——和服务交互的数据格式以及必要协议;
3、服务位于何处——协议相关的地址,如URL。
WSDL文档以端口集合的形式来描述Web服务,WSDL服务描述包含对一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。
3、SOAP协议
SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括四个部分:SOAP封装(Envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架;SOAP编码规则(Encoding Rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC Representation),表示远程过程调用和应答的协定;SOAP绑定(Binding),使用底层协议交换信息。
三、SOA的服务分层
3.1 应用服务(原子服务)
以电商管理系统为例,比如:订单服务,仓库服务,销售服务,用户管理服务,这些服务直接对应不同的应用系统,直接服务这些应用系统的原子操作。订单服务直接原子性的插入订单,没有任何跨其他服务的分支逻辑。仓库服务只管自己的仓库逻辑。同样其他的应用服务只管好自己的职责,杜绝对其他服务的调用。
3.2 组合服务
组合服务是对应用服务的一个组合,根据实际项目的规模大小,不一定非要进行物理的隔离,在代码层面的服务化也是可以的,在将来的某一天有必要的情况下再进行物理的拆分,毕竟物理的拆分有着严重的成本和代价,对系统的稳定性带来很多挑战。所以必要的时候在进行拆分。
3.3 业务服务
业务服务是最外层的服务,向下编排了组合服务。业务服务位于最上层,当需要有跨越多个应用线来完成的业务,这个业务就放入业务服务中。比如提交订单,先检查库存、扣减库存(冻结库存),然后下单,再往后通知财务,再往后通知物流等等都是一个复杂的企业服务线。这种最外层的业务逻辑如果你不进行SOA分层然后将其放入最外层的业务服务中,你把它放入任何一个应用线都会使系统调用混乱不堪。所以问题就是需要进行纵向的划分层次。如果进行了SOA的层次划分后就不会出现互相乱用的情况。
四、SOA实施中遇到的问题
遇到的问题主要有,通信协议(例如SOAP)如何选择、第三方中间件如何选择、服务粒度如何确定等, 现有的SOA知识并不能帮助你把很大的应用程序划小。它没有提到多大算大,也没有讨论如何在现实世界中有效地防止服务之间的过度耦合。以基于SOA架构的网上商店为例,SOA系统中的服务粒度的控制是一项十分重要的设计任务。通常来说,对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于系统架构的内部。从技术上讲,粗粒度的服务接口可能是一个特定服务的完整执行,而细粒度的服务接口可能是实现这个粗粒度服务接口的具体的内部操作。对应这个网上商店来说,粗粒度的服务可能就是暴露给外部用户使用的提交购买表单的操作,而系统内部的细粒度的服务可能就是实现这个提交购买表单服务的一系列的内部服务,比如说创建购买记录,设置客户地址,更新数据库等一系列的操作。虽然细粒度的接口能为服务请求者提供了更加细化和更多的灵活性,但同时也意味着引入较难控制的交互模式易变性,也就是说服务的交互模式可能随着不同的服务请求者而不同。如果我们暴露这些易于变化的服务接口给系统的外部用户,就可能造成外部服务请求者难于支持不断变化的服务提供者所暴露的细粒度服务接口。而粗粒度服务接口保证了服务请求者将以一致的方式使用系统中所暴露出的服务。虽然面向服务的体系结构(SOA)并不强制要求一定要使用粗粒度的服务接口,但是建议使用它们作为外部集成的接口。通常架构设计师可以使用BPEL来创建由细粒度操作组成的业务流程的粗粒度的服务接口。
五、自己搭建SOA实施效果
自己采用效果不是特别理想,因为所构建的系统架构不能够满足系统中不同的服务级别需求以及不能够有效地响应多个客户请求时的性能问题。如果能更多地关注一些商业需求和服务级别需求的话,出错的概率以及一些风险会大大降低
六、SOA应用场景
当前最适于采用SOA方法与技术来构建的应用系统主要场景是各种系统间的集成,包括数据集成、流程集成和界面集成。不适用于企业只将小部分 IT 预算用于集成项目或者企业的大部分流程都是手动的或以文档为中心的,自动化的机会几乎为零等场景。
参考资料:
【1】https://www.cnblogs.com/wangiqngpei557/p/4486177.html