对 ESB 作为点对点集成的解决方案感到困惑

Confused about ESBs as a solution to point-to-point integration

对于研究应用程序架构和理解有关微服务的书中的一些想法仍然很陌生。在我的阅读中,我遇到了 ESB(企业服务总线)的旧概念及其在协调新服务和遗留应用程序之间的消息方面的作用。 ESB 被吹捧为解决点对点集成问题的解决方案。微服务似乎是新公司采用的方法,作为创建敏捷、可扩展和有弹性的应用程序的事实标准。但是微服务不是使用点对点集成吗?由微服务构建的应用程序中的每个节点都直接与其他节点通信,对吗?我觉得我正在连接一些不应该连接的点。非常感谢任何帮助,提前致谢。

ESB 是许多公司已实施的解决方案,可确保应用程序的互操作性和可追溯性。然而,它们是不允许水平扩展的重型解决方案,通常 ESB 采用两个节点的配置,主动-主动或主动-被动。

另一方面,ESB 中的服务通常不是单独部署的,而是与其他服务一起部署在包中,这使得交付管理和测试更加复杂。

微服务旨在单独开发和部署,因此在云基础架构中可以轻松地横向扩展,动态增加实例数量。

应用程序之间的互操作性目前已退居幕后,因为当今通过 Web 服务进行的通信实际上已经司空见惯,尽管在一些非常古老的基础架构中可能仍然需要一些解决连接问题的中间件。

这两种方法不一定是排他性的。微服务可以使用消息传递中间件(kafka、AMQP、Akka actors、JMS...)而不是直接的 http 通道进行通信。这取决于您的约束(主要是一致性)和部署策略。

每种选择都有其优点和缺点,我个人建议不要局限于一种方法,而是两种方法都使用,并根据情况进行选择

and https://capgemini.github.io/architecture/is-rest-best-microservices/

微服务不一定严格依赖点对点集成。

与直接通信相关的问题通常在使用消息代理的微服务架构中进行管理。如果可以异步进行通信——"fire and forget"——发送消息的应用程序不会在接收方出现故障时变得不可操作。当接收服务恢复时,消息仍然存在。

如果微服务是通过 REST 集成的,那么调用者确实需要知道在其他服务没有响应时如何做出反应。由于在跨系统(即分布式事务)保存数据时这会变得棘手,所以我喜欢仅将 REST 用于数据检索 API。并根据消息进行所有保存。

重要的是要注意,ESB 不仅仅是消息传递。 See more on that in the answer here.

微服务不能替代 ESB。

微服务 是后端系统开发的概念,包括它的API。微服务方法的对立面是单体。如果 API 直接被消费系统消费,我们就会进行点对点(意大利面条)集成。如果消费者使用中间件,通常称为 API 网关,我们就可以拥有集中的可见性、安全性和跟踪(与 ESB 一样)。 API 网关比 ESB 更简单,因此更适合横向扩展。 API 网关不应包含额外的 business/integration 逻辑。

ESB 与 API 网关(充当代理)相同,但还允许包含业务逻辑,将多个服务组合成一个和其他高级服务职能。 ESB 往往会发展成繁琐的解决方案,开销很大,但附加值却很少,这就是人们讨厌它们的原因。

结论

ESB可以和微服务架构一起使用,很多公司都把ESB简单化,几乎等同于所谓的API网关。

我的看法

API 网关正在引入新功能并且变得越来越复杂,越来越接近 ESB。