什么是ESB,它有什么用?

时间:2009-02-28 02:45:53

标签: esb

在以前的工作中,有很多关于“企业服务总线”(ESB)的讨论。我阅读了关于它的概念书的部分内容,但从未真正理解如何以具体的术语实现/集成它。我熟悉SOA /排队/目录服务/等。但我不明白ESB究竟是什么。

具体的事情(服务/服务器/经纪人等)是否只是以不同的方式将所有应用程序挂钩,或者它只是设计系统的概念性方法?

非常感谢任何解释或与良好范例的链接。感谢。

7 个答案:

答案 0 :(得分:50)

这是一个相当高级别的抽象概念。中心概念是ESB提供中间件和接口,允许企业在不编写代码的情况下连接应用程序。

这可能包括调解以协调不兼容的协议,数据和交互。

所有通过的中央总线的想法为其他抽象层提供了机会。使用行业标准将其他应用程序,客户端等“插入”此总线,使得连接新服务,数据源,具有不同需求的客户变得相对容易。

实际实施

就实际实施而言,这是非常大的企业支持业务的领域。虽然这是非常流行的,但目标是通过与互联网比较在一定程度上理解的理想:

与互联网相似

一种大型通信总线,具有广泛不同的用途和数据,但都运行标准化协议。

事实上,人们可以将HTTP编写到FTP连接器,允许浏览器访问FTP站点而无需调用FTP客户端(现在通常内置在浏览器中)。

混搭

Mashups演示了一个有趣的实现 - 从旧金山当局获取一些公交路线数据,从谷歌地图和雅虎的寿司栏位置评级并运行一个简单的查询,为您提供最接近的寿司吧,加权它以便您为了更好的酒吧,我愿意再往前走一点。

所有完全不同的服务,与它们本身不兼容,但使用标准连接器(例如雅虎管),它们可以被拉到一个有凝聚力和有用的整体。

- 亚当

答案 1 :(得分:42)

免责声明:我在IBM工作并参考WebSphere ESB,这是一个旨在构建ESB的IBM产品。以下是我的意见,并不一定反映IBM的立场。

不幸的是,ESB对不同的人来说是不同的东西。

对我来说,ESB是一种可以插入SOA(面向服务的体系结构)的技术,允许您将不同的系统连接在一起。它通常执行协议转换,消息修改,路由,日志记录,充当安全网关等功能。例如,您可以使用ESB公开以前仅作为基于JMS的服务作为Web服务提供的服务。

在这方面,ESB实现(或更确切地说,出售用于构建ESB的软件 - 例如我咨询的软件)通常在技术上类似于过去被称为消息传递或排队经纪人,尽管目的有些不同,因为(正如首字母缩略词所暗示的那样)它是围绕服务而不是将消息从一个地方移动到另一个地方。这种区别在技术上有多重要,这是一个意见问题。

答案 2 :(得分:37)

我对商业ESB的经验是,它是一种过于昂贵且昂贵的技术,可以解决许多问题。 ESB将链接新系统和遗留系统,消息将通过总线传输,所有内容都可以无缝地与其他所有内容进行通信。投入一些弹性,编排,你有一个非常强大的企业应用软件。

当您尝试将它们用于实际,为总线编写,创建消息结构等的开销时,问题就出现了,可能会增加优势。作为一个高成本项目,ESB被视为解决所有技术问题的灵丹妙药,  在总线上花费的时间太多而不是在连接的应用程序/数据上。通常情况下,多个竞争标准将在同一个组织中争夺至高无上的地位,导致这些系统实际应该修复的经典技术主导的孤岛。

恕我直言,使用创建少量特定接口要好得多,通常只在需要它的系统之间使用Web服务。

答案 3 :(得分:11)

这基本上是一种设计系统的概念性方法 - 软件公司试图通过坚持上面的'ESB'标签和管理人员来销售你,因为ESB从'更高级别'看起来很好。

ESB基本上是一个MOM(面向消息的中间件),具有增加的数据模型和结构定义管理。您对该总线上的所有应用程序和适配器都有一个通用数据定义(可以是带有共享XSD的XML)。连接的任何东西必须发送它遵守此数据定义的信息。 ESB支持加载,共享和版本化此公共数据定义。 将新组件连接到ESB时,开箱即可获得比将其连接到MOM时更多的“兼容性”。该总线上的每个组件在概念上被视为“资源” - 因此引入了额外的抽象来将发送方与接收方解耦。

示例:假设您希望在标准的面向消息的中间件中将应用程序A与应用程序B连接起来,让我们来看看JMS。您与从事应用程序B的同事交谈,就主题,消息类型和字段达成一致并发送它(伪代码):sendJms(“TRADE.MSFT”,{MapMessage trader =“pete”price = 101.4 vol = 100})

如果您在面向服务的体系结构中执行相同的操作,则需要

  1. 安装附加软件
  2. 学习很多新概念
  3. 在ESB的admin gui
  4. 中定义新的Java组件
  5. 实现一些由ESB控制的接口
  6. sendJms(getDestination(),{MapMessage trader =“pete”price = 101.4 vol = 100}) - 注意目的地是从ESB注入的
  7. 第一次它可能有点痛苦,但我想你可以习惯它,就像你可以习惯EJB一样; - )

    你可以说MOM系统是'无类型'(动态结构),而ESB是'打字'(静态结构)。原始Messaging与ESB的权衡取舍类似于其他无类型/类型选择:

    • REST与SOAP
    • 使用XSD验证的未经验证的XML与XML
    • Groovy与Java
    • 解释语言与编译语言

    对于较小的项目,快速散列功能很好(例如Groovy代码),但对于较大的项目,最好有一个调试器(例如Java),在事情中断时提前发出警告并为人们设置标准 之前,他们承诺参与该项目。

    因此,如果您的项目因为检查未经验证的更改而导致太多人破坏系统而受到影响 - 转向更多结构(ESB而不是MOM)。 如果你的项目没有及时完成足够的事情 - 选择更简单,无类型的解决方案。 如果是两者 - 得到一名顾问(只是开玩笑; - )

答案 4 :(得分:4)

嗯,这取决于你问的人......很多人会说这是一个“中间件”,将各种“业务逻辑”连接在一起,以便在这些模块之间进行消息传递。我认为这是一个通用的定义,但我相信你已经通过维基百科和诸如此类的东西来到那里。

那些拥有伟大的ESB拯救世界的人会看到它是最常见的,是做所有事情的中心。大多数ESB实现都会尝试封装我们在业务软件中看到的所有重复性任务。这意味着大多数ESB负责数据传输,安全性,日志记录,协议转换,事件系统,通过Web服务进行api暴露等。

我认为尽可能清楚......希望有所帮助。

答案 5 :(得分:3)

看一下我的演讲“Spoilt for Choice - How to choose the right ESB”。

我将解释何时使用ESB,Integration Suite或仅使用Integration Framework(例如Apache Camel)。我还讨论了开源和专有ESB之间的区别。

答案 6 :(得分:2)

除了标准定义,您可以从Wikipedia获得。我发现它是一个很好的工具,用于跨多个平台和技术连接一堆遗留系统。它也是构建分布式工作流和状态管理系统(如总帐)的好工具。

然而,它的维护和扩展相当昂贵,复杂且不方便,这使得它成为用于扩展应用程序的通用工具的不良技术选择。