2013-09-01 45 views
2

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

我的问题是,是否有一个现有的Ruby库提供以下功能:

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

我已经看过的东西:

  • DRb:过低的手动节点处理,没有容错性?
  • DCell:成熟?自动群集管理?
  • Resque/Sidekiq:不错,但速度太慢(轮询Redis的,睡觉的工人,...)
  • 了Riak的Map/Reduce:很高兴,但不建议实时查询
  • Spark:复杂的东西,enterprisy ?

最后的手段:也许有没有Ruby的解决方案,但其他平台?也许Java(是,JRuby!)或node.js.

+0

你有没有在AMQP的宝石组合看着EventMachine的宝石? 我已经将它用于读取核心和线程的lscpu和nproc函数,然后将其写入/运行/启动并要求在Eventmachine :: run方法中。这非常成功。 – Dany

+0

关于AMQP和其他经典队列,我关心速度(实时意味着我毫秒范围)和自动错误处理。 –

回答

0

如果您发现自己的CPU限制问题会受益于更大的规模和更高的并发性,我强烈建议您查看Go language。并发性和并行性不是Ruby的强大套装,以我的经验试图让它们工作总是一场艰苦的战斗。

你会发现,通过Go,你将能够更好地扩展到多个内核和机器,在go-routines和一个非常好的基于并发的路由器之间有良好的通信。

的介绍,并发在走,我会找Rob Pike's 'Concurrency Is Not Parallelism' talk.