2013-11-03 3 views
0

나는 heroku에서 무한한 수의 직원을 만들지 않도록 확인하고 싶습니다.Sidekiq 아키텍처 질문

def perform 
    UserRepo.all.each do |user| 
     EnqueueFolderSyncJobs.perform_async user.id 
     SyncContacts.perform_async user.id 
     SyncMeetings.perform_async user.id 
    end 
    end 

그것은 모든 사용자를 반복하고 더 노동자를 만듭니다

every 5.minutes, SyncAccounts 

동기화 계정은 다음과 같습니다

나는 Heroku가에 시계 보석에 의해 시작되어 다음과 같은 작업을해야합니다. 이러한 노동자의 각각은, 예를 들어, EnqueFolderSyncJobs는 IMAP 폴더를 동기화하기 위해 노동자를 만들고, 더 많은 근로자를 만들 수 있습니다 : 이런 일이

google.email.folders.each do |folder| 
    SyncFolder.perform_async user_id, folder unless skip?(folder) 
    end 

그래서 5 분마다.

perform_async를 호출한다는 것은 작업이 한 번만 발생한다는 것을 의미합니까?

이 모든 작업의 ​​끝에서 콜 드레인이 필요합니까?

또한 모든 대기열이 동일한 대기열에서 만들어 지므로 예를 들어 SyncFolders에 대해 별도의 대기열을 만들어야합니까?

답변

0

Sidekiq은 기본적으로 동시성을 25 명으로 제한합니다. 필요한 경우 sidekiq.yml에서 증가시킬 수 있습니다. 그러나 그러한 동시성은 "무한한"노동자들로부터 그것을 제한하는 것이다. "perform_async"호출 https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency

은 당신이 실패 할 경우, 그것은 단지 다시 발생하게 한 번 그 일을 호출하고 시도되었음을 의미합니다. 어떤 작업이 우선하지 않고 항상 먼저 처리해야하는 경우가 아니면 다른 대기열을 만들 필요가 없습니다. https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

테스트 환경을 제외하고 .drain을 호출하는 것은 불필요합니다.

작업자가 특정 작업 과정에서 처리되도록하려면 모든 작업을 한 번에 대기열에 덤프하는 대신 (예 : 중요하지 않음) Sidekq Superworker를 살펴보십시오. 나는 그것을 직접 사용하지는 않았지만 흥미로워 보인다.

https://github.com/socialpandas/sidekiq-superworker