想看看其他人认为什么是以下方面的最佳架构。
我正在尝试构建一个具有web前端的项目,该项目要求向其他长期运行的进程发出命令,这些进程将向django-db返回结果。该应用程序必须是可扩展的(在数据库和处理能力方面),并且能够快速运行。
我想到了下面的场景,但想看看是否有更好的方法。
Django web应用程序从用户(通过web表单或API)接收指令,将此"请求"放入另一个进程(异步运行以获得性能,无启动成本)可以使用的队列(哪种技术最好?)(它是如何做到的?通过监视队列?IPC?)。这个应用程序然后返回它的处理结果,需要将其放回django数据库(最好通过另一个队列或直接访问来完成?)
关于理智的思考。。。和技术。教程链接会很棒!
- 如何运行异步进程。芹菜,主机守护进程
- 如何从主django-app/db获取数据。队列,套接字IPC
- 在这里的某个地方使用django信号
我想你已经回答了你的问题。深入了解芹菜:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html
使用芹菜,您可以创建一个任务队列(通过RabbitMq,这是推荐使用的队列)。然后,您可以编写worker.py脚本,其中将包含您的长期运行任务。你的django网络应用程序可以调用你的员工中定义的任务,例如:myfunc.delay(4)Celery任务也可以配置为返回结果,或者任务可以通过更新Django应用程序使用的数据库中的数据来返回结果。
Celery允许您通过在任意数量的机器上运行多个工作程序来进行扩展,并且可以通过添加更多的rabbitMq队列来轻松添加更多的消息/任务队列。