这听起来有点刺耳,但基本上如果你需要一个 ESB,你就会知道你需要一个 ESB。
对于大多数用例,ESB 是寻找问题的解决方案。它是为大多数场景设计的软件堆栈。大多数人根本没有做足够多的处理来保证它。“企业”的“E”在这里值得注意。
在一个简单的情况下:
tail -F server.log | grep SEVERE >> severe.log
这是 ESB 场景实例的一个简单示例。
“但这只是一个 UNIX 命令管道!”
对,就是这样。
“ESB”部分是“|” 和“>>”
ESB 是运行时,您可以在其中将模块链接在一起、监控流量、设计各种古怪的场景,如扇出和连接等。
ESB 以拥有一堆连接器来读取一堆源并写入一堆目的地而著称。它们以使用相当粗略的逻辑块编织更复杂的图形和工作流来处理而著称。
但大多数人通常做的是:
input -> DO_STUFF -> output
使用 ESB,他们可以获得:
ESB[input -> DO_STUFF -> output]
在野外,大多数管道根本没有那么复杂。他们往往有一个不可重用的逻辑,人们倾向于将它整合到一个单一的逻辑模块中。
好吧,哎呀,你可以用 Perl 脚本做到这一点。
ESB 中的长管道往往效率低下。有大量数据进出通用模块的编组(因为您很少使用二进制有效负载)。
因此,比如说,CSV 进入,转换为 XML,对其进行处理,输出 XML 以作为 XML 输入到另一个步骤,XML 对其进行编组、处理、将其转换回 XML 以进行又一个步骤。冲洗并重复,直到 CPU 达到 400%(多核 FTW)。
然后有人提出“嘿,如果我将这些模块拖放到一个例程中,我们将跳过所有这些 XML 垃圾!”,最终得到“输入 -> DO_STUFF -> 输出”。
对于大型系统,有很多需要进行临时、临时集成的 Web 服务,它们可以很好。如果您从事的业务很多,那么它们可以很好地工作。当您拥有数十条管道时,它们可以帮助管理它们的运营方面。
但是对于复杂的流水线,如果您有很多步骤,那么除了原型设计之外,这可能不是一个好主意,尤其是在涉及任何实际体积的情况下。请注意,您可能没有任何选择,这取决于您正在集成的系统。
如果没有,如果你有一个单一的界面,你需要站起来——那就去做吧。用 Perl、Java、C# 等任何方式来做。不要用完并积累一些奇怪的 100MB 基础设施和复杂性,您现在可以学习、掌握和维护这些基础设施。
所以,再一次,如果你需要一个 ESB,你会知道的。真的。您将拥有由不同的东西组成的任何系统,您会与之抗争,与同事谈论所有这些东西是多么痛苦,您会偶然发现一些指向某个供应商的站点的链接并阅读一份白皮书然后说“就是这样!”,但如果你还没有这样做,那么你不会错过任何东西。