我的设置基于具有PostgreSQL和Redis数据库的Flask应用程序。此外,将启动工作进程来处理异步任务,例如发送电子邮件。我使用Gunicorn创建多个应用程序流程。问题是通过Redis将作业从应用程序进程传递到工作进程。当前,我使用带有相关位的启动脚本:

gunicorn --bind=0.0.0.0:8000 --workers=3 manage:app &
python -u manage.py run_worker


此外,如果要将它们分开,如何确保它们重用公共文件系统容器?此外,在使用主应用程序或工作进程扩展Gunicorn时,应创建容器的其他实例还是增加容器中的进程数?

相关:Docker化的优点是什么Nginx和php在不同的容器中?

#1 楼

我只能想到一种情况,证明在单独的容器中运行工作程序的开销是合理的:如果您的设置使用docker swarm进行集群部署。这样,您将获得所有的HA好处。

否则,我看不出将此类任务复杂化的理由,尤其是如果它们必须使用完全相同的代码库(这使我相信它们共享可以这么说)。看起来不错,但我只是看不到足够的好处

p.s。任何此类拆分都会迫使您管理互连并使本地开发的设置复杂化

评论


我猜因为我已经使用了docker-compose,因此可以很好地处理复杂性。不过,您的观点是正确的,因为当前可以通过单个实例处理负载,并且无需使事情变得比必须的复杂。

–莫里茨
18年1月16日在17:07