nginx - 我真的需要 Web 服务器和 API - 微服务架构中的网关吗

标签 nginx microservices gunicorn api-gateway

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

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

  • 通过 Internet 公开 API:
  • 做负载均衡:
  • 执行身份验证和授权。

  • web-server 是否还有其他无法通过 api-gateway 实现的目的?
    api-gateway 也只是 web-server 的另一个花哨名称吗?

    最佳答案

    我将通过解决术语 API 网关的含义来回答。 API 网关是外观设计模式的实现。顾名思义,这种模式只是意味着将一些组件放在其他一些组件之前。在 Web 应用程序的上下文中,网关 API 是位于 Web 服务/端点前面的模块。但是,与您所描述的相反,身份验证和授权通常最适合作为架构中的单独模块/微服务。这是设置网关 API 服务的一种方法:

    ┌──────────────┐         (1)          ┌────────────────┐
    │              ├─── authenthicate ──> │                │
    │  gateway API │                      │ authentication │
    │              │ <──── yes/no ────────┤                │
    └───────┬───┬──┘                      └────────────────┘
            │   │         (2)
            │   └─────────────────────┐
        (3) │                         │
            │                         │
    ┌───────┴──────┐          ┌───────┴───────┐
    │              │          │               │
    │ web services │          │ authorization │
    │              │          │               │
    └──────────────┘          └───────────────┘
    

    在这种设计下,您的所有组件现在都有一个登录/身份验证点。身份验证模块基本上只是说是或否,这也意味着您只需要维护一组逻辑或代码来处理所有身份验证。这可能看起来微不足道,但想象一下这将为像谷歌或微软这样拥有数十种公开可用产品和服务的公司节省多少工作量。请注意,实际上您的身份验证可能是分层的或分层的。例如,您可能有 1FA 和 2FA 级别的身份验证,或其他。

    发生的下一步是网关 API 将访问授权模块,以确定传入请求是否具有足够的权限来访问所请求的端点/服务。如果没有,则网关将拒绝该请求。如果是这样,那么它将允许请求访问适当的 Web 服务。

    意识到一旦身份验证和授权不受影响,网关 API 基本上只是一个大路由器,它将传入请求映射到一个或多个应用程序中的某个特定端点。这种微服务设计的另一个值得一提的好处是,如果您不得不更改身份验证提供程序或授权逻辑,则只需更改该模块即可。假设您明智地对接口(interface)进行编码,那么您的应用程序所需的更改应该是最小的。

    Here is a link到 Spring 的 Cloud Gateway 框架的文档。在这种情况下,Spring Boot 应用程序被用作网关 API 的实现。

    关于nginx - 我真的需要 Web 服务器和 API - 微服务架构中的网关吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293128/

    相关文章:

    c# - 开发大型服务结构应用程序

    https - Nginx/Django 管理员 POST 仅限 https

    Python多处理池卡在ubuntu服务器上

    django - Docker NGINX 代理不转发 Websocket

    java - 无法在错误的本地 POM 中找到到请求目标的有效证书路径和 'parent.relativePath' 点

    node.js - 如何使用 Nginx 和 Node.js 应用程序设置 Jenkins

    azure - Azure 世界中 Hangfire 的替代方案

    python - Django/NGINX/Gunicorn/Ubuntu : Media files - [Errno 13] Permission denied

    linux - 用top判断Linux进程内存

    nginx - 如何使用配置映射在容器内创建单个文件?