SOA 是一种在盘算环境中设计、开辟、部署和管理离散逻辑单元(服务)模型的方法。
SOA 并不是一个奇怪事物,而只是面向对象模型的一种替代。虽然基于 SOA 的系统并不清除使用 OOD 来构建单个服务,但是其团体设计却是面向服务的。由于 SOA 考虑到了系统内的对象,所以虽然 SOA 是基于对象的,但是作为一个团体,它却不是面向对象的。
SOA 系统原型的一个典型例子是 CORBA,它已经出现很长时间,其界说的概念与 SOA 相似。SOA 创建在 XML 等新技术的基础上,通过使用基于 XML 的语言来描述接口,服务已经转到更动态且更灵活的接口系统中,CORBA 中的 IDL 无法与之相比。图 9-13 描述了一个完备的 SOA 模型。
在 SOA 模型中,所有的功能都界说成了独立的服务。服务之间通过交互和协调完成业务的团体逻辑。所有的服务通过服务总线或流程管理器来毗连。这种疏松耦合的架构使得各服务在交互过程中无需考虑双方的内部实现细节,以及部署在什么平台上。
服务的基本结构
一个独立的服务基本结构如图 9-14 所示。
由图 9-14 可以看出,服务模型的表现层从逻辑层分离出来,中心增长了服务对外的接口层。通过服务接口的标准化描述,使得服务可以提供给在任何异构平台和任何用户接口使用。这允许并支持基于服务的系统成为疏松耦合、面向构件和跨技术实现,服务请求者很大概根本不知道服务在哪里运行、是由哪种语言编写的,以及消息的传输路径,而是只需要提出服务请求,然后就会得到答案。
2.SOA 设计原则
在 SOA 架构中,继续了来自对象和构件设计的各种原则,比方,封装和自我包罗等。那些保证服务的灵活性、疏松耦合和复用能力的设计原则,对 SOA 架构来说同样是非常重要的。关于服务,一些常见的设计原则如下:
(1)明确界说的接口。服务请求者依赖于服务规约来调用服务,因此,服务界说必须长时间稳固,一旦公布,不能随意更改;服务的界说应尽大概明确,减少请求者的不适当使用;不要让请求者看到服务内部的私有数据。
(2)自包罗和模块化。服务封装了那些在业务上稳固、重复出现的活动和构件,实现服务的功能实体是完全独立自主的,独立举行部署、版本控制、自我管理和规复。
(3)粗粒度。服务数量不应该太多,依赖消息交互而不是远程过程调用,通常消息量比力大,但是服务之间的交互频度较低。
(4)松耦合。服务请求者可见的是服务的接口,其位置、实现技术、当前状态和私有数据等,对服务请求者而言是不可见的。
(5)互操作性、兼容和计谋声明。为了确保服务规约的全面和明确,计谋成为一个越来越重要的方面。这可以是技术相关的内容,比方,一个服务对安全性方面的要求;也可以是与业务有关的语义方面的内容,比方,需要满足的费用大概服务级别方面的要求,这些计谋对于服务在交互时是非常重要的。
服务构件与传统构件
服务构件架构(Service Component Architecture,SCA)是基于 SOA 的头脑描述服务之间组合和协作的规范,它描述用于使用 SOA 构建应用程序和系统的模型。它可简化使用SOA 举行的应用程序开辟和实现工作。SCA 提供了构建粗粒度构件的机制,这些粗粒度构件由细粒度构件组装而成。SCA 将传统中心件编程从业务逻辑分离出来,从而使程序员免受其复杂性的困扰。它允许开辟人员集中精力编写业务逻辑,而不必将大量的时间耗费在更为底层的技术实现上。
SCA 服务构件与传统构件的重要区别在于,服务构件往往是粗粒度的,而传统构件以细粒度居多;服务构件的接口是标准的,重要是服务描述语言接口,而传统构件常以详细 API 情势出现;服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;服务构件可以通过构件容器提供 QoS 的服务,而传统构件完全由程序代码直接控制。
9.5.2 SOA 的关键技术
SOA 陪伴着无处不在的标准,为企业的现有资产或投资带来了更好的复用性。SOA 可以或许在最新的和现有的系统之上创建应用,借助现有的应用产生新的服务,为企业提供更好的灵活性来构建系统和业务流程。SOA 是一种全新的架构,为了支持其各种特性,相关的技术规范不断推出。与 SOA 紧密相关的技术重要有 UDDI、WSDL、SOAP 和 REST 等,而这些技术都是以 XML 为基础而发展起来的。
UDDI
UDDI(Universal DescriptionDiscovery and Integration,同一描述、发现和集成)提供了一种服务发布、查找和定位的方法,是服务的信息注册规范,以便被需要该服务的用户发现和使用它。UDDI 规范描述了服务的概念,同时也界说了一种编程接口。通过 UDDI 提供的标准接口,企业可以发布自己的服务供其他企业查询和调用,也可以查询特定服务的描述信息,并动态绑定到该服务上。
在 UDDI 技术规范中,重要包罗以下三个部分的内容:
(1)数据模型。UDDI 数据模型是一个用于描述业务构造和服务的 XML Schema。
(2)API。UDDI API 是一组用于查找或发布 UDDI 数据的方法,UDDI API 基于 SOAP。
(3)注册服务。UDDI 注册服务是 SOA 中的一种基础设施,对应着服务注册中心的脚色。
2.WSDL
WSDL(Web ServiceDescription Language,Web 服务描述语言)是对服务举行描述的语言,它有一套基于 XML 的语法界说。WSDL 描述的重点是服务,它包罗服务实现界说和服务接口界说,如图 9-15 所示。
SOA 只是一种概念和头脑,需要借助于详细的技术和方法来实现它。从本质上来看,SOA 是用本地盘算模型来实现一个分布式的盘算应用,也有人称这种方法为“本地化设计,分布式工作”模型。CORBA、DCOM 和 EJB 等都属于这种解决方式,也就是说,SOA 最终可以基于这些标准来实现。
从逻辑上和高层抽象来看,目前,实现 SOA 的方法也比力多,此中主流方式有 Web Service、企业服务总线和服务注册表。
1.Web Service
在 Web Service(Web 服务)的解决方案中,一共有三种工作脚色,此中服务提供者和服务请求者是必须的,服务注册中心是一个可选的脚色。它们之间的交互和操作构成了 SOA 的一种实现架构,如图 9-16 所示。
(1)服务提供者。服务提供者是服务的所有者,该脚色负责界说并实现服务,使用 WSDL 对服务举行详细、准确、规范地描述,并将该描述发布到服务注册中心,供服务请求者查找并绑定使用。
(2)服务请求者。服务请求者是服务的使用者,虽然服务面向的是程序,但程序的最终使用者仍旧是用户。从架构的角度看,服务请求者是查找、绑定并调用服务,或与服务举行交互的应用程序。服务请求者脚色可以由欣赏器来继承,由人或程序(比方,别的一个服务)来控制。
(3)服务注册中心。服务注册中心是毗连服务提供者和服务请求者的纽带,服务提供者在此发布他们的服务描述,而服务请求者在服务注册中心查找他们需要的服务。不过,在某些情况下,服务注册中心是整个模型中的可选脚色。比方,假如使用静态绑定的服务,服务提供者则可以把描述直接发送给服务请求者。
Web Service 模型中的操作包罗发布、查找和绑定,这些操作可以单次或反复出现。
(1)发布。为了使用户可以或许访问服务,服务提供者需要发布服务描述,以便服务请求者可以查找它。
(2)查找。在查找操作中,服务请求者直接检索服务描述或在服务注册中心查询所要求的服务类型。对服务请求者而言,大概会在生命周期的两个不同阶段中涉及查找操作,首先是在设计阶段,为了程序开辟而查找服务的接口描述;其次是在运行阶段,为了调用而查找服务的位置描述。
(3)绑定。在绑定操作中,服务请求者使用服务描述中的绑定细节来定位、接洽并调用服务,从而在运行时与服务举行交互。绑定可以分为动态绑定和静态绑定。在动态绑定中,服务请求者通过服务注册中心查找服务描述,并动态地与服务交互;在静态绑定中,服务请求者已经与服务提供者告竣默契,通过本地文件或其他方式直接与服务举行绑定。
在采用 Web Service 作为 SOA 的实现技术时,应用系统大致可以分为六个层次,分别是底层传输层、服务通信协议层、服务描述层、 服务层、业务流程层和服务注册层。
(1)底层传输层。底层传输层重要负责消息的传输机制,HTTP、JMS(Java Messaging Service,Java 消息服务)和 SMTP 都可以作为服务的消息传输协议,此中 HTTP 使用最广。
(2)服务通信协议层。服务通信协议层的重要功能是描述并界说服务之间举行消息通报所需的技术标准,常用的标准是 SOAP 和 REST 协议。
(3)服务描述层。服务描述层重要以一种同一的方式描述服务的接口与消息交换方式,相关的标准是 WSDL。
(4)服务层。服务层的重要功能是将遗留系统举行包装,并通过发布的 WSDL 接口描述被定位和调用。
(5)业务流程层。业务流程层的重要功能是支持服务发现,服务调用和点到点的服务调用,并将业务流程从服务的底层调用抽象出来。
(6)服务注册层的重要功能是使服务提供者可以或许通过 WSDL 发布服务界说,并支持服务请求者查找所需的服务信息。相关的标准是 UDDI。
服务注册表
服务注册表(service registry)虽然也具有运行时的功能,但重要在 SOA 设计时使用。它提供一个计谋执行点(Policy Enforcement Point,PEP),在这个点上,服务可以在 SOA 中注册,从而可以被发现和使用。服务注册表可以包罗有关服务和相关构件的配置、依从性和约束文件。从理论上来说,任何帮助服务注册、发现和查找服务合约、元数据和计谋的信息库、数据库、目录或其他节点都可以被以为是一个注册表。大多数商用服务注册产物支持服务注册、服务位置和服务绑定功能。
(1)服务注册。服务注册是指服务提供者向服务注册表发布服务的功能(服务合约),包罗服务身份、位置、方法、绑定、配置、方案和计谋等描述性属性。使用服务注册表实现SOA 时,要限制哪些新服务可以向注册表发布、由谁发布以及谁批准和根据什么条件批准等,以便使服务可以或许有序的注册。
(2)服务位置。服务位置是指服务使用者,帮助它们查询已注册的服务,探求符合自身要求的服务。这种查找重要是通过检索服务合约来实现的,在使用服务注册表实现 SOA 时,需要规定哪些用户可以访问服务注册表,以及哪些服务属性可以通过服务注册表举行暴露等,以便服务能得到有效的、经过授权的使用。
(3)服务绑定。服务使用者使用查找到的服务合约来开辟代码,开辟的代码将与注册的服务举行绑定,调用注册的服务,以及与它们实现互动。可以使用集成的开辟环境自动将新开辟的服务与不同的新协议、方案和程序间通信所需的其他接口绑定在一起。
企业服务总线
ESB 的概念是从 SOA 发展而来的,它是一种为举行毗连服务提供的标准化的通信基础结构,基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,并可帮助企业对业务流程举行设计和模拟,对每个业务流程实施控制和跟踪、分析并改进流程和性能。
在一个复杂的企业盘算环境中,假如服务提供者和服务请求者之间采用直接的端到端的交互,那么随着企业信息系统的增长和复杂度的提高,系统之间的关联会徐徐变得非常复杂,形成一个网状结构,这将带来昂贵的系统维护费用,同时也使得 IT 基础设施的复用变得困难重重。ESB 提供了一种基础设施,消除了服务请求者与服务提供者之间的直接毗连,使得服务请求者与服务提供者之间进一步解耦。
ESB 是由中心件技术实现并支持 SOA 的一组基础架构,是传统中心件技术与 XML、Web Service 等技术联合的产物,是在整个企业集成架构下的面向服务的企业应用集成机制。详细来说,ESB 具有以下功能:
(1)支持异构环境中的服务、消息和基于事件的交互,而且具有适当的服务级别和可管理性。
(2)通过使用 ESB,可以在几乎不更改代码的情况下,以一种无缝的非侵入方式使现有系统具有全新的服务接口,并可以或许在部署环境中支持任何标准。
(3)充当缓冲器的 ESB(负责在诸多服务之间转换业务逻辑和数据格式)与服务逻辑相分离,从而使不同的系统可以同时使用同一个服务,不用在系统或数据发生变化时,改动服务代码。
(4)在更高的层次,ESB 还提供诸如服务署理和协议转换等功能。允许在多种情势下通过像 HTTP、SOAP 和 JMS 总线的多种传输方式,重要是以网络服务的情势,为发表、注册、发现和使用企业服务或界面提供基础设施。
(5)提供可配置的消息转换翻译机制和基于消息内容的消息路由服务,传输消息到不同的目的地。
(6)提供安全和拥有者机制,以保证消息和服务使用的认证、授权和完备性。
在企业应用集成方面,与现存的、专有的集成解决方案相比,ESB 具有以下上风:
(1)扩展的、基于标准的毗连。ESB 形成一个基于标准的信息骨架,使得在系统内部和整个价值链中可以容易地举行异步或同步数据交换。ESB 通过使用 XML、SOAP 和其他标准,提供了更强大的系统毗连性。
(2)灵活的、服务导向的应用组合。基于 SOA,ESB 使复杂的分布式系统(包罗跨多个应用、系统和防火墙的集成方案)可以或许由以前开辟测试过的服务组合而成,使系统具有高度可扩展性。
(3)提高复用率,低沉资源。按照 SOA 方法构建应用,提高了复用率,简化了维护工作,进而减少了系统总体资源。
(4)减少市场反应时间,提高生产率。ESB 通过构件和服务复用,按照 SOA 的头脑简化应用组合,基于标准的通信、转换和毗连来实现这些优点。
9.5.4 微服务