在阅读了很多博客文章后,我决定从crontab切换到Celery,用于我的中等规模的Django项目。我有几件事不明白:
1- 我计划启动一个专用于 RabbitMQ 的微型 EC2 实例,这对于中小型繁重任务是否足够?(例如向 Amazon SES 发送定期电子邮件)。
2-任务的计算,任务的计算发生在Django服务器还是RabbitMQ服务器上(假设rabbitMQ在单独的服务器上)?
3- 当我需要扩展我的系统并在负载均衡器后面有 2 个或更多应用程序服务器时,这两台芹菜机器是否需要连接到同一个 rabbitMQ 虚拟主机?假设应用程序服务器是复本,任务相同,并且所有内容在数据库级别都是同步的。
-
我不知道这个问题的答案,但您绝对可以将其配置为合适的(例如,对单个进程工作线程使用
-c1
以避免使用大量内存或 eventlet/gevent 池),另请参阅--autoscale
选项。 代理传输的选择在这里也很重要,不轮询的代理传输的 CPU 效率更高(rabbitmq/redis/beanstalk)。 -
计算发生在工作线程上,代理只负责接受、路由和传递消息(并在必要时将消息持久化到磁盘)。
-
要添加其他工作线程,这些工作线程确实应该连接到同一虚拟主机。你会仅当希望应用程序具有单独的消息总线时,才使用单独的虚拟主机。