10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

MuleSource CTO 给出是否选用 ESB 的检查清单

  • 2009-07-10
  • 本文字数:1436 字

    阅读完需:约 5 分钟

在 InfoQ 的网站上已经有了很多关于 ESB 的新闻和文章。然而,只要 ESB 还是当今企业应用领域的热点,关于它的报导肯定还会延续下去。最近,MuleSource 的 CTO Ross Mason 发表了一篇题为《用还是不用 ESB》的博文,他在文中给出了是否在项目中选用 ESB 的检查清单。

这篇文章并非 Ross Mason 的心血来潮之作,而是对 ThoughtWorks 员工 Erik Dörnenburg 的博文《让 ESB 的痛苦曝光》的回应。在这篇博文中,Erik 描述了一个典型的“简单问题复杂化”的例子:使用 ESB 来集成两个应用,而且只有两个。采用 ESB 的理由是架构师期望能让程序适应未来可能出现的变化。这似乎没什么问题。然而,在和项目的发起人经过一番交流之后,Erik 开始怀疑 ESB 的必要性;开发者对此的反应则是“只有痛苦”,ESB 不仅没有给项目带来好处,反而使它有延期的危险。通过对比引入 ESB 和没有 ESB 情况下的两副图,Erik 展示了引入 ESB 所带来的复杂性,并认为此项目中的 ESB 纯粹是“简历驱动开发(Resume-Driven Development)”的结果,这种开发方法的唯一目的就是要得到一份漂亮的简历(CV)。

在引用完 Erik 的博文之后,Ross Mason 给出了用于判断是否选用 ESB 的检查清单:

  1. 你是否在集成至少 3 个应用 / 服务?如果你只需要在 2 个应用之间进行通信,使用点对点集成会更简单。
  2. 你是否真的需要在未来插入更多的应用?尽量避免架构中有多余之物。更好的方式是保持简单,然后在需要时再重新构架。
  3. 你需要使用的通信协议类型是否多于 1 种?要是你只使用 HTTP/Web 服务或只使用 JMS,那么你就无法从 Mule 提供的跨协议消息传递和转换中得到任何好处。
  4. 你是否需要消息路由功能,如分裂(forking)和聚合(aggregating)消息流,或基于内容的路由?许多应用并不需要这样的功能。
  5. 你是否需要发布服务供其他应用消费?这非常适合用 Mule,因为它提供了一个健壮和可伸缩的服务容器,但是在 Erik 的用例中,他们所需要的只是一个来自他们前端 Struts 应用的 HTTP 客户端。
  6. 你是否有超过 10 个的应用要集成?避免大爆炸式的项目,考虑把这种项目分割成更小的块。首先把你的架构在 3 到 4 个系统中进行试验,在它对其他系统产生影响前把所有问题都搞定。
  7. 你是否真的需要 ESB 的伸缩性?应用的伸缩性需求非常容易被过度构架。Mule 对伸缩性的支持使它成为了“内建”伸缩性的流行选择。但是,这要付出代价,因为你给架构中增加了一种新技术。
  8. 你是否确切地理解了架构的目标?厂商往往把 ESB 描述成一个盒子,有许多应用环绕在其周围。实际上,这并不是它的工作方式。围绕集成点、协议、数据格式、IT 基础设施、安全等一开始有大量细节需要了解。从小做起有助于控制问题的范围,使莫名其妙的问题降至最少。在你了解你的架构并适当地划定范围之前,你都无法真正判断 ESB 是否对你合适。
  9. 通常来说,总要验证产品解决方案是否符合你的需要。不要选择 ESB 或其他任何技术,仅仅因为:
  • 让你的简历好看
  • 虽然今天我不需要这些特性,但是将来有一天我可能会用到它们
  • 我和销售们的老大一起渡过了一个相当不错的高尔夫周末

对于 Ross 的清单,Erik 评论说

