Programing

delayed_jobs vs resque vs beanstalkd?

lottogame 2020. 11. 20. 08:25
반응형

delayed_jobs vs resque vs beanstalkd?


내 요구 사항은 다음과 같습니다.

  • Enqueue_in (10.hours, ...) (DJ 구문이 완벽합니다.)
  • 작업자를 동시에 늘리십시오. (Resque 또는 beanstalkd는 이것에 좋지만 DJ는 아닙니다)
  • 초당 100 개 작업의 푸시 및 팝을 처리해야합니다. (확인하기 위해 테스트를 실행해야하지만 DJ가 이렇게 많은 일을 처리 할 수 ​​없다고 생각합니다)

Resque와 beanstalkd는 enqueue_in을 수행하지 않습니다.

이를 수행하는 플러그인 (resque_scheduler)이 있지만 그것이 얼마나 안정적인지 잘 모르겠습니다.

우리의 환경은 아마존에 있으며 아마존 인스턴스를 보유한 사람을 위해 무료로 Beantalkd를 배포했습니다. 이는 우리에게 장점이지만 여기에서 가장 좋은 옵션이 무엇인지 아직 잘 모르겠습니다.

우리는 레일 2.3을 실행하지만 곧 레일 3.0.3으로 속도를 높일 것입니다.

그러나 여기서 나의 최선의 선택은 무엇입니까? 이 작업을 더 잘 수행하는 또 다른 보석을 놓치고 있습니까?

실제로 작동하는 유일한 옵션은 resque_scheduler입니다.

편집하다:

Sidekiq ( https://github.com/mperham/sidekiq )는 확인해야 할 또 다른 옵션입니다.


내 프로젝트에서 나는 rails2와 3의 집단적 아이디어 / 지연된 직업에 대해 매우 편안함을 느낄 것입니다. 나는 beantalkd를 모르지만 곧 시도 할 것입니다 :-). 나는 resque 문서의 제안을 따랐다. 보고하겠습니다.

Resque vs DelayedJob

Resque는 DelayedJob과 어떻게 비교되며 왜 다른 것보다 하나를 선택합니까?

  • Resque는 여러 대기열을 지원합니다.
  • DelayedJob은 세분화 된 우선 순위를 지원합니다.
  • Resque 작업자는 메모리 누수 / 부풀림에 탄력적입니다.
  • DelayedJob 작업자는 매우 간단하고 수정하기 쉽습니다.
  • Resque에는 Redis가 필요합니다.
  • DelayedJob에는 ActiveRecord가 필요합니다.
  • Resque는 JSONable Ruby 객체를 대기열에 인수로만 배치 할 수 있습니다.
  • DelayedJob은 모든 Ruby 객체를 큐에 인수로 배치 할 수 있습니다.
  • Resque에는 진행 상황을 모니터링하기위한 Sinatra 앱이 포함되어 있습니다.
  • 인터페이스를 추가하려는 경우 Rails 앱 내에서 DelayedJob을 쿼리 할 수 ​​있습니다.

Rails 개발을하고 있다면 이미 데이터베이스와 ActiveRecord가 있습니다. DelayedJob은 설정이 매우 쉽고 훌륭하게 작동합니다. GitHub는 거의 2 억 개의 작업을 처리하는 데 몇 달 동안 사용했습니다.

다음과 같은 경우 Resque를 선택합니다.

  • 여러 대기열이 필요합니다.
  • 숫자 우선 순위를 신경 쓰지 않거나 싫어합니다.
  • 모든 Ruby 객체를 유지할 필요는 없습니다.
  • 잠재적으로 큰 대기열이 있습니다.
  • 무슨 일이 일어나고 있는지보고 싶어
  • 당신은 많은 실패 / 혼돈을 기대합니다
  • Redis를 설정할 수 있습니다.
  • RAM이 부족하지 않습니다.

다음과 같은 경우 DelayedJob을 선택합니다.

  • 숫자 우선 순위를 좋아합니다
  • 당신은 매일 엄청난 양의 일을하고 있지 않습니다.
  • 대기열은 작고 민첩하게 유지됩니다.
  • 많은 실패 / 혼돈이 없습니다
  • 대기열에 무엇이든 쉽게 던지고 싶습니다.
  • Redis를 설정하고 싶지 않습니다.

다음과 같은 경우 Beanstalkd를 선택합니다.

  • 숫자 우선 순위를 좋아합니다
  • 매우 빠른 대기열을 원합니다.
  • RAM을 낭비하고 싶지 않습니다.
  • 많은 수의 일자리를 제공하고 싶습니다.
  • 대기열의 JSONable Ruby 객체를 인수로 사용하는 것이 좋습니다.
  • 여러 대기열이 필요합니다.

Resque는 "더 나은"DelayedJob이 아니므로 앱에 가장 적합한 도구를 선택해야합니다.

큐잉 백엔드 속도 의 좋은 비교 :

                 enqueue                work
-------------------------------------------------
delayed job |   200 jobs/sec     120 jobs/sec
resque      |  3800 jobs/sec     300 jobs/sec
rabbitmq    |  2500 jobs/sec    1300 jobs/sec
beanstalk   |  9000 jobs/sec    5200 jobs/sec

좋은 하루 되세요!

PS resque , Delayed Job ( 개정 버전 ) 및 Beanstakld에 대한 RailsCast가 있습니다. 보세요!

P.P.S. My favourite choiche is now Sidekiq ( very Simple, Fast and efficient for simple jobs ), have a look at this page for comparison.


Amazon Beanstalk isn't Beanstalkd.

Beanstalkd - the queue - does have delayed jobs, that won't be reserved out of the queue until the given number of seconds have passed. If that is what Enqueue_in(10.hours, ... ) means, then it's just syntactic sugar to calculate the number of seconds, and not make a job available till then.


Just a small note: delayed_job 3.0+ supports named queues

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'

참고URL : https://stackoverflow.com/questions/4808351/delayed-jobs-vs-resque-vs-beanstalkd

반응형