SOA
简介
SOA是Service-Oriented Architecture的简称,最早是资讯公司Garnter在1996年提出的概念。
SOA架构是面向服务的,SOA继承了很多面向对象的特点,比如说面向对象的封装,经常代表很多同一实体的功能封装成一个模块,为其他对象调用者提供接口调用,良好的面向对象设计就是暴露接口,隐藏实现,SOA的设计同样需要明确服务定义,不同的是SOA的服务定义不是基于某一个编程语言或者平台的具像化定义,而是基于业务描述语言定义的服务接口,最终可以由不同的技术栈进行实现,SOA不同的模块之间也可以采用异构的技术体系,彼此直接通过远程调用的方式进行交互,或者是通过ESB进行数据交互。
SOA的服务一般提供标准稳定的接入服务,SOA服务作为封装好的功能模块,不同为微服务是服务研发团队内部的定位,SOA服务面向的是其他的业务团队,甚至组织架构之外的业务方,SOA服务之间体现了大型企业之间跨组织团队的信息协作和数据交互,这些模块之间已经形成了相互依赖的生态链条。所以服务的稳定性很重要,服务的描述一定要准确,稳定,避免频繁变更,而且SOA服务主要功能是作为功能模块对外提供服务,所以一般服务的粒度较粗,SOA服务承载更多的业务逻辑。
不同于微服务,微服务架构往往不能提供独立的业务功能,例如微服务的网关服务,不能独立提供有业务语义的功能,但是SOA服务提供的独立完整的业务接口,而且组成服务的构件都是独立部署并具有独立的上下文环境,SOA组件之间一般不存在强依赖关系,组件之间即使需要通信一般会采用ESB 消息总线等方式进行交互。
实现
webservice
webservice是SOA架构中组件通常对外暴露的方式,webservice提供的服务一般通过Web服务描述语言(WSDL)描述。
WSDL描述了服务的地址信息以及入参,出参等信息。
webservice的调用通过简单对象访问协议(SOAP)进行。
SOAP调用采用HTTP(网络协议)+XML(数据通信信息)的方式进行。
SOAP一般包含以下信息:
- Envelope – 必须的部分。以XML的根元素出现。
- Headers – 可选的。
- Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
ESB
ESB的确是SOA中一个非常重要的集成层组件(Integration Layer),不论是OpenGroup发布的SOA参考架构,还是主流SOA供应商,都将ESB置于SOA架构的核心位置。
事实上,ESB在SOA中扮演着重要的角色,在技术层解决了SOA的整合问题,耦合了应用与应用之间的集成逻辑,使得SOA更灵活,更易于扩展,更敏捷。有了ESB,新建的服务消费者应用程序不需要关心服务的提供者在哪里,使用何种通讯协议,与其交互的数据是怎样的……,它只需向ESB发出请求,使用开放的、标准的通讯协议。相反,若某个可重用的价值较大的服务位于某一个遗留系统中,而由于种种原因,该遗留系统不能在短期内重写,此时ESB可以架起该服务与其使用者之间沟通的桥梁。
ESB的一个重要功能是将企业内/合作伙伴处的服务以开放的、标准的服务方式暴露出来,使得服务消费者能够便利地查找到服务,以促进服务的重用、管理。而许多ESB产品不包含服务的注册、存储、发布、订阅等功能,这些功能包含UDDI库中。所以,ESB一般需要一个服务注册/存储库与之协作。ESB执行各种仲裁逻辑,而注册库为ESB提供必要的元数据信息。
服务注册库可以存储服务的元数据,包括服务的描述、功能、版本、输入/输出消息的模式、服务端点、SLA、安全策略等内容,这些信息可被ESB用来进行消息格式验证、服务的动态路由、执行安全策略和SLA保证等。