API 网关与反向代理

为了处理微服务体系结构,它通常与反向代理(如 nginx 或 apache httpd)一起使用,并用于横切关注点实现 使用 API 网关模式。有时反向代理完成 API 网关的工作。

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

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

因此,在此基础上有几个问题:

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

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

  1. 只要这个序列中的每个组件都能达到其目的,它就是有意义的。
  2. 差异不在于特性列表,而在于应用配置更改的方式。

此外,API 网关通常以 SAAS 的形式提供,例如 阿皮吉泰克

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

希望能有帮助。

如果你意识到它们并不是相互排斥的,你就会更容易去考虑它们。可以将 API 网关看作是特定类型的反向代理实现。

关于您的问题,我们经常看到两者结合使用,其中 API 网关被视为位于负载平衡和健康检查的反向代理之后的应用程序层。一个例子就像 WAF 三明治架构,你的 Web 应用层防火墙/API 网关被反向代理层包围着,一个是 WAF 本身,另一个是与它交谈的单个微服务。

关于差异,他们是非常相似的。只是个术语。当您使用一个基本的反向代理设置,并开始安装更多的部件,如身份验证、速率限制、动态配置更新和服务发现,人们更可能称之为 API 网关。

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

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

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

然而,随着像 Istio 这样的服务网格的出现,领事 API 网关的许多功能将被网格所包含。

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

与 API 代理相比,API 网关具有一系列更强大的特性,特别是在安全和监控方面。我认为 API 网关模式也被称为 前端后端(BFF),在 Microservices 的开发中得到了广泛的应用。查看微服务世界中的 API 网关模式的优点和特性文章。

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

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

enter image description here

来自 HTTP: 最终指南:

严格地说,代理连接两个或多个说话的应用程序 相同的协议,而网关连接两个或多个方 说不同的协议一个入口就像一个“通讯协定转换器” 允许客户端完成与服务器的交易,即使 客户端和服务器使用不同的协议。

在实践中,代理和网关之间的区别是模糊的。 因为浏览器和服务器实现了不同版本的 HTTP, 代理通常做一些协议转换。和商业 代理服务器实现网关功能以支持 SSL 安全性 协议、 SOCKS 防火墙、 FTP 访问和基于 Web 的应用程序。

反向代理,如 Nginx 和 Apache,不处理可观察性、身份验证、授权、服务编排等,而只处理负载平衡和向上游转发流量。

API 网关接近用户的业务场景,并帮助用户解决各种 API 和微服务的安全性和可观察性问题。

不同的定位导致了反向代理和 API 网关技术方面的不同。API 网关,如 阿帕奇 APISIX,有近100个插件,并支持多种编程语言的插件开发。

如果您已经有一个很好的 API 网关,那么就不需要使用反向代理。

关于 Andrey Chausenko 的回答

我相信,API 网关是一个反向代理,可以通过 API 动态配置,也可以通过 UI 进行配置,而传统的反向代理(如 Nginx、 HAProxy 或 Apache)是通过配置文件进行配置的,当配置发生变化时必须重新启动。

我认为这是不正确的,因为现代反向代理像使者可以动态配置控制平面通过 xDS。