151

为了处理微服务架构,它通常与反向代理(例如 nginx 或 apache httpd)一起使用,并且 使用 API 网关模式来实现横切关注点。有时反向代理会做 API 网关的工作。

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

  • 身份验证(可以使用 nginx LUA 脚本完成);
  • 运输安全。它本身的反向代理任务;
  • 负载均衡
  • ...

所以基于此有几个问题:

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

4 回答 4

127

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

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

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

于 2016-05-17T01:04:25.937 回答
32

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

  1. 只要此序列中的每个组件都服务于它的目的,它就有意义。
  2. 差异不在于功能列表,而在于应用配置更改的方式。

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

另外,这是我关于如何使用 Node.js 创建简单 API 网关的教程https://memz.co/api-gateway-microservices-docker-node-js/

希望能帮助到你。

于 2016-04-06T00:51:22.357 回答
3

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

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

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

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

于 2020-08-11T23:47:29.573 回答
3

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

与API 代理相比, API 网关具有更强大的功能集——尤其是在安全和监控方面。我想说 API 网关模式也称为前端后端 (BFF),广泛用于微服务开发。查看文章,了解API 网关模式在微服务世界中的优势和特性。

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

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

在此处输入图像描述

于 2021-08-15T07:19:37.007 回答