【问题标题】:Celery, zmq, message passing approach for a distributed systemCelery,zmq,分布式系统的消息传递方法
【发布时间】:2015-01-11 18:23:50
【问题描述】:

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

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

我正在考虑使用: 1. Ruby on Rails 4) 2. Celery 作为分布式解决方案。 3. Zmq 将消息传递给 RoR 应用程序,并在下面描述的 celery 中不同“类别”的工人之间传递消息。

为了将这些组件彼此分离,我正在考虑拥有 3 组 celery workers,每组属于一个单独的类别:- A.“同步”工作人员, B.“渲染”工人,以及 C.“获取”工人。

我想使用 zmq pub sub 或广播模型在这些工作组和网络应用程序之间传递消息,以便它们可以正确同步。例如 B) 应该只在 A) 完成后启动。 C) 应遵循 B)。

这种方法听起来是否合理,或者仅使用 zmq 或 celery 是否可以做得更好?我应该使用像 redis 或 amp 这样的 celery 后端来代替这些吗?

我想使用 celery 的原因当然是数据持久性以及用于监控工作人员的 Web 界面。

我显然对 celery、zmq 和分布式计算比较陌生,所以欢迎任何建议。

谢谢大家。

【问题讨论】:

    标签: redis celery message-queue zeromq distributed-computing


    【解决方案1】:

    我已经为工作做了类似的事情,但都是使用 rabbitmq 和 celery 完成的。我解决这个问题的方法是在远程服务器和本地主机上运行一个 celery worker。让每个工人都有自己独特的队列并启动类似的链 chain(sync.s(file), compute.s(), sync_back.s()).delay 有 2 个同步任务进入 localhost 队列,计算任务进入远程主机队列

    【讨论】:

    • 如果我明白你的意思,你的意思是同步和获取任务应该进入本地队列,计算任务应该进入离岸队列对吗?但是您如何建议这些队列和网络应用程序之间应该发生通信,因为应用程序需要显示下载上传和计算进度以及编辑它们的能力。这就是我希望简洁的 zmq pub sub 会有所帮助的地方。关于它的任何其他想法?谢谢。
    • 我不能和 zmq 说话,所以我会告诉我知道队列不会通信的东西 rabbitmq 将处理工作人员和队列之间的交互 ​​链中发生的事情是同步时完成后,计算任务将被放入“计算”队列并在海上被拾取。至于监控,如果您只想查看已完成的操作,您可以监控工作人员和队列以查看已完成的操作。不确定您所说的编辑是什么意思,或者您是否想以这种方式观看它们。
    • 嗯,我打算有一个 web 应用程序来显示正在运行的任务的进度,无论是同步、计算还是获取阶段。我还想控制这些任务,以便在需要时通过网络应用程序中止它们。我计划的网络应用程序是一个 Rails 应用程序,那么如果有的话,你建议我可以使用什么方法在 celery 队列和网络应用程序之间传递消息?
    • 啊,我知道看看pypi.python.org/pypi/flower 应该会让你朝着正确的方向前进。至于监控,假设您有 100 个文件,并且只关心何时完成 1 个文件,这很容易,而花基本上就是这样做的。如果您有 1 个文件并且关心该文件完成了多少百分比,这是一个更加困难的问题,并且需要在最有可能写入文件或数据库的代码中进行监控。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2018-05-16
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多