API 网关和 ESB 有啥区别?

Posted

技术标签:

【中文标题】API 网关和 ESB 有啥区别?【英文标题】:What is the difference between API Gateway and ESB?API 网关和 ESB 有什么区别? 【发布时间】:2016-05-03 00:57:22 【问题描述】:

ESB 是 SOA 解决方案中用于路由、消息转换、协议桥接等的传统中间件。 现在有几家供应商提供了一种称为 API 网关的新型中间件解决方案。这些解决方案通常被描述为访问组织公开提供的 REST 和 SOAP 服务的中心点。但是,API Gateway 解决方案似乎提供了典型 ESB 功能的一个子集。

那么,ESB 和 API 网关有什么区别?我什么时候应该使用其中一种?

【问题讨论】:

现在,我的 ESB 和我的 API 管理层都支持将 XML 轻松转换为 JSON。所以从技术上讲,它可以在两个地方完成。那么在您个人看来,将 XML 转换为 JSON 的最佳位置是什么?为什么? 【参考方案1】:

API 网关是为客户端提供的代理。无论内部系统发生任何变化,网关都会为客户端提供一致的接口。它允许在不影响客户端的情况下更改内部系统。 API 网关还可以提供一致的横切关注点,例如安全日志记录、报告和 API 分析。

ESB(企业服务总线)提供了一种服务到服务通信的方法。使用这种技术,服务不需要相互通信,减少了耦合。 ESB 通常使用有保证的消息传递来进行服务间通信。

如今,Service Mesh 模式在微服务中变得流行起来。 Service Mesh 实现可以提供 API 网关和服务到服务的通信,以及负载平衡、安全性和许多其他功能。

有很多变体和实现细节,但这是高级别的区别。

【讨论】:

【参考方案2】:

API 网关通常充当 Web 服务的代理并提供有趣的价值,例如:日志记录、使 SOAP 服务像 REST 服务一样可调用、调试帮助、跟踪等...因为 API 网关是它位于消费者和您的服务之间,可以轻松捕获流量并执行此类操作。

企业服务总线(如 nServiceBus)被设计为位于消息传递协议(如 RabbitMQ)之上,以提供基本消息传递或 pub-sub 所不具备的功能(或难以实现的功能) ,例如:数据库存储的持久消息、重试逻辑、侦听器封装、更简单的消息订阅方式和 saga。您可以在不使用 ESB 的情况下使用消息传递协议,但反之则不行。例如,您可以使用RabbitMQ,而不使用nServiceBus。

【讨论】:

服务总线不一定需要位于消息传递实现之上。这是一个相当重的术语。 当然...但是这个问题专门针对 ESB,而不是消息传递。【参考方案3】:

两者都可以执行中介和聚合服务。主要区别在于API网关暴露了一组服务来消费,并负责代理服务的一些其他功能;例如速率限制。

另一方面,ESB 提供双向关系,因此提供者和消费者(服务)都可以参与以获得所需的结果。换句话说,ESB 允许计算实体既是服务又是运行中的消费者。 API-gateway 将服务限制为具有单一行为。

【讨论】:

【参考方案4】:

由于 API 网关和 ESB 都能够为服务代理提供服务,因此如果只考虑这两种工具的中介和转换功能,它们可能看起来是相同的。对我来说,API 网关的主要区别在于它的特定目的。 API 网关除了提供转换和一些路由功能外,还应该能够充当其前面的资源的入口点。此外,他们应该能够将访问控制和限制方面委托给其他专门的组件,利用它们应该能够保证所需的行为。由于 API 网关将作为 API 管理解决方案的一部分,所有这些功能都将受到 OOTB 的支持。

使用 ESB 和其他外部组件或软件可能会为服务代理实现类似的行为。然而,由于 ESB 旨在用于满足更广泛的集成需求,并且不是专门用于 API 管理用例,因此实现它们将变得更加困难。

【讨论】:

【参考方案5】:

我同意其他答案,但我想补充一点,一个非常重要的区别是网关不应包含任何业务逻辑。

它们都在验证、转换和路由等服务之间进行一些中介,但例如在网关验证的情况下,应该只验证数据的格式。

另外,我认为 ESB 可以让我更多地了解来自多个服务的数据的聚合,如果不引入业务逻辑就很难进行任何聚合。

【讨论】:

以上是关于API 网关和 ESB 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

API(网关)提供的反向代理和Service Fabric有啥区别?

困惑 - Apigee Api Gateway 和 Apigee Api Proxy 有啥区别?如何使用网关?

SOA架构和微服务架构的区别(转载)

post api调用和使用post方法提交表单有啥区别?

esb webservice 和 htpp的区别

支付网关和marchant网关有啥区别? [关闭]