ESB 企业服务总线
整理的OSChina 第 38 期高手问答 —— ESB 企业服务总线,嘉宾为@肖俊_David 。
@肖俊_David 恒拓开源架构师,热衷于JAVA开发,有多年的企业级开发经验。曾参和设计和开发基于FuseESB 企业级服务总线系统,对FuseESB企业级服务总线以及内嵌的Camel/ActiveMQ 有深刻的理解。
ESB 全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。
ESB 相关的开源软件:http://www.oschina.net/project/tag/333/esb
主要有价值的问题整理如下:
1、先简单介绍下 ESB 的应用场景吧,相信很多人还是不太了解 。
肖:一般用在企业内部业务系统比较多,相互之间调用比较复杂,接口的维护花费比较大,并且不同的系统采用了不同的开发平台、传输协议、数据格式等,这种情况下就需要考虑使用ESB了 。
2、这么庞大的一个系统,设计时候遇到的难题及解决方法是什么?在系统性能上从那些方面优化?
肖:主要体现在各业务系统数据的整合/ESB路由的安全/流量控制等方面。 性能方面是这些方面的优化:负载均衡/应用服务器集群/缓存/数据库的读写分离/Restful WS/WS接口数据的压缩/消息的异步传输/。具体可以参考此文档http://www.oschina.net/doc/593。
3、对于大并发的实时交易的系统,选用ESB作为数据总线,其性能如何?在线人数100万,并发1000左右的交易,基于WS与ESB进行对接,中间不介入MQ 。
肖:根据我们对Fuse ESB的性能测试情况,直接访问WS与通过ESB来访问WS,性能影响不大,当然具体的性能损耗,还与你采用的ESB产品有关!我们目前做的项目,部署了两台ESB,前面通过LVS做负载均衡,调用WS的TPS可以达到 600-800左右。
4、ESB的具体应用及其担任的角色是什么呢?
肖:中介、路由转发、格式转换、协议转换、安全控制。
追问:您好,针对于您说的路由转发,可否再阐述下,
肖:就是说路由转发的机制,可以是业务人员定义的,由业务人员来定制转发的流程。
5、ActiveMQ 比较适合哪些企业应用场景?能否举个例子简单说明下,体现使用了ActiveMQ的价值。
肖:ActiveMQ主要优势体现在消息的异步/推送上, 提供了多种语言的客户端。它可以用于异构系统的整合,如我需要向其它系统推送一个消息,只需要把消息发送到MQ服务器,便可以去做其它事情,MQ服务器来保证其它系统数据的接收;另外,系统包含大量的业务日志数据,也可以考虑使用MQ来异步处理。
追问:MQ服务器一般采取哪些部署方案呢?对于处理大量业务日志,单台MQ服务器是否足够?
肖:看机器性能, 我这边性能测试 4核/4G内存/linux,MQ的收发大概可以到5000条/秒。如果有高可用的需求,需要做MQ集群。
追问:你是说先把日志内容发给MQ,再由MQ发送给日志系统?
肖:是的。
6.请问实际的安全问题是怎么处理的,给点思路,谢谢。
肖:在ESB的路由程序中,加入安全认证机制。如用户名/密码认证,访问控制认证等。MQ的安全认证,可以通过安全插件来实现。
追问:谢谢哈,那我还想了解下路由程序的大概作用,是不是就是处理请求,使其匹配业务逻辑的那种?
肖:具体可以参考此文档,第二个案例 http://www.oschina.net/doc/593 。
7.能不能介绍下现在主流的esb产品. 包括商业和开源的?
能不能重点介绍下fuse产品,要是直接部署使用的话,有什么要注意的.
fuse好像是基于osgi的.话说osgi好像比较难搞呀.
个人能不能提供咨询服务?
肖:商业主要有 IBM/ORACLE ESB,高达6/700W 的单机许可费。开源的有ServiceMix/Fuse/JBOSS/Mule 等ESB产品。 ServiceMix/Fuse ESB 4.X以后是基于OSGI架构的,提供了很好的扩展性,上手是有点难度。目前很多产品都在往OSGI靠拢,如JBOSS AS 7。 谈不上咨询,大家互相交流学习。
8.如果所有的服务接口都接入ESB,ESB怎么保证安全服务,如果ESB挂掉,那所有的应用系统也无法服务了,加一些缓存集群是否能彻底解决这样的问题,可否做到我调用一台机器时那台机器挂了,直接将服务切到另一台机?
肖:可以部署多台ESB集群,在ESB前面可以通过F5/LVS等来做负载均衡,若是LVS,可以通过心跳来检测当前ESB的服务状态,若是一台出现宕机情况,可以把请求转发到其它ESB 。
9.问个具体点的问题,我做了个实验项目,架构是这样的:webapp+serviceMix,需要在webapp端控制路由的部署和启停。
部署就是将bundle放到相应的文件夹下了,命令通信还没实现,找了资料(http://svn.apache.org/repos/asf/karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java)是用ssh实现的,
不知道除了这个还有没有其他更好的方法。另外,部署不知道还有没有其他方法。
肖:这种是通过远程SSH,来管理ESB控制台,控制bundle的启动和运行。你可以参考下 Karaf的 webconsole是如何做的bundle管理。
追问:谢谢,借此机会多问一下,想请问下除了用ssh远程管理esb外,还有没有其他方案可以让web与esb结合,比如在webapp中集成karaf和camel可行不?另外apache ode已经与新版本jboss esb不兼容了,你们是如何做webservice编排的?多谢了~
肖:ESB 部署bundle,bundle集成Camel,服务编排用Camel 的 EIP 。
追问:谢谢,个人认为Camel EIP不太适合做服务编排,虽然有java DSL,还是没有BPEL合适。现在在用bpel-g 。
肖:bpel是基于SOAP协议的,会占用大量带宽。
10、想问一下开源的esb选择哪个比较好,现在在openESB和WSO2 esb中犹豫,希望得到您的指导。
肖:这两种ESB我还未使用过:),建议你用主流ESB。
11、ESB能够提供什么服务,能够帮助解决问题1中的这些问题?为什么要使用ESB?如果不使用,其实没什么问题,对不对?它最大吸引力在哪里?
肖:1、多系统之间的互相调用会造成网状结构错综复杂 。
2、接入ESB后,服务都集中在一处调用,原系统如果是以ws公开的服务,经过esb包装之后,可以公开称多种协议适配各种客户系统调用 。
3、ESB可以统一的进行日志、安全和权限以及SLA治理,很方便进行控制。
4、ESB作为众多系统的入口,还可以很方便的在一处实现跨系统的流程整合和编排 。
12、除了 Redhat 和 JBoss 的文档,还有什么好的 Fuse ESB 学习资料吗?
肖:很多,Fuse ESB集成了很多开源项目,如Karaf/CXF/ActiveMQ/OSGI等,这些你都需要有所了解,去他们的官方有文档,书籍方面 你可以参考 Open Source ESBs In Action不过版本有点老了。
13、在医院的药品管理系统、挂号系统、医生/护士工作站、财务等各种his系统当中esb可以扮演什么角色?或者说他适用这种环境吗?有木有类似的项目?哈哈,我是业余前端,问得不好还请见谅。
肖:可以适用,接口都可以接入ESB。
14、activimq用topic还是queue?对于客户端向ESB发送数据需要返回值的情况,对于activimq 有什么好的解决方法没?
肖:目前好像还没好的办法,可以创建一个返回队列来实现 JMSReplyTo 。
other:既然对于请求需要有返回值,这属于RPC的范畴了。可以基于 Camel 做 RPC。
15、esb对性能是不是有很大影响,刚用,发现速度会差一半.
肖:看不同的ESB产品 ,Fuse ESB我们做性能测试,性能损耗是很小的。
16、另外想咨询:
1、在设计数据变更推送的机制,我们目前是在数据表上加触发器有字段更新写到中间表记录,然后一个定时任务去扫描这个中间表,然后形成特定的发送记录。
2、ActiveMQ 在大量消息下性能是否可靠?
3、ESB接入多个系统后,是直接访问源系统的数据库,还是在中间库做一份镜像?如果是直接访问数据库,事务控制等应该怎么做?如果是中间库,如何保证数据的实时性呢?
肖:大量消息下,消息的可靠性是没问题的,MQ做了大量的工作保证消息的可靠性,如消息存储在文件/客户端的确认机制等,性能上要根据实际的场景调优MQ的性能。 我们是把其它业务系统的核心数据抽取到本地库中,通过Kettle ETL+quartz定时抽取。如果实时性比较高,可以考虑数据库复制,触发器等。
17、现在项目是不是已经整合到JBoss ESB中了呢?相关的文档都需要从JBoss上下载吗?
肖:http://www.jboss.org/products/fuse http://fusesource.com/products/enterprise-servicemix/
18、想问下在ESB中,在多个系统交互时,如何控制数据的一致性呢?遇到异常如何回滚呢?
肖:事务的补偿机制。
追问:ESB中有实现事物补偿的么?那些资料可以参考呢?
19、现在的 ServiceMix 支持部署 WAR 应用了吗?
肖:支持。
追问:这个回复过于简单了。OSGI-4.3引入了WAR支持。WAR首先被转换成一个bundle(WAB),然后启动。在这个过程中,很容易出现类库冲突,导致启动失败。详情请参考osgi.cmpn-4.3.0.pdf("OSGi Service Platform Service Compendium")中的"Web Applications Specification"章节 。
另外,OSGI也有自己的适用场景,如果没有模块化需求,不应该引入OSGI。单纯的WAR项目就没有必要改造成OSGI项目。
肖:除了 OSGi,模块化还有什么别的选择?SOA?
话说 Spring 不支持 OSGi 的原因是什么呢?Hibernate也是用Gradle构建,照样在努力地向 OSGi 靠拢。
追问:应该是吧。我认为,OSGI 也可以认为是广义上的 SOA . Spring 支持 OSGI 的啊,你是不是看错了?
肖:InfoQ 上等过 SpringSource 打算放弃支持 OSGi 的新闻。
在最新的版本里面已经移除了 OSGi 的 manifest 文件,我是从 Maven 官方库里面下的 。
追问: 你这么一说我也记起来了。之前 Spring 是支持 OSGI 的,动态模块还是 spring 搞出来的。放弃支持是他们的决定吧,我觉得OSGI的复杂性应该是其中的重要因素。
20、消息能支持多大呢?能否支持10M以上文件推送?
肖:你指的MQ?
追问:对, ESB 一般不包括MQ这样的消息中间件吗?
肖:可以试试 MQ的BlobMessage;或者把文件拆分然后分组发送。对于太大的文件不建议使用MQ来传输。
21、关于分布式日志采集,一般说可以采用ActiveMQ/MetaQ等实现。我的疑问是:网络写速度比不上本地文件系统写,实践中怎么解决这个问题?
肖:分布式日志采集,这里没看懂。是对分布式系统的日志采集?
22、为什么不把部分接口服务以RESTful方式暴露,看你里面全是webservice。
肖:是Restful风格的WS。
23、ESB和RPC(比如Dubbo/Corba/ICE)等适用场景,能介绍一下吗?谢谢。
肖:ESB和RPC是完全不同的两个概念,PRC是点对点的消息传递,ESB是所有的服务接口都接入到ESB,通过它来转发 。
24、正好我也是在做ESB,我想请教您,对于Mule ESB 有所了解吗? 或者您是否能提供一点你选用Fuse ESB方案的考虑吗?
肖:这个是我们ESB技术选型的一部分资料:
Mule ESB拥有了不错的用户量,且比较容易上手,但其由于其企业版是商业产品,相需要收费,且架构本身并没有成为规范,因此,若在没有源码的情况下大规模使用,一旦出问题,可能需要专业技术团队的支持。另外,Mule之前是没有自己的消息中间件的,且不支持热部署,收购Mule MQ之后才真正成为一个正式成熟的ESB。
Fuse ESB很好的支持了JBI规范,其下产品均是由Apache下的著名开源项目组合而成。其中若干框架均已为开源世界广泛应用,比如Apache Camel和Apache ServiceMix,尤其是其中的Apache ActiveMQ和Apache CXF,且ServiceMix 4之后基于OSGi架构,更能迎合企业动态化、模块化的需求。此外,Fuse有丰富的文档支持,加上其主要框架为大多开源人士所熟知,技术上可控性强,风险较小。
25、问题如下:
1、同步接口调用,怎么处理?有一些需求要同步返回调用结果。
2、想涉及一些支付业务的服务,事务怎么处理?
如:下订单业务,首先要调用“商品模块服务”查询库存,然后才能决定下单业务是否可以继续,如果库存充足,则要:
1)调用“商品模块服务”锁库 。
2)调用“订单模块服务”保存订单。
他们之间的事务怎么保证?能否给些思路。
肖:ESB 只是做了路由转发功能,除了MQ,大部分都是同步的。Camel内部也做了一些事务的保障机制, 若是中间牵扯到了 多系统流程服务的编排,最好定义好发生异常后事务的补偿机制。
26、能不能多讲一下ESB的应用场景和不适合的应用场景。
肖:涉及到多系统整合或者服务流程整合,就要考虑是否需要上ESB。
27、FuseESB 稳定版本是哪个版本?下载时候是 6.0 版本包,怎么官方文档是 7.1 ,还没搞明白。
肖:7.1是没被收购之前的,现在被redhat收购,改名叫 Jboss Fuse。
28、将各种异构的子系统整合,由一个统一的中间件调度服务的架构就可以称作ESB吗?
肖:这个是ESB的核心功能,还包括服务编排/消息增强/协议转换/格式转换/安全控制/服务质量等。
29、ESB怎么保证消息的可靠传递?
肖:如果是JMS消息,ESB中的MQ会持久化该消息到文件或者数据库。若是其它协议的消息,发生异常或者其它自定义状况,ESB会捕获到该状况然后经过处理告诉客户端。
30、您好,能否比较几种常见的ESB产品(集),mule esb/cordys/Jboss esb/open esb ? 它们分别的适用场合是什么?特别是您对Cordys的看法?
肖:ESB的功能都差不多,你要更详细的比较:可以去看看 Forrester研究公司(http://www.forrester.com),在2011年第二季度对“企业级服务总线”做了一个详尽的研究报告,比较了IBM、Oracle、Progress Software、Software AG、Tibco、FuseSource、MuleSoft、Red Hat和WSO2等诸多商业和开源厂商的ESB产品。
31、ESB 对企业部门之间的信息孤岛的破解,是否有帮助,如果有的话,处理策略是什么?
肖:造成信息孤岛的原因主要是系统之间通讯不畅,把各系统对外的接口都统一连到ESB即可,避免各系统的相互调用造成复杂的网状结构。
other:n*n 和 1*n ,这种在系统庞大的企业中,是非常有价值的。
jack:谈到ESB两大主流是Mule和Camel。Mule用户多一点。不过Camel接口更多,而且迭代速度更快。试过Camel+karaf发现对数据库支持这块osgi略差一些。于是采用Camel+spring。使用下来各方面都很出色,推荐此方案。
32、请问ActiveMQ用的什么版本?怎么整合的?如何保证数据消费的可靠性,有没有出现丢消息或者假死的问题?
肖:Fuse ESB默认就集成ActiveMQ,未出现你说的现象,不过如果发的太快,收的太慢会出现你说的情况,可以在接收端增加负载来解决 。
33、esb如何解决多系统的数据一致性问题?例如在转账这种需要跨数据库事务的场合下怎么搞定?
肖:可以定义流程发生状况的补偿机制,一旦服务流程流转中出现问题,所有执行过的活动都按特定的逻辑进行补偿 。
ESB 企业服务总线的更多相关文章
- ESB企业服务总线
ESB是企业服务总线(Enterprise Service Bus)的缩写,是中间件技术与Web Service等技术结合的产物,也是SOA系统中的核心基础设施.ESB就是一个服务的中介,形成服务使用 ...
- 服务端高并发分布式架构 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 就是面向服务的体系结构 是一个组件模型,不同的组件之间通过定义良好的接口联系起来.就像盖房子一块砖头一块砖头的砌墙,一片一 ...
随机推荐
- HTTPS 详解
1) HTTPS是什么 https 是超文本传输安全协议的缩写.HTTPS主要思想是在不安全的网络上创建一种安全的信道,并且可以在使用适当的加密包和服务器证书可被验证且可被信任时候,对窃听和中间人攻击 ...
- 2_Linux_文件和权限处理命令
三.Linux的常用命令 1.文件命名规范 1)除了/之外,所有的字符都合法,文件名中不能包含/符号 2)有些字符最好不用,如空格.制表符.退格符和字符@#$&() 3)避免使用.作为普通文件 ...
- 人工智能2:智能Agent
一.Agent基本定义 基于理性行为的Agent是本书人工智能方法的核心.Agent由传感器.执行器两个重要元件组成,具有与环境交互的能力,其能力是通过分析感知序列,经过Agent函数映射到相应的行动 ...
- 异步tcp通信——APM.Core 服务端概述
为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...
- SpringMVC08转发和重定向
public class User { private String name; private Integer age; public String getName() { return name; ...
- RTX管理器服务运行状态空白
A)打开RTX管理器安装目录下的bin文件夹,运行convert.bat 右键计算机——管理——服务——找到以RTX开头的服务,按RTX_ConfigCenter.RTX_HTTPServer. RT ...
- 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15
Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...
- A Bug's Life(hdu1829种类并查集)
题意:有一群虫子,现在给你一些关系,判断这些关心有没有错 思路:向量种类并查集,下面讲一下向量的种类并查集 本题的各个集合的关心有两种0同性,1异性,怎么判断有错, 1.先判断他们是否在一个集合,即父 ...
- 【原创】用shell+ant构建apk
#!/bin/bash ######################################################################### ## $PRODVERSIO ...
- HTML5学习参考资料整理
给大家推荐一下学习研究HTML5必备的一些个网站,更加有利于大家对HTML5的学些和研究.如果各位童鞋还有更多的,欢迎投递资源给我们,也可以支持 我们,让我们利用大家的力量收集更多的HTML5学习资料 ...