绝佳的检查清单,我完全同意;只要出于合理的目的使用象 Mule 这样的 ESB,就能极大地简化项目。然而不幸的是,我们仍然可以看到许多架构甚至连你单子上的第一条都通不过。而且,这正是我在写我的那篇文章时所想到的。

孙子曰:“兵无常势,水无常形”。ESB 的存在并非就意味着你非得在项目中使用它。Ross Mason 的清单可能不太全面,可能带有个人偏见,但是它绝对有助于缓解“ESB 强迫症”。

2009-07-10 19:312267
用户头像

发布了 255 篇内容, 共 65.9 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

LeetCode题解:938. 二叉搜索树的范围和,DFS,详细注释

Lee Chen

算法 LeetCode

云数据库TiDB使用过程注意项及改进建议

TiDB 社区干货传送门

6.x 实践

2022年最新数据库调查报告:当前企业使用率第一的中国数据库是什么?

墨天轮

数据库 TiDB oceanbase 国产数据库 达梦数据

拜占庭将军问题和 Raft 共识算法讲解

京东科技开发者

算法 分布式系统 拜占庭将军问题 raft共识算法 日志同步

谈JVM参数GC线程数ParallelGCThreads合理性设置

京东科技开发者

线程 JVM cpu GC线程 ParallelGCThreads

普通单双面板的生产工艺流程:图形转移

华秋电子

高复用性自动化脚本设计实践

京东科技开发者

自动化 测试 框架 脚本重构 高复用

Slurm集群调度策略详解(2)-回填调度

慕冰

Slurm 回填调度

【2.10-2.17】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

基于 Flink 的小米数据集成实践

Apache Flink

大数据 flink 实时计算

火山引擎DataTester:A/B测试,让企业摆脱广告投放“乱烧钱”

字节跳动数据平台

大数据 AB testing实战 企业号 2 月 PK 榜

HIFIVE音加加×筷子科技,内容创作如何再加“筷”一点

曲多多(嗨翻屋)版权音乐

音乐 版权 视频创作 AI剪辑

信通院发布“2023可信AI案例 知识计算应用优秀案例”, 百度知识中台三大案例入选

极客天地

模块6 拆分电商系统为微服务

KING

设计模式第七讲-外观模式、适配器模式、模板方法模式详解

C++后台开发

设计模式 后端开发 Linux服务器开发 适配器模式 C++开发

ChatGPT搜索风暴

OneFlow

人工智能 深度学习

# drainer binlog 清理机制 源码详解

TiDB 社区干货传送门

集群管理 管理与运维

GGX发布全新路线图,揭示具备 Layer0 特性且可编程的跨链基建生态

股市老人

自定义HarmonyOS启动页组件

白晓明

HarmonyOS 自定义组件 OpenHarmony

Wallys|QCN9074/QCN6024/ 5G 802.11ax|Does QCN9074-5G module support W56?

Cindy-wallys

QCN9074 QCN6024

@所有人,OceanBase DevCon • 2023来啦!

OceanBase 数据库

数据库 oceanbase

借助 APISIX Ingress,实现与注册中心的无缝集成

API7.ai 技术团队

服务注册与发现 服务发现 APISIX Ingress Controller

TiDB在转转公司的发展历程

TiDB 社区干货传送门

实践案例 版本升级 集群管理 管理与运维

iOS tableView添加group分组

刿刀

ios UITableView

故障案例:MySQL唯一索引有重复值,官方却说This is not a bug

GreatSQL

OceanBase 4.0解读:兼顾高效与透明,我们对DDL的设计与思考

OceanBase 数据库

数据库 oceanbase

理论+实践,揭秘昇腾CANN算子开发

华为云开发者联盟

人工智能 AI 华为云 企业号 2 月 PK 榜 华为云开发者联盟

文盘Rust -- 本地库引发的依赖冲突

TiDB 社区干货传送门

开发语言

【立哥】【每日一个小知识】写遗嘱把部分财产赠给第三者,遗嘱有效力吗?

Lee Chen

知识

MuleSource CTO给出是否选用ESB的检查清单_SOA_胡键_InfoQ精选文章