zoukankan      html  css  js  c++  java
  • 关于ESB(企业服务总线)

    一.什么是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都在统一命名空间下,就可以相互通信,为什么还要加上这一层?有两点需要考虑。

    (1)点对点做服务的时候,通常需要考虑日志记录,服务访问安全、传输安全、数据安全、路由分发等一系列问题,而这些完全可以统一管理,统一验证,灵活配置;

    如果应用A调用了应用B,在调用了应用C等具有逻辑流程的调用时,还可以在ESB上实现流程引擎;

    (2)ESB是一个中间件平台,包含了消息中间件的全部功能,有异步消息处理机制,可以实现业务系统之间真正的松耦合的结构。

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

    1、ESB的服务接入方式?

    (1)RPC 远程过程调用(面向方法)

    目前公司使用的HSF实际上就是RPC,还是JSON-RPC,RPC的另一种实现还有XML-RPC,通讯方式相同,采

    用调用本地服务(方法)一样的调用服务器的服务(方式)的方式,只不过传输数据格式不同,JSON格式更加高效。

    XML-RPC实际上就是这三种方式的最早通信方式,基于HTTP传输协议+XML参数封装,一个XML-RPC消息就是一个请求体为xml的htpp-post的请求,

    服务端执行了之后也以XML格式的编码返回,后来这个标准演化成了SOAP,可以理解为SOAP是XML-RPC 的高级版本;

    (2)SOAP 面向服务的架构(面向消息)

    SOAP,简单对象访问协议,是一种轻量的、简单的、基于xml的远程访问协议,可以实现多种传输层或应用层协议结合使用,

    如TCP/HTTP/SMTP等,实际上应用最广泛的还是基于HTTP+XML的实现,相对于XML-RPC,SOAP更好的利用了XML,

    有相应的服务描述语言,也是一段XML,也就是WSDL(Web Services Description Language),专门用来描述怎么访问web服务,描述了哪些细节呢?

    一般包含4点,用于访问服务的地址信息,用于传输信息的传输协议(比如通道数),用于所有可使用功能的名称和接口方法,

    在所有的请求和响应中所使用的数据类型,具体什么格式,这里不再展开。

    (3)REST 资源的状态转变(面向资源)

    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、数据转换

    (1)在应用间交换不同格式的信息;

    (2)操作消息的负载内容,包括加密、压缩和编码转换;

    (3)在异构的传输协议的数据类型间格式化消息;

    此过程也是依赖工具比如Mule可以用Transformer 进行转换,比如将JMS格式message转化为其他类型的数据,JDBC Transformer可以将CSV或xml文件中的数据转移到数据库中等等操作。

    4、消息路由

    (1)基于消息内容和复杂规则路由消息;

    (2)消息的过滤、聚合以及重新排列序号;

    此过程也是依赖工具比如Mule可以用case when 等逻辑判断,根据消息中指定的消息将消息发送到不同的服务端进行处理。

    5、ESB总线和微服务通信区别

    ESB的主要应用场景是集成,特别是对无法改变的异构系统做适配整合,比如遗留系统,外部系统。

    在逻辑上和运行时都是集中的。逻辑上会有集中的高层视野,有利于可管理性,也就是便于治理。

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

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

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

     
  • 相关阅读:
    java的sha1加密,转化为python版本
    VUE:页面跳转时传递参数,及参数获取
    如何使用 Django中的 get_queryset, get_context_data和 get_object 等方法
    django orm 外键id返回对应的名称
    spring boot(一):入门篇
    redis学习(四)——Hash数据类型
    redis学习(三)——List数据类型
    redis学习(二)——String数据类型
    Java多线程(七)——线程休眠
    MySQL和B树的那些事
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/12150933.html
Copyright © 2011-2022 走看看