ESB企业服务总线
ESB是企业服务总线(Enterprise Service Bus)的缩写,是中间件技术与Web Service等技术结合的产物,也是SOA系统中的核心基础设施。ESB就是一个服务的中介,形成服务使用者->ESB服务Proxy->服务提供者的生物链,中介的作用在不同应用中各有不同:
- 解耦中介 :客户对实际服务提供者的身份、物理位置、传输协议和接口定义都是不知道也不关心的,交互集成代码提取到了业务逻辑之外,由ESB平台进行中央的宣告式定义。ESB平台实现协议转换 (WebService,Http,JMS...),消息转换 (转换、充实、过滤),消息路由 (同步/异步、发布/订阅、基于内容路由、分支与聚合...)。
- 服务中介 :ESB平台作为中介提供服务交互中的基础服务。ESB平台实现SLA (可靠性保证,负载均衡,流量控制,缓存,事务控制,加密传输),服务管理监控 (异常处理,服务调用及消息数据记录,系统及服务的状态监控,ESB配置管理),统一安全管理 (这个有点理想主义)。
- 服务编排 :多个服务进行编排形成新的服务。ESB支持一个直观的形式定义新组合服务的流程(工作流、BPEL 或 代码级编排)。
从上面可以看到ESB的基本功能仍然是数据传输,消息协议转化,路由三大核心功能。有这三大核心功能也可以看到在进行异构系统的整合时候往往根据需要ESB提供这些功能。没有ESB时候也可以实现SOA,比如借助SCA和BPEL来实现SOA,当时却很难实现消息协议转化和动态路由。
ESB在发展过程中有从原有的消息中间件转化为ESB产品的,这类消息中间件和数据总线产品在原有的EAI企业应用集成中应用比较多。而SOA根据强调了基于服务的集成,以Web Service服务为基本的管理单元。一个服务的定位是关于如何把业务逻辑表现成为一组相互独立的,自描述的且能互操作的实体。
对于SOA关注的是服务全生命周期,通过服务实现业务价值。而ESB关注的是服务中介和服务的集成,是SOA的基础设施。SOA有两个核心组件,一个是ESB,一个是BPEL,而ESB是基础设施,BPEL是业务流程驱动下服务的集成和整合。离开了SOA,ESB将失去它所连接的服务,而仅仅是一个总线,同时也将变得毫无价值。Bobby做了一个比喻:路是没有任何价值的,除非你利用它把一个东西从一个地方移到另外一个地方。而离开SOA,ESB就像一个没人使用的道路。
做SOA的事情不要先上来建立一个大而全的ESB,相反是关注你的业务问题,找到用SOA的方法来解决业务上的需求,在解决这个问题的过程当中,你会看到一系列的业务服务。这些业务服务是会产生业务价值的。它可以灵活地组装,动态地解决你变化的业务需求。这是它的价值,只有这样才能使你的业务敏捷起来,随需应变起来。而在服务的组装过程中,你再去考虑利用ESB来把他们连接起来。
ESB 需要某种形式的服务路由目录(service routing directory)来路由服务请求。然而,SOA 可能还有单独的业务服务目录(business service directory),其最基本的形式可能是设计时服务目录,用于在组织的整个开发活动中实现服务的重用。Web 服务远景在业务服务目录和服务路由目录的角色中都放置了一个 UDDI 目录,因而使得可以动态发现和调用服务。这样的目录可以视为 ESB 的一部分;然而,在这样的解决方案变得普遍之前,业务服务目录可能与 ESB 是分离的。
标准的 ESB 功能
|
通信 |
服务交互 |
|
|
|
集成 |
服务质量 |
|
|
|
安全性 |
服务级别 |
|
|
|
消息处理 |
管理和自治 |
|
|
|
建模 |
基础架构智能 |
|
|
上面的许多功能既可以使用专有技术实现,也可以通过利用开放标准实现。然而,使用不同的技术来实现 ESB 可能会使它们的性能、可伸缩性和可靠性这些特性显著不同,同时 ESB 功能和所支持的开放标准也会有所不同。由于这些原因,再加上最近制订和正在兴起的一些相关标准,当今实现 ESB 的许多关键决策都涉及到成熟的专有技术和不成熟的开放标准之间的权衡。
支持 SOA 的最低功能的 ESB 实现
如果在前面确定的功能中只有一部分和大多数 SOA 场景相关,我们可能会问:实现 ESB 所需的一组最低功能由什么构成?为此,考虑最被普遍认同的 ESB 定义的原理:
- ESB 是一种逻辑体系结构组件,它提供与 SOA 的原则保持一致的集成基础架构。
- SOA 原则需要使用与实现无关的的接口、强调位置透明性和可互操作性的通信协议、相对粗粒度和封装可重用功能的服务定义。
- ESB 可以作为分布式的异构基础架构进行实现。
- ESB 提供了管理服务基础架构的方法和在分布式异构环境中进行操作的功能。
最低的 ESB 功能
|
通信 |
集成 |
|
|
|
服务交互 |
|
|
请注意这些最低功能并不需要使用特别的技术,比如 EAI 中间件、Web 服务、J2EE 或 XML。这些技术的使用非常接近也非常符合需求,但是不必强制要求使用它们。相反,最低功能几乎只需简单地使用 SOAP/HTTP 和 WSDL 就可以实现(当然不是所有的情况都这样):
- URL 寻址和现有的 HTTP 和 DNS 基础架构提供了一个具有路由服务和位置透明性的“总线(bus)”。
- SOAP/HTTP 支持请求-响应(Request-Response)通信规范。
- HTTP 传输协议被广泛地使用。
- SOAP 和 WSDL 是开放、与实现无关的服务通信和连接模型。
然而,这些 SOAP/HTTP 和 WSDL 的基本应用只是点到点(point-to-point)的集成,并不能实现一些 ESB 需要的关键功能:
- 目前还没有用于控制服务寻址和命名的管理功能。服务名称通过每个适配器单独进行控制的,服务路由控制则分散在由服务客户端调用的地址、HTTP 基础架构和分配给适配器的服务名称之间。
- 虽然这种方法依赖于实现细节,但是它往往并不能使服务实现的替代变得简单;服务请求者代码(也可能是开发工具生成的)通常通过特定地址 的特定协议直接绑定到具体的服务提供者实现。如果想要用另一个服务实现来替代原来的服务实现,就需要修改应用程序代码并重新部署这些代码。
当然,在许多甚至是大多数情形中往往需要其他的功能,并且这种需要变得越来越常见。特别地,不管是现在还是以后,下面的需求类型可能会导致更复杂高级的技术的使用:
- 服务质量和服务级别功能。
- 高级 SOA 概念,例如服务编排、目录、转换等等。
- 按需操作环境需求,比如管理与自治功能以及基础架构智能功能。
- 跨越具有不同所有权的多个网络、多个协议以及多个域的真正意义上的异步操作。
ESB企业服务总线的更多相关文章
- ESB 企业服务总线
整理的OSChina 第 38 期高手问答 —— ESB 企业服务总线,嘉宾为@肖俊_David . @肖俊_David 恒拓开源架构师,热衷于JAVA开发,有多年的企业级开发经验.曾参和设计和开发基 ...
- 服务端高并发分布式架构 ESB 企业服务总线
服务端高并发分布式架构演进之路 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000018626163 ESB 企业服务总线讲解 ht ...
- 企业服务总线ESB
# 企业服务总线ESB 由中间件技术实现并支持SOA的一组基础架构,支持异构环境中的服务.消息以及基于事件的交互,并且具有适当的服务级别和可管理性. 通过使用ESB,可以在几乎不更改代码的情况下,以一 ...
- 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能
完全国人自主研发原创的智能软件路由器即将发布: 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能 智能软件路由器 BDS 简要介绍 http://kan.weibo.co ...
- 企业服务总线Enterprise service bus介绍
企业服务总线(Enterprise service bus). 以往企业已经实现了很多服务, 构成了面向服务的架构,也就是我们常说的SOA. 服务的参与双方都必须建立1对1 的联系,让我们回顾一下SO ...
- 【转载】企业服务总线Enterprise service bus介绍
企业服务总线(Enterprise service bus). 以往企业已经实现了很多服务, 构成了面向服务的架构,也就是我们常说的SOA. 服务的参与双方都必须建立1对1 的联系,让我们回顾一下SO ...
- 面向服务的SOA架构与服务总线ESB
之前的软件的开发主要是面向对象的编程架构 方法---对象---模块---组件---服务,感觉现在的开发的主流的软件架构的设计思想都是对其进行重用,只不过范围越来越大,有一个系统之间进行通信到多个系统之 ...
- SOA实践之基于服务总线的设计
在上文中,主要介绍了SOA的概念,什么叫做“服务”,“服务”应该具备哪些特性.本篇中,我将介绍SOA的一种很常见的设计实践--基于服务总线的设计. 基于服务总线的设计 基于总线的设计,借鉴了计算机内部 ...
- WisDom.Net 框架设计(二) 服务总线
WisDom.Net 框架设计--服务总线 1.Soa 简介 soa 就是面向服务的体系结构 是一个组件模型,不同的组件之间通过定义良好的接口联系起来.就像盖房子一块砖头一块砖头的砌墙,一片一 ...
随机推荐
- html-文件上传设置accept类型延时问题
今天在做文件上传时,采用了jQuery的upload插件,使用过程中发现了一个很有意思也很头疼的问题. 上传按钮,第一次点击时瞬间就可以打开文件选择框,之后再点击则需要等待恐怖的8s以上. 百度 ...
- SQL面试题之行转列
典型的课程表: mysql> select * from course; +----+------------+----------+------------+ | id | teacher_i ...
- Vue2.5开发去哪儿网App 第三章笔记 下
1.样式的绑定 我们可以传给 v-bind:class 一个对象,以动态地切换 class 例如: :class="{activated:isactivated}" 上面的语法 ...
- vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件
vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...
- Java读取文件加锁代码Demo(利用Java的NIO)
本博文部分转载于:http://blog.csdn.net/wangbaochu/article/details/48546717 Java 提供了文件锁FileLock类,利用这个类可以控制不同程序 ...
- java和js获取当前天之后或之前7天(任意)日期
一.获取过去第几天的日期(- 操作) 或者 未来 第几天的日期( + 操作) /** * 获取过去第几天的日期(- 操作) 或者 未来 第几天的日期( + 操作) * * @param past * ...
- Redmine 删除 project 中的 public 选项
缘由:由于manager的错误设置,导致本不该public的项目设置成public 诉求:去除项目新建及设置时的public勾选 1.查找日志 由于redmine是拿ruby编写的,且主页等都是由ht ...
- Jenkins邮箱设置
首先需要在系统管理--系统设置中设置系统管理员邮件地址: 然后在邮件通知里设置用户名密码,可以发生测试邮件 这里需要注意的是上面的系统管理员邮件地址必须和用户名一致 还需要注意的是测试邮件可能被当做垃 ...
- 工具-CocoaPods安装和使用及卸载
CocoaPods是iOS最常用的第三方类库管理工具,绝大部分有名的开源类库都支持CocoaPods. 我们在使用gem更新的时候,经常会为速度抓狂,其实gem默认的源是https://rubygem ...
- jquery控制input只能输入数字和两位小数
jquery代码 function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字" ...