redis - Celery、zmq、分布式系统的消息传递方法

标签 redis celery message-queue zeromq distributed-computing

我需要实现一个执行以下操作的系统:

  1. 将数据传输到远程位置。
  2. 数据完全传输后,在远程服务器上开始计算。
  3. 计算完成后,将生成的计算数据取回源。
  4. 用于跟踪/编辑每项任务进度的网络界面。

我正在考虑使用: 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/

相关文章:

ServiceStack 的 Azure Redis 缓存始终在增加

python - Celery:访问链中的所有先前结果

java - 使用java工具的类似Sidekiq的队列?

postgresql - Docker-compose:将 Celery 绑定(bind)到 Postgres 数据库

c++ - 繁忙的应用程序导致 Windows 7 上出现错误的 "Not responding"状态 - WM_UPDATE

python - 关于 Python/Django 和消息队列的建议

go - 在结构的字段上实现 Redigo Scanner 接口(interface)

Redis - 有集群时我需要有哨兵吗?

javascript - node.js 全局数组与 redis

python - celery 任务和 django 查询集缓存