【问题标题】:How is Python scaling with Gunicorn and Kubernetes?Python 如何使用 Gunicorn 和 Kubernetes 进行扩展?
【发布时间】:2019-02-26 17:30:12
【问题描述】:

我将使用 Gunicorn 和 Gevent/Eventlet 作为异步工作器在 Kubernetes 上部署一个带有 Docker 的 Python Flask 服务器。该应用程序将:

  1. 在 Apache Kafka 上订阅大约 20 个不同的主题。
  2. 使用该数据对一些机器学习模型进行评分。
  3. 将结果上传到关系数据库。

Kafka 中的每个主题每分钟将收到 1 条消息,因此应用程序每分钟需要从 Kafka 消费大约 20 条消息。对于每条消息,处理和执行大约需要 45 秒。问题是我如何才能以一种好的方式扩展它?我知道我可以在 Gunicorn 中添加多个 worker,并在部署到 Kubernetes 时使用 pod 的多个副本。但这足够了吗?工作负载会在不同 pod 中的可用工作人员之间自动平衡吗?或者我可以做些什么来确保可扩展性?

【问题讨论】:

    标签: python docker flask kubernetes gunicorn


    【解决方案1】:

    我建议您为您的工作人员设置一个HPA Horizo​​ntal Pod Autoscaler。

    需要设置对metrics API 的支持。对于更高版本的 Kubernetes 上的自定义指标,heapster 已被弃用,取而代之的是 metrics server

    如果您使用 AWS、GCP 或 Azure 等公共云,我还建议您设置一个自动缩放组,以便您可以根据 CPU 平均利用率等指标来缩放您的虚拟机或服务器。

    希望对你有帮助!

    【讨论】:

    • 我猜 HPA 会根据我的需要水平缩放 Pod。但是负载平衡会在我的工作人员和 Pod 之间自动发生吗?所以理论上 5 个 pod 和 4 个 worker 就足以每分钟处理来自 Kafka 的 20 条消息?
    • 是的。如果您的设置正确,负载平衡应该会自动发生。
    • 难道不会出现这样一种情况,即只有一个实例侦听单个 Kafka 主题,而不是分散由单个实例消耗的负载吗?
    • 这真的取决于你如何配置你的消费者。
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2019-05-26
    • 2020-11-23
    • 2013-11-19
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多