关于ESB(企业服务总线)

左心房为你撑大大i 提交于 2020-01-05 00:32:07

一、什么是ESB

ESB是Enterprise Service Bus的简称,中文翻译为企业服务总线,企业服务总线是一个实现系统间集成和互联互通的重要技术架构,可以理解为是一种消息和服务集成的中间件平台。

二、ESB解决了什么问题以及什么是HSB

 
图片摘自网络,侵删

ESB主要是为了解决多个应用系统互联所面临的的复杂性,减低集成和维护成本。
举个例子,比如我们的医疗业务系统都知道分为很多个系统,包括HIS、LIS、EMR等等,如果这些业务系统是由多个商家做的,可能会有构建语言不同、通信协议不同、数据传输格式不同等问题,那么如何把这些系统用一条线串起来呢?就是用ESB;还有我们医疗从业者、患者、管理人员等可以通过多个渠道访问后台系统,比如浏览器的portal,移动设备等;还有一些特殊的医疗业务应用系统,比如双向会诊、远程会诊、业务协同等等,即实现了ESB的基本特点,又满足医疗卫生行业的特定需求的ESB,叫做健康服务总线(Health Service Bus,HSB)。
ESB为了解决刚才说的问题,就需要保证多个应用系统的服务接入协议转换提供可靠的消息传输数据格式转换基于内容路由等功能。
有人可能会有疑问,应用A发送消息给ESB,ESB再将消息转换给应用B,那么应用A直接通过SOAP协议发送给B,效率不是应该更高吗?而且如果这些IT系统都在一个网络中,提供的WebService都在统一命名空间下,就可以相互通信,为什么还要加上这一层?有两点需要考虑。第一点。点对点做服务的时候,通常需要考虑日志记录,服务访问安全、传输安全、数据安全、路由分发等一系列问题,而这些完全可以统一管理,统一验证,灵活配置,;如果应用A调用了应用B,在调用了应用C等具有逻辑流程的调用时,还可以在ESB上实现流程引擎;第二点,ESB是一个中间件平台,包含了消息中间件的全部功能,有异步消息处理机制,可以实现业务系统之间真正的松耦合的结构。

三、 如何实现ESB的各个功能

1.ESB的服务接入方式?

  • RPC 远程过程调用(面向方法)
  • SOAP 面向服务的架构(面向消息)
  • REST 资源的状态转变(面向资源)
    目前我们公司使用的HSF实际上就是RPC,还是JSON-RPC,RPC的另一种实现还有XML-RPC,通讯方式相同,采用调用本地服务(方法)一样的调用服务器的服务(方式)的方式,只不过传输数据格式不同,JSON格式更加高效。
    XML-RPC实际上就是这三种方式的最早通信方式,基于HTTP传输协议+XML参数封装,一个XML-RPC消息就是一个请求体为xml的htpp-post的请求,服务端执行了之后也以XML格式的编码返回,后来这个标准演化成了SOAP,可以理解为SOAP是XML-RPC 的高级版本;
    SOAP,简单对象访问协议,是一种轻量的、简单的、基于xml的远程访问协议,可以实现多种传输层或应用层协议结合使用,如TCP/HTTP/SMTP等,实际上应用最广泛的还是基于HTTP+XML的实现,相对于XML-RPC,SOAP更好的利用了XML,有相应的服务描述语言,也是一段XML,也就是WSDL(Web Services Description Language),专门用来描述怎么访问web服务,描述了哪些细节呢?一般包含4点,用于访问服务的地址信息,用于传输信息的传输协议(比如通道数),用于所有可使用功能的名称和接口方法,在所有的请求和响应中所使用的数据类型,具体什么格式,这里不再展开,有兴趣可以查看一下以下链接:
    WebService之WSDL文件讲解
    最后说REST,非协议非规范,只是一种约束、概念或者开发方式,简单的说就是,用HTTP动词(GET,POST,DELETE,DETC)描述操作,表示资源的转换。满足REST的约束叫RESTful结构,其实目前公司的并不是RESTful风格。
    近年来的REST被炒得很火,但不是所有情况都是适合的,REST目前都是基于HTTP/HTTPS,而SOAP可以支持很多传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。而SOAP已经是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。

2.ESB的如何进行协议转换?

现在使用的ESB协议转换基本上使用的ESB产品,实现基本上二进制进行转换;具体的可以找相应的产品的,比如 WSO2d产品的实现:
WSO2 ——(7)ESB功能:协议转换
目前有一些问题需要再调查一下,cxf3.1目前也只支持wsdl1.1,axis2的最新版也不支持wsdl2.0,需要继续查询资料如何转换;有些企业再做接口对接的时候可能只提供wsdl,需要自己根据wsdl生成服务端提供服务给他们,可以利用soapUI实现。有些企业只支持wsdl1.0,我们要实现自己的ESB就要提供wsdl1.0与wsdl2.0版。

3.数据转换

  • 在应用间交换不同格式的信息
  • 操作消息的负载内容,包括加密、压缩和编码转换
  • 在异构的传输协议的数据类型间格式化消息
    此过程也是依赖工具比如Mule可以用Transformer 进行转换,比如将JMS格式message转化为其他类型的数据,JDBC Transformer可以将CSV或xml文件中的数据转移到数据库中等等操作

4. 消息路由

  • 基于消息内容和复杂规则路由消息
  • 消息的过滤、聚合以及重新排列序号
    此过程也是依赖工具比如Mule可以用case when 等逻辑判断,根据消息中指定的消息将消息发送到不同的服务端进行处理。

补充:ESB总线和微服务通信有什么区别?
 

ESB的主要应用场景是集成,特别是对无法改变的异构系统做适配整合,比如遗留系统,外部系统。在逻辑上和运行时都是集中的。逻辑上会有集中的高层视野,有利于可管理性,也就是便于治理。

但也有集中的复杂性特别是演进时的节奏纠缠,需要想办法应对。运行时的集中则有比较大的容量和可用性风险。

微服务的通讯一般是自治的,在运行时是分散的,容量和可用性风险可以分散应对。逻辑上也是分散的,这一点有好处也有坏处,分散复杂性的同时也失去了统一视野。

折中的办法是建立服务治理中心,作为逻辑中心,采用事后模式的治理演进风格。

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!