我需要实现一个执行以下操作的系统:
- 将数据传输到远程位置。
- 数据完全传输后,在远程服务器上开始计算。
- 计算完成后,将生成的计算数据取回源。
- 用于跟踪/编辑每项任务进度的网络界面。
我正在考虑使用: 1. Ruby on Rails 4) 2. Celery 作为分布式解决方案。 3. Zmq 将消息传递给 RoR 应用程序,并在 celery 中不同“类别”的工作人员之间传递消息,如下所述。
为了将这些组件彼此分离,我正在考虑拥有 3 组 celery worker,每组属于一个单独的类别:- A.“同步” worker , B.“渲染” worker ,和 C.“获取” worker 。
我想使用 zmq pub sub 或广播模型在这些工作人员和网络应用程序之间传递消息,以便它们可以正确同步。例如 B) 应该只在 A) 完成后启动。 C) 应该跟在 B) 之后。
这种方法听起来是否合理,或者仅使用 zmq 或 celery 是否可以做得更好?我应该使用像 redis 或 amp 这样的 celery 后端而不是这些吗?
我想使用 celery 的原因当然是数据持久化以及用于监控工作人员的 Web 界面。
我显然对 celery、zmq 和一般的分布式计算比较陌生,所以欢迎任何建议。
谢谢大家。
最佳答案
我在工作中做过类似的事情,但都是使用 rabbitmq 和 celery 完成的。我采用的方法是让 celery worker 在远程服务器和本地主机上运行。让每个工作人员都有自己独特的队列并触发链条之类的东西
chain(sync.s(file), compute.s(), sync_back.s()).delay
让 2 个同步任务进入本地主机队列,计算任务进入远程主机队列
关于redis - Celery、zmq、分布式系统的消息传递方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928671/