首页 > 解决方案 > 如何在 Kubernetes 中部署的 API 中维护 http 会话?

问题描述

我正在设计一个 API,它将接收来自客户的请求,并代表客户与 AWS 等云后端进行交互。这个 API 必须是可扩展的,所以一些研究让我相信我可以将 API 放入容器中,并通过 Kubernetes 对其进行扩展。我打算使用 Flask 来编写这个 API。在这方面我有三个问题:

  1. 烧瓶是一个合适的选择吗?通过我的研究似乎是这样。
  2. API 应该如何处理对后端的用户认证?它是否应该简单地从用户那里获取用户名/密码,根据这些凭据建立与后端的连接,并以某种方式在内存/数据库中维护生成的连接?还有其他方法吗?
  3. 如果我们采用第二种方法进行用户身份验证,那么问题是:我不希望 API 在每个用户请求时都与后端建立新连接。这意味着我需要始终以某种方式维护连接状态,同时确保 API 应该以分散的方式工作。例如,用户 A 之前由 API 的 docker 实例 1 提供服务,但现在她的请求被路由到 docker 实例 2,在这种情况下,我想使用用户到后端的相同连接,该连接由 docker 1 API 实例建立. 那么如何保持这种连接呢?是否违反了应该是无状态的 REST API 的原则?那么,设计系统的另一种选择是什么?谢谢。

标签: restflaskkubernetescloudscalability

解决方案


  1. Flask 应该没问题,就像许多其他方法一样,毕竟如何编写 API 取决于你

  2. 在我看来,最好的方法是进行不记名令牌身份验证,您可以在其中为令牌发行服务提供一些身份验证机制,并且当您拥有签名令牌时,您的 API(或 API 网关/身份验证代理)可以检查如果令牌有效(单独使用或通过调用专用微服务)

  3. 如果出于任何原因需要会话存储,则应该实现一个单独的服务来存储该会话数据。例如,您可以使用 Redis 作为中央存储。如果您也需要此服务的 HA,那么您必须使用一些集群支持来实现会话存储。


推荐阅读