文档章节

如何选择ESB

yzbty23
 yzbty23
发布于 2016/08/16 17:10
字数 2435
阅读 214
收藏 5
点赞 2
评论 0

什么是ESB

企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的。SOA描述了一种IT基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构相互耦合。一个ESB是一个预先组装的 SOA实现,它包含了实现SOA分层目标所必需的基础功能部件。

在企业计算领域,企业服务总线是指由中间件基础设施产品技术实现的、 通过事件驱动和基于XML消息引擎,为更复杂的面向服务的架构提供的软件架构的构造物。企业服务总线通常在企业消息系统上提供一个抽象层,使得集成架构师能够不用编码而是利用消息的价值完成集成工作。

企业服务总线提供可靠消息传输,服务接入,协议转换,数据格式转换,基于内容的路由等功能,屏蔽了服务的物理位置,协议和数据格式。

什么是SOA

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用 中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

实现SOA的常用技术

实现SOA架构的常用技术有Web Services,JMS和BPEL等。

  • ESB技术。企业服务总线(Enterprise ServiceBus,ESB)是构建基于SOA解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持SOA的一组基础架构功能。它是一种为进 行连接服务提供的标准化的通信基础结构。基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,并可帮助企业对业务流程进行设计和模拟。对 每个业务流程实施控制和跟踪、分析并改进流程和性能。目前各大IT公司都推出了基于自己的平台工具的ESB产品,如IBM的WebSphere ESB、BEA的AqusLogic Service Bus等。除此之外,也出现了众多的开源ESB产品,如Mule、ServiceMix和Apache Synapse等。
  • web Services技术。Web Services主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。该接口隐藏了服务实现的细节,允许通过独立于服务实现、独 立于硬件或软件平台、独立于编写服务所使用的编程语言的方式使用该服务。Web Services可以通过HTTP、SOAP(XML)、SMTP等协议的组合被访问,利用标准网络协议和XML数据进行通信,具有良好的普适性和灵活 性,这使得基于web Services的应用程序具备松散耦合、面向组件和跨技术实现的特点例5。Web Services技术的主要目标是在各种异构平台的基础之上构建一个同样的、与平台与语言无关的技术层,各种应用都可以靠这个技术层来实施彼此的连接和集 成。
  • JMS技 术。Java消息服务(Java Message Ser.vice,JMS)是访问企业消息系统的标准API,是Sun公司提出的Java消息服务规范,是用于访问消息系统的不依赖于某个具体厂商的 API,它提供给应用程序创建、发送、接受和渎取消息的接口,具体实现可以不同。JMS技术采用异步通信模式,发送消息者将需要变更的数据消息提交到消息 平台后,就完成了自己的任务,就可以进行其他的操作。不需要等待服务器端的消息处理结果。这时即使网络出现故障甚至服务器崩溃也不会造成数据的丢失或不一 致,消息会保存在消息队列中直到被最终接收。

SOA的环境

从下面的图中来看SOA是实现架构:

                        图:SOA部署环境图

我们从下向上看:

  • Business Systems:最下边也就是我们的业务系统,可以是ERP,可以是CRM也可以是OA等我们正在使用的业务系统。
  • Low Level Services:低层次服务,就是我们直接暴露出来并没有经过加工处理的服务,比如说一个数据的抽取、一个业务模块的管理,也就是比较细粒度的服务。
  • Composite Services:综合服务,可以理解成更高层次的服务,因为接口暴露出来后并不是直接给应用程序调用或者是给其它服务使用,当然那样也是可以的。我们对 低层次的服务进行必要的封装,形成高层次的服务,好处是显而易见的,安全性、应用逻辑的封装,必要的负载,也就是说,更高层次只需要关心他需要的接口,至 于如何实现,通过多少细粒度的服务完成这个不是它所关心的东西。
  • Orchestrated Business Processes:业务流程,也就是我们常说的BPM,有了上边的解释,这一部分就很清晰了,对于用户来说,比如他通过互联网交话费,他只需要确认自己 已经交成功就可以了,也就是说,页面上有了相应的提示,OK,他就可以去做其它事情了,而下边需要如何处理,怎样走流程,就是按照BPM中设计好的流程执 行。
  • ESB:从图上看ESB放在了最左边,也就是上面几个应用的左边,而且全部包含在内,那么也就是说,ESB处理的就是各个层次之间的通信,包括路由、协议转换和消息传递等。
  • Presentation Services:表示层服务,其实这个就很容易理解了,也就是我们对外暴露的接口或者服务内容,可以是一个jms、一个webservice调用、甚至是一个页面。

ESB解决的问题

当你的应用像下面一样时,这个时候就需要考虑使用ESB了,如图:

                图:未使用ESB的应用架构

各个应用系统之间的调用形成了一张网,没有逻辑,随着业务的增加,维护简直就是一场恶梦。

                图:使用ESB中介和代理之后

 各个应用的逻辑很清晰,每个应用都只需要关心如何暴露自己的服务,而调用的应用只需要知道如何调用服务,至于怎么做,去找谁,则完全交给ESB来完成。

开源ESB

以下是几个比较流行且好用的开源的esb:

  • Mule ESB:MuleSoft是Mule ESB创建者。Mule ESB是一种广泛的开源ESB下载。
  • WSO2 ESB:WSO2 ESB旨在极端轻量型和可扩展性。它包括服务交互图形编辑和XML支持。
  • Apache ServiceMix ESB:Apache Service Mix ESB以Java业务集成为标准为基础,支持Spring。

