为什么ESB在微服务架构中被认为是坏的

时间:2018-02-21 07:45:26

标签: architecture microservices distributed-computing soa esb

在微服务架构中,自治业务服务应该直接相互通信。通信可以是同步(编排)或基于事件(编排)。 API网关可以聚合客户端的API(前端的后端)。通过微服务,我们正在寻求两个最终目标

  • 低耦合
  • 高凝聚力

这使得持续部署,细粒度扩展,快速技术适应,可重用性,可审计性更高,当然还有更高复杂性的价格。

但是,强烈建议不要使用ESB(企业服务总线)或其他中间件。微服务和ESB通常被视为竞争对手的解决方案。为什么ESB看起来如此糟糕?只要它仅用作具有一些额外监视和认证层(没有业务逻辑)的冥想通道,在微服务架构中使用它有什么问题?

1 个答案:

答案 0 :(得分:18)

我见证了两个ESB在不同公司的推出,在这两种情况下都有相同的崇高目标,只是帮助进行一些监控和认证,提供更好的"访问遗留系统。在这两种情况下,仅仅1 - 2年,ESB就成为单点故障,成为变革的瓶颈,并且通常是所有项目的障碍。

ESB太方便不使用它们。首先,您只需为要发送到某个系统的消息添加一些特殊路由,然后您就可以快速解决将某些xml消息转换为其他格式的问题,因为您可以。然后,您需要添加更多XSLT或其他任何内容,以便在客户端系统中修复太昂贵的版本更新。等等...

不久之后,在那里拥有业务逻辑。所有团队都必须与ESB团队协调所有部署,新消息甚至消息格式的更改。 会扼杀你团队的独立性(低耦合)。

正如您所指出的,微服务架构的目的是启用自主操作,不仅针对服务,还针对其团队 。这样可以快速更改。理想情况下,这意味着:

  • 避免与其他团队的任何同步点,无论是测试,推出,配置还是操作(即您必须跨职能并进行DevOps等)。
  • 避免与其他服务同步运行时。这意味着无论技术如何都避免同步调用。您应该只进行即发即弃,即使响应在稍后的时间点发出,也不应该请求响应。
  • 避免与其他团队的依赖关系。这意味着避免代码共享(具有业务逻辑或业务相关对象的代码)

基本上,你应该能够继续操作你的微服务(并推出新版本),即使公司的其他人关闭他们并去休假。

当然,这是一个理想化的"场景,但ESB绝对违背了上述所有目标。它是一个同步点,是运行时和组织上的集中依赖。

相关问题