在我们高素质的主持人因各种原因拒绝这个问题之前,我想强调一下,这主要是为了重新设计我目前的项目。 所以来到我的问题,在我目前的python应用程序中,我使用gunicorn和nginx。 现在,当我们转向云时,它让我觉得我真的需要nginx或者其他任何其他网络服务器。 在我们的云架构中,我们将使用API网关,我们计划通过该网关: 1)通过互联网公开api 2)负载平衡 3)认证和授权 是否有任何其他目的的web服务器无法用api-gateway完成 api-gateway也是web服务器的另一个奇特名称?
我将通过解决术语API网关的含义来回答。 API网关是外观设计模式的实现。顾名思义,这种模式只是意味着将一些组件放在其他一些组件的前面。在Web应用程序的上下文中,网关API是位于Web服务/端点前面的模块。但是,与您所描述的相反,身份验证和授权通常最适合作为架构中的单独模块/微服务。以下是设置网关API服务的一种方法:
┌──────────────┐ (1) ┌────────────────┐
│ ├─── authenthicate ──> │ │
│ gateway API │ │ authentication │
│ │ <──── yes/no ────────┤ │
└───────┬───┬──┘ └────────────────┘
│ │ (2)
│ └─────────────────────┐
(3) │ │
│ │
┌───────┴──────┐ ┌───────┴───────┐
│ │ │ │
│ web services │ │ authorization │
│ │ │ │
└──────────────┘ └───────────────┘
在此设计下,您的所有组件现在都有一个登录/身份验证点。验证模块基本上只是表示是或否,这也意味着您只需要维护一组逻辑或代码来处理所有验证。这看起来似乎微不足道,但想象一下这会拯救谷歌或微软这样拥有数十种公开产品和服务的公司需要做多少工作。请注意,在实践中,您的身份验证可能是分层的或分层的。例如,您可能具有1FA和2FA级别的身份验证或其他内容。
发生的下一步是网关API将命中授权模块,以查明传入请求是否具有访问所请求的端点/服务的足够权限。如果没有,则网关将拒绝该请求。如果是,那么它将允许请求到达适当的Web服务。
欣赏一旦认证和授权不受影响,网关API基本上只是一个大型路由器,它将传入的请求映射到一个或多个应用程序中的某个特定端点。这个微服务设计值得一提的另一个好处是,如果您不得不更改身份验证提供程序或授权逻辑,则只需要更改该模块。假设您明智地对接口进行编码,那么应用程序中所需的更改应该是最小的。
Here is a link到Spring的Cloud Gateway框架的文档。在这种情况下,Spring Boot应用程序被用作网关API的实现。