2013-09-01 54 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.