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
'Programing' 카테고리의 다른 글
HttpWebRequest 클래스가 보내는 원시 HTTP 요청을 어떻게 볼 수 있습니까? (0) | 2020.11.20 |
---|---|
매핑 된 멤버를 제외한 모든 대상 멤버를 무시하는 방법은 무엇입니까? (0) | 2020.11.20 |
Android의 R 클래스 이해 (0) | 2020.11.20 |
여러 Git 커밋 (이미 푸시 됨)을 게시 된 저장소로 되돌리려면 어떻게해야합니까? (0) | 2020.11.20 |
postgresql에서 배열의 크기를 찾는 방법 (0) | 2020.11.20 |