2013-09-01 5 views
2

저는 Ruby에서 실시간 데이터 분석 작업을위한 알고리즘을 개발 중입니다. 상당히 큰 데이터 세트 때문에 병목 현상이 CPU입니다. 따라서 필요한 성능을 얻으려면 다른 코어에서 병렬로 더 많은 코어를 사용해야합니다.분산 컴퓨팅을위한 Ruby 라이브러리?

내 질문은 다음과 같은 기능을 제공하는 기존의 루비 라이브러리가 있는지 여부입니다 : (노드에 가입하고 떠나) 동적 재구성에 이상적으로 주인없는

  • 클러스터 관리, 및 내결함성 어느 정도는
  • 제 (활성) 노드 계산 작업의 배포, 오류 처리는 실시간 기능을 보장하기 위해
  • 고속 (직접?) 통신 (등 직업 시도)

나는 이미 살펴 봤습니다.

  • DRb : 수동 노드 처리가 너무 낮고 내결함성이 없습니까?
  • DCell : Mature? 자동 클러스터 관리?
  • Resque/Sidekiq : 좋은,하지만 실시간으로 권장되지
  • Spark 조회 : : 좋은,하지만 너무 느린 (폴링 레디 스, 자고 노동자, ...)
  • Riak지도 /는 감소 복합 재료, enterprisy을 ?

마지막 수단 : 다른 플랫폼을위한 해결책이 없을 수도 있습니다. 아마도 Java (예, JRuby!) 또는 node.js.

+0

당신은 AMQP 보석와 함께 Eventmachine 보석 봤어? 코어 및 스레드를 lscpu 및 nproc과 함께 읽은 다음 시작/실행/작성시 Eventmachine :: run 메소드에서 필요로하는 함수와 함께 사용했습니다. 이것은 아주 성공적이었다. – Dany

+0

AMQP 및 다른 클래식 대기열에 관해서는 속도 (실시간은 밀리 초 범위를 의미) 및 자동 오류 처리가 걱정됩니다. –

답변

0

규모가 크고 동시성이 뛰어날 수있는 CPU 관련 문제가있는 경우 Go language을 확인하는 것이 좋습니다. 동시성과 병렬성은 루비의 강한 양복이 아니며, 내 경험으로 볼 때 이들을 작동시키려는 노력은 항상 힘든 전투입니다.

Go를 사용하면 여러 코어와 머신으로 확장 할 수 있고, 훌륭한 루틴과 훌륭한 동시성 기반 라우터 간의 통신이 가능합니다.

이동에서 동시성에 대한 소개

, 나는 체크 아웃 것 Rob Pike's 'Concurrency Is Not Parallelism' talk.

관련 문제