Node.js API 网关 & nginx 作为反向代理
Node.js API Gateway & nginx as reverse proxy
我最近开始使用微服务架构创建一个应用程序,因为该应用程序发展了划分反向代理和 API 网关概念的界限对我而言逐渐消失:
我想使用 nginx 来处理负载平衡和反向代理,但我也想使用 API 网关,这样客户端就不知道体系结构中的每个微服务(除其他外)。
所以现在我陷入了先有鸡还是先有蛋的问题,我一直在思考哪个先来:
- 请求 > API 网关 > nginx。
- 请求 > nginx > API 网关。
我倾向于认为它是第一名,但在那种情况下,nginx 不会是应用程序的入口点...(这是个问题吗?)
API 网关具有许多功能,如节流、缓存、cors 等。许多使用 API 网关调用不同的微服务并在 API 网关级别组合结果(虽然我不喜欢它)。您还可以使用某些 API 网关工具进行 API 版本管理。
只有在您决定要调用哪个 API 或阻止那个 API 或要调用哪个版本的 API 之后,才应该进行负载平衡。
所以选项 1 对我来说是正确的。
理想情况下,您应该选择选项 2。原因如下:
API 网关通常不是为处理潜在的 DOS 攻击而设计的,让 nginx 通知您的网关可以消除这种担忧。
大多数 API 网关都是基于路由的,如果您选择子域,选项 1 将仅适用于某些网关,而选项 2 将适用于所有网关。
像 nginx 这样的反向代理在构建时就考虑到了性能,并且可以以较低的成本处理更多的请求。 Node.js 在性能更高的服务器前面是一个瓶颈!
API 网关在技术上是 "specialized" 反向代理。所以最终你会意识到任务可以由任何一个执行。
我最近开始使用微服务架构创建一个应用程序,因为该应用程序发展了划分反向代理和 API 网关概念的界限对我而言逐渐消失:
我想使用 nginx 来处理负载平衡和反向代理,但我也想使用 API 网关,这样客户端就不知道体系结构中的每个微服务(除其他外)。
所以现在我陷入了先有鸡还是先有蛋的问题,我一直在思考哪个先来:
- 请求 > API 网关 > nginx。
- 请求 > nginx > API 网关。
我倾向于认为它是第一名,但在那种情况下,nginx 不会是应用程序的入口点...(这是个问题吗?)
API 网关具有许多功能,如节流、缓存、cors 等。许多使用 API 网关调用不同的微服务并在 API 网关级别组合结果(虽然我不喜欢它)。您还可以使用某些 API 网关工具进行 API 版本管理。
只有在您决定要调用哪个 API 或阻止那个 API 或要调用哪个版本的 API 之后,才应该进行负载平衡。
所以选项 1 对我来说是正确的。
理想情况下,您应该选择选项 2。原因如下:
API 网关通常不是为处理潜在的 DOS 攻击而设计的,让 nginx 通知您的网关可以消除这种担忧。
大多数 API 网关都是基于路由的,如果您选择子域,选项 1 将仅适用于某些网关,而选项 2 将适用于所有网关。
像 nginx 这样的反向代理在构建时就考虑到了性能,并且可以以较低的成本处理更多的请求。 Node.js 在性能更高的服务器前面是一个瓶颈!
API 网关在技术上是 "specialized" 反向代理。所以最终你会意识到任务可以由任何一个执行。