【问题标题】:Do I really need web-server alongwith API - gateway in microservice architecture我真的需要 Web 服务器和 API - 微服务架构中的网关吗
【发布时间】:2019-08-13 01:22:41
【问题描述】:

在我想重新设计的当前 python 应用程序中,我使用 gunicorn 和 nginx。现在我们正在迁移到云端,这让我想:我真的需要 nginx 还是其他任何网络服务器?

在我们的云架构中,我们将使用 API 网关,我们计划通过该网关:

  1. 通过互联网公开 API:
  2. 做负载平衡:
  3. 强制执行身份验证和授权。

还有没有其他的 web-server 用途是 api-gateway 无法实现的?
api-gateway 也只是 web-server 的另一个花哨名称吗?

【问题讨论】:

    标签: nginx microservices gunicorn api-gateway


    【解决方案1】:

    我将通过解决术语 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 的实现。

    【讨论】:

    • 感谢蒂姆。您对设计的描述清楚地说明了身份验证应该如何成为另一个具有布尔响应的微服务。由于我的 API 网关只是一个负责负载平衡的路由器,我真的需要一个网络服务器吗?
    • 这可能取决于您的实际设置。事情,对于实际的服务 API 请求,网关真的是严格意义上的路由器。但是,网关确实有一些逻辑,并且需要知道足够多的知识来拒绝错误的身份验证或授权级别。看看 Spring Cloud Gateway 之类的东西,您会看到实际上 Spring 应用程序正在用于网关 API。
    • 这个答案并没有真正回答这个问题:“我真的需要 nginx 还是其他任何网络服务器?”
    猜你喜欢
    • 2017-03-19
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2020-07-24
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多