3

Ruby でリアルタイム データ分析タスクのアルゴリズムを開発しています。データセットが非常に大きいため、ボトルネックは CPU です。したがって、必要なパフォーマンスを達成するには、おそらく別のマシンで、より多くのコアを並行して使用する必要があります。

私の質問は、次の機能を提供する既存の Ruby ライブラリがあるかどうかです。

  • クラスター管理、理想的にはマスターレス、動的再構成 (ノードの参加と離脱) およびある程度の耐障害性
  • (アクティブな) ノードへの計算ジョブの分散、エラー処理 (ジョブの再試行など)
  • リアルタイム機能を確保するための高速 (直接?) 通信

私がすでに見たもの:

  • DRb: レベルが低すぎる、手動でノードを処理する、耐障害性がない?
  • DCell: 成熟した?自動クラスター管理?
  • Resque/Sidekiq: いいけど遅すぎる (Redis のポーリング、ワーカーのスリープ、...)
  • Riak Map/Reduce: 便利ですが、リアルタイム クエリにはお勧めしません
  • Spark : 複雑なもの、エンタープライズ?

最後の手段: Ruby 以外のプラットフォームでは解決策がないのではないでしょうか? おそらく Java (そう、JRuby!) または node.js です。

4

1 に答える 1

-1

CPU バウンドの問題に直面している場合は、より大きなスケールとより大きな同時実行性の恩恵を受けることができます。Go 言語をチェックアウトすることを強くお勧めします。並行性と並列性は Ruby の得意分野ではありません。私の経験では、それらを機能させようとするのは常に困難な戦いです。

Go を使用すると、複数のコアとマシンへのスケールアウトが大幅に改善され、go ルーチン間の優れた通信が可能になり、非常に優れた同時実行ベースのルーターが実現することがわかります。

Go での並行処理の概要については、Rob Pike の「Concurrency Is Not Parallelism」の講演を参照してください。

于 2013-11-13T04:52:19.853 に答える