Python 如何使用 Gunicorn 和 Kubernetes 进行扩展?
How is Python scaling with Gunicorn and Kubernetes?
我将使用 Gunicorn 和 Gevent/Eventlet 作为异步工作者在 Kubernetes 上部署 Python Flask 服务器和 Docker。该应用程序将:
- 在 Apache Kafka 上订阅大约 20 个不同的主题。
- 使用该数据对一些机器学习模型进行评分。
- 将结果上传到关系数据库。
Kafka 中的每个主题每分钟将收到 1 条消息,因此应用程序每分钟需要从 Kafka 接收大约 20 条消息。对于每条消息,处理和执行大约需要 45 秒。问题是我如何才能很好地扩展它?我知道我可以在 Gunicorn 中添加多个 worker,并在我部署到 Kubernetes 时使用 pod 的多个副本。但这就够了吗?工作量会在不同 pods 的可用工作人员之间自动平衡吗?或者我可以做些什么来确保可扩展性?
我建议您为您的员工设置一个 HPA Horizontal Pod Autoscaler。
需要设置对 metrics API. For custom metrics on the later versions of Kubernetes heapster has been deprecated in favor of the metrics server
的支持
如果您使用的是 public 云,如 AWS、GCP 或 Azure,我还建议您设置一个自动缩放组,以便您可以根据 CPU 平均利用率。
希望对您有所帮助!
我将使用 Gunicorn 和 Gevent/Eventlet 作为异步工作者在 Kubernetes 上部署 Python Flask 服务器和 Docker。该应用程序将:
- 在 Apache Kafka 上订阅大约 20 个不同的主题。
- 使用该数据对一些机器学习模型进行评分。
- 将结果上传到关系数据库。
Kafka 中的每个主题每分钟将收到 1 条消息,因此应用程序每分钟需要从 Kafka 接收大约 20 条消息。对于每条消息,处理和执行大约需要 45 秒。问题是我如何才能很好地扩展它?我知道我可以在 Gunicorn 中添加多个 worker,并在我部署到 Kubernetes 时使用 pod 的多个副本。但这就够了吗?工作量会在不同 pods 的可用工作人员之间自动平衡吗?或者我可以做些什么来确保可扩展性?
我建议您为您的员工设置一个 HPA Horizontal Pod Autoscaler。
需要设置对 metrics API. For custom metrics on the later versions of Kubernetes heapster has been deprecated in favor of the metrics server
的支持如果您使用的是 public 云,如 AWS、GCP 或 Azure,我还建议您设置一个自动缩放组,以便您可以根据 CPU 平均利用率。
希望对您有所帮助!