ChatGPT解决这个技术问题 Extra ChatGPT

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

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

身份验证(可以使用 nginx LUA 脚本完成);

运输安全。它本身的反向代理任务;

负载均衡

...

所以基于此有几个问题:

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


T
Timothy G.

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

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

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


如果我错了,请纠正我,但我可以在同一个生态系统中使用两者。使用 API 网关更多的是协调添加到仪表板监控和安全约束的动态和持续更改,使用像 nginx 这样的反向代理可以更有效地服务于提供负载平衡的静态和固定子域。
或许,最好的解释!我观看了许多教程并搜索了大量信息。
所以如果我理解正确的话,API 网关是建立在反向代理之上的,并且支持更多的功能,那么我们不能只使用 API 网关并删除代理吗?
A
Andrey Chausenko

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

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

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

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

希望能帮助到你。


感谢 SAAS 的建议
你有没有机会知道 memz.co 链接中的信息的替代位置?它死了。
“使用 Node.js 的 API 网关”的链接已失效。
p
pcodex

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

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

完整的 API 生命周期管理,包括文档

一个门户,可用作各种客户端应用程序的真实来源,您可以在其中提供客户端治理、速率限制等。

路由到不同版本的 API,包括金丝雀/测试版

检测使用模式、注册应用程序、检索客户端凭据等。

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


S
Srinivas Ramakrishna

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

API 网关 具有比 API 代理更强大的一组功能,尤其是在安全和监控方面。我想说 API 网关模式也称为 Backend for frontend (BFF),广泛用于微服务开发。查看微服务世界中 benefits and features of API Gateway pattern 的文章。

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

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

https://i.stack.imgur.com/bzSTZ.png


根据其他答案,您可以使用反向代理进行负载平衡
A
Ahmad Ismail

来自 HTTP:权威指南:

严格来说,代理连接两个或更多使用相同协议的应用程序,而网关连接使用不同协议的两方或更多方。网关充当“协议转换器”,允许客户端完成与服务器的事务,即使客户端和服务器使用不同的协议。在实践中,代理和网关之间的区别是模糊的。由于浏览器和服务器实现了不同版本的 HTTP,代理通常会进行一些协议转换。商业代理服务器实现网关功能以支持 SSL 安全协议、SOCKS 防火墙、FTP 访问和基于 Web 的应用程序。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