2011-12-12 4 views
0

Django와 함께 Celery를 사용하여 작업 대기열을 관리하고 작은 (단일 코어) EC2 인스턴스를 하나 이상 사용하여 작업을 처리합니다.셀러리를 사용하여 노드간에 작업을 균등하게 분배하는 방법은 무엇입니까?

몇 가지 고려 사항이 있습니다.

  • 내 작업은 단일 코어에서 100 % CPU를 사용합니다. - 사용 가능한 모든 CPU를 하나의 코어에서만 사용합니다.
  • 동일한 코어에서 2 개의 작업이 진행 중이면 각 작업이 절반으로 느려집니다.
  • 최대한 빨리 각 작업을 시작하고 대기시키지 않으려합니다.

이제 4 개의 EC2 인스턴스가 있는데, "-c 5"로 셀러리를 시작합니다. 인스턴스 당 5 개의 동시 작업

이 설정에서 4 개의 새 작업이있는 경우 ID는 동일한 인스턴스와 각 작업이 CPU를 위해 싸우는 대신 서로 다른 인스턴스로 이동합니다.

마찬가지로 8 개의 작업이있는 경우 각 인스턴스는 4 개의 작업을 처리하는 2 개의 인스턴스가 아니라 각각 한 번에 2 개의 작업을 얻습니다.

셀러리는 이미 설명한대로 작동합니까? 그렇지 않다면 어떻게 그걸 그처럼 행동하게 할 수 있습니까?

답변

2

사실 쉽습니다. ec2 인스턴스 당 하나의 셀러리 인스턴스를 시작합니다. ec2 인스턴스 당 코어 수와 동시성을 설정하십시오.

이제 작업이 사용자 인스턴스간에 방해가되지 않도록 잘 분산됩니다.

합니다 (위 당신의 작업은 CPU 바운드 있다고 가정)

+0

** 부록 : 작업이 immediatly 시작하지만 다음 리소스에 대한 경쟁이 있고 모든 것을 속도가 느려집니다 경우 ** 당신은 아무것도 얻을 수 없습니다. – tback

+0

하지만 4 x 2 코어 인스턴스가 있다면 어떻게 될까요? 그리고 나는 각각의 작업자에 대해 2의 동시성을 사용합니다. 그렇더라도 더 나은 I/O를 얻으려면 4 개의 개별 인스턴스에 4 개의 작업을 배포하는 것이 좋습니다. – sajal

+0

셀리가이 문제를 해결하지 못합니다. IO-Bound라면 1로 설정하고 CPU가 바운스되면 2로 설정하십시오. 귀하의 질문에 당신은 하나의 작업이 100 % CPU를 사용한다고 말합니다. 그것은 50 % 이상의 입출력을 사용합니까? – tback

관련 문제