【发布时间】:2019-01-07 15:52:52
【问题描述】:
我想知道使用 gunicorn 和 celery 部署容器化 Django 应用程序的正确方法是什么。
具体来说,这些进程中的每一个都有一个内置的垂直缩放方式,使用 workers 表示 gunicorn 和 concurrency 表示 celery。然后是 Kubernetes 使用 replicas 进行扩展的方法
还有一个概念是将workers设置为CPU的某些功能。 Gunicorn推荐
每个核心 2-4 个工人
但是,我对这在 CPU 是可分割共享资源的 K8s 上的含义感到困惑 - 除非我使用 resoureceQuotas。
我想了解什么是最佳实践。我能想到三个选项:
- gunicorn 是否有单个 worker,celery 是否有 1 个并发,并使用副本对其进行扩展? (水平缩放)
- 让 gunicorn 和 celery 在具有内部缩放(垂直缩放)的单个副本部署中运行。这意味着分别设置相当高的工人和并发值。
- 一种介于 1 和 2 之间的混合方法,我们运行 gunicorn 和 celery,对工人和并发性的价值很小(比如 2),然后使用 K8s 部署副本进行水平扩展。
围绕这个有一些关于 SO 的问题,但没有一个提供深入/周到的答案。如果有人可以分享他们的经验,将不胜感激。
注意:我们为 Gunicorn 使用默认的 worker_class sync
【问题讨论】:
标签: django docker kubernetes celery gunicorn