如何选择ESB

所有的ESB产品都应该可以构建和部署服务。包括对遗留系统的整理、消息的路由、消息格式的转换、执行协议的调解等。

首先我们要看ESB是否具有以下特性:

  • 互通性
  • 抽象化
  • 资源位置的虚拟化
  • 扩展能力和管理服务
  • 是否具有平台无关性,即跨平台
  • 松耦合

等。

上面列出的往往很评估,但是ESB本身具有的特性往往更容易识别和评估。

ESB所必须具备的功能:

  • 路由
  • 协议桥接
  • 消息转换
  • 服务代理托管

扩展的功能有:

  • 资源适配器
  • 可靠的消息传递
  • 事件处理
  • 交易的完整性管理
  • 消息格式调解
  • 负载均衡
  • 消息验证
  • 能力调解

等。

其实,对于如何选择本身就是一个跟业务相关的问题,以确定你是否选择ESB以及选择什么样的esb来满足你的应用需求。

  1. 你选要集成三个或者更多的应用或服务吗?如果你需要在两个应用间通信,使用点对点集成更容易。
  2.  未来你真的需要插入更多的应用吗?如果是需要的,那么你可以选择使用ESB。
  3. 你是否需要使用不止一种类型的通信协议?如果是多种协议,那么可以选择使用ESB。
  4. 你需要象分叉和聚集消息流或者基于内容的路由的消息路由功能吗?许多应用不需要这些扩展。
  5. 你需要通过其他应用为消费发布服务吗?如果需要可以考虑选择ESB。
  6. 你拥有多于10个的应用要集成吗?如果需要可以考虑选择ESB。
  7. 你真的需要ESB的可扩展性吗?如果需要可以考虑选择ESB。

以上仅仅是列出了想到的一些问题,具体的情况还需要根据具体的需求进行分析和处理,如果简单的业务其实不必“大炮打蚊子”,毕竟合适才是最好的!

© 著作权归作者所有

共有 人打赏支持
yzbty23
粉丝 117
博文 243
码字总数 216748
作品 0
浦东
程序员
架构设计:系统间通信(43)——自己动手设计ESB(4)

============================== 接上文《架构设计:系统间通信(42)——自己动手设计ESB(3)》 5、Borker Server选择 在本文之前的三篇文章中,我们介绍了自行设计的ESB中间件的顶层设计、...

yinwenjie ⋅ 2016/08/07 ⋅ 0

架构设计:系统间通信(44)——自己动手设计ESB(5)

(接上文《架构设计:系统间通信(43)——自己动手设计ESB(4)》) 5-4、ESB-Client端的ActiveBrokerContext 本小节开始,我们将按照前文介绍的ESB-Client的核心步骤,一点一点的给出ESB-C...

yinwenjie ⋅ 2016/08/11 ⋅ 0

使用 Mule Studio 开发 ESB 应用 - Hello World

本文介绍如何使用Mule Studio开发一个简单的"Hello World"ESB应用。 第1步 - 下载和安装Mule Studio 从www.mulesoft.org下载Mule ESB Community Edition的发布包. 无需安装, 解压至本地硬盘...

红薯 ⋅ 2013/02/12 ⋅ 5

SOA需要ESB吗?

服务的监控及提供相对比较简单。最让人困惑的SOA决策是服务如何联系、服务之间应采用哪种仲裁机制。 在理想情况下, SOA中的每个服务都应符合标准的Web服务规范,健壮可靠,而且可以供需要服...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

将Mule ESB Http项目转换为Tomcat项目(3) ESB项目运行

建立好了Mule ESB Http项目,即可以开始运行,但是因为Studio maven编译存在的问题,如果直接以[Mule Application With Maven]方式运行ESB项目的话,会先将ESB项目使用maven编译成zip再部署到...

杨延庆 ⋅ 2016/06/20 ⋅ 0

将应用建在ESB上还是J2EE PLATFORM上?

将应用建在J2EE平台上,并不意味着同构。显然,数据库就是个异构。浏览器也永远是异构。完全同构的系统早已不存在。 所以,系统已经是异构的。 那么,选择的关键并不在于异构,而是在于消息机...

刘小兵2014 ⋅ 2011/08/17 ⋅ 0

IBM WebSphere ESB入门指南

[TOC] 第一章 ESB介绍 本博客介绍一款ESB产品,IBM WebSphere ESB。ESB(Enterprise Service Bus)也即企业服务总线。ESB有很多产品,IBM的IBM WebSphere就是其中一款。ESB是传统中间件技术与X...

Javahih ⋅ 2017/06/07 ⋅ 0

架构设计:系统间通信(41)——自己动手设计ESB(2)

==================================== (接上文《架构设计:系统间通信(40)——自己动手设计ESB(1)》) 4、Broker Server设计 那么如何赋予ESB中间件原子服务整合、服务路由编排的关键能...

yinwenjie ⋅ 2016/07/26 ⋅ 0

WebService服务调用方法介绍

1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法。 2 预期读者 数通畅...

数通畅联 ⋅ 2015/11/19 ⋅ 0

架构设计:系统间通信(40)——自己动手设计ESB(1)

1、概述 在我开始构思这几篇关于“自己动手设计ESB中间件”的文章时,曾有好几次动过放弃的念头。原因倒不是因为对冗长的文章产生了惰性,而是ESB中所涉及到的技术知识和需要突破的设计难点实...

yinwenjie ⋅ 2016/07/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部