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