API 网关与反向代理

API gateway vs. reverse proxy

为了处理微服务架构,它经常与反向代理(例如 nginx 或 apache httpd)一起使用,并用于横切关注点实现 API gateway pattern is used。有时反向代理会完成 API 网关的工作。

很高兴看到这两种方法之间的明显区别。 看起来 API 网关使用的潜在好处是调用多个微服务并聚合结果。 API 网关的所有其他 responsibilities 都可以使用反向代理来实现。如:

所以基于此有几个问题:

  1. 同时使用 API 网关和反向代理是否有意义(例如请求 -> API 网关 -> 反向代理(nginx) -> 具体微服务)?在什么情况下?
  2. 可以使用 API 网关实现而不能由反向代理实现,反之亦然的其他区别是什么?

我相信,API 网关是一个反向代理,可以通过 API 动态配置,也可能通过 UI,而传统的反向代理(如 Nginx、HAProxy 或 Apache)通过配置文件配置,当配置更改时必须重新启动。因此,当路由规则或其他配置经常更改时,应使用 API 网关。针对您的问题:

  1. 只要此序列中的每个组件都能发挥其作用,它就有意义。
  2. 不同之处不在于功能列表,而在于应用配置更改的方式。

此外,API网关通常以SAAS的形式提供,例如Apigee or Tyk

此外,这是我关于如何使用 Node.js https://memz.co/api-gateway-microservices-docker-node-js/

创建简单 API 网关的教程

希望对您有所帮助。

如果您意识到它们并不相互排斥,就会更容易考虑它们。将 API 网关视为特定类型的反向代理实现。

关于您的问题,经常会看到两者结合使用,其中 API 网关被视为位于反向代理后面的应用层,用于负载平衡和健康检查。一个例子类似于 WAF 三明治架构,因为您的 Web 应用程序 Firewall/API 网关被反向代理层夹在中间,一个用于 WAF 本身,另一个用于与之通信的各个微服务。

关于差异,它们非常相似。这只是命名法。当您进行基本的反向代理设置并开始添加更多内容(例如身份验证、速率限制、动态配置更新和服务发现)时,人们更有可能将其称为 API 网关。

API 网关通常作为 L7 结构运行。

API 与普通反向代理相比,网关提供了额外的功能。如果您考虑一些门户网站,他们可以提供:

  • 完整 API 生命周期管理,包括文档
  • 一个门户,可用作各种客户端应用程序的真实来源,您可以在其中提供客户端管理、速率限制等。
  • 路由到 API 的不同版本,包括 canary/beta 版本
  • 检测使用模式、注册应用程序、检索客户端凭据等

然而,随着 Istio、Consul 等服务网格的出现,API 网关的许多功能将被网格包含。

API网关充当反向代理接受所有应用程序编程接口(API)调用,聚合实现它们所需的各种服务,和 return 适当的结果。

API 网关 比 API 代理具有更强大的功能集——尤其是在安全和监控方面。我会说 API 网关模式也称为 前端后端 (BFF) 在微服务开发中被广泛使用。查看微服务世界中 benefits and features of API Gateway pattern 的文章。

另一方面API代理基本上是一个轻量级的API网关。它包括一些基本的安全和监控功能。因此,如果您已经有一个 API 并且您的需求很简单,那么 API 代理就可以正常工作。

下图将为您提供 API 网关和反向代理之间区别的清晰图片。