【问题标题】:Ruby library for distributed computing? [closed]用于分布式计算的 Ruby 库? [关闭]
【发布时间】:2013-09-01 14:06:56
【问题描述】:

我正在为 Ruby 中的实时数据分析任务开发一种算法。由于数据集相当大,瓶颈是 CPU。因此,为了达到所需的性能,我必须并行使用更多的内核,可能在不同的机器上。

我的问题是是否存在提供以下功能的现有 Ruby 库:

  • 集群管理,最好是无主控,动态重新配置(加入和离开节点)和一定程度的容错
  • 将计算作业分配到(活动)节点、错误处理(作业重试等)
  • 快速(直接?)通信以确保实时功能

我已经看过的东西:

  • DRb:太低级,手动节点处理,没有容错?
  • DCell:成熟?自动集群管理?
  • Resque/Sidekiq:不错,但太慢了(轮询 Redis、休眠的工作人员……)
  • Riak Map/Reduce:不错,但不推荐用于实时查询
  • Spark: 复杂的东西,有进取心?

不得已:也许对于 Ruby 没有解决方案,但对于其他平台?也许是 Java(是的,JRuby!)或 node.js。

【问题讨论】:

  • 您看过 Eventmachine gem 与 A​​mqp gem 的结合吗?我已经将它与一个函数一起使用,该函数使用 lscpu 和 nproc 读取内核和线程,然后在启动时将其写入 /run/ 并在 Eventmachine::run 方法中要求它。这是相当成功的。
  • 关于 AMQP 和其他经典队列,我关心的是速度(对我来说是毫秒范围的实时)和自动错误处理。

标签: ruby distributed-computing fault-tolerance


【解决方案1】:

如果您发现自己遇到了一个 CPU 密集型问题,该问题将受益于更大的规模和更高的并发性,我强烈建议您查看Go language。并发性和并行性并不是 Ruby 的强项,根据我的经验,试图让它们工作始终是一场艰苦的战斗。

您会发现,使用 Go,您将能够更好地扩展到多核和机器,在 go-routines 之间拥有出色的通信,以及非常好的基于并发的路由器。

有关 Go 中并发的介绍,我会查看 Rob Pike's 'Concurrency Is Not Parallelism' talk.

【讨论】:

  • 我认为建议使用不同的编程语言并没有帮助。也许是对“你知道 ruby​​ 比其他语言慢很多,也许用别的语言来做?”这个问题的评论。但以这种方式回答问题我认为没有用。
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2010-12-24
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多