在我们的高素质主持人基于各种原因拒绝这个问题之前,我想强调一下,这主要是为了重新设计当前项目.
因此,在我当前的python应用程序中,我正在使用gunicorn和nginx.现在,当我们迁移到云时,这让我觉得我真的需要nginx或其他任何Web服务器.
在我们的云架构中,我们将使用API网关,我们计划通过该API网关:1)通过Internet公开api 2)负载平衡3)身份验证和授权
网络服务器还有其他目的无法通过api-gateway来实现吗?api-gateway只是网络服务器的另一个奇特名称吗?
解决方法:
我将通过解决术语“ 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的实现.