2012-03-29 3 views
1

셀러리 문서 섹션 Performance and Strategies은보다 효율적인 병렬 처리를 위해 여러 '단계'가있는 작업을 하위 작업으로 나눠야한다고 제안합니다. 그런 다음 (물론) 메시지 오버 헤드가 더 많아 지므로 하위 작업으로 나누는 것이 오버 헤드의 가치가 없을 수 있음을 언급합니다.셀러리 - 메시지 전달 오버 헤드

제 경우 제 3 자 API에서 작은 이미지 (150px x 115px)를 검색 한 다음 HTTP를 통해 내 사이트의 REST API에 업로드하는 전반적인 작업이 있습니다. 이 작업을 단일 작업으로 구현하거나 이미지를 검색 한 다음 두 가지 별도의 작업으로 업로드하는 단계로 나눌 수 있습니다. 별도의 작업을 수행하면 메시지의 일부로 이미지를 두 번째 작업으로 전달해야한다고 가정합니다.

제 질문은이 경우 더 나은 방법을 제안하고 확실하게 성능을 측정 할 수있는 방법은 무엇입니까?

답변

0

작업이 I/O 제약이 있으므로 작업을 분할하면 병렬로 수행 할 수있는 작업 수가 늘어납니다. 메시지 전달 오버 헤드는 가능한 브로커가 불과 몇 밀리 초의 대기 시간으로 많은 메시지/초를 처리 할 수 ​​있어야하므로 작을 수 있습니다.

귀하의 경우 업로드하는 데 이미지를 업로드하는 데 시간이 오래 걸릴 것입니다. 별도의 작업을 통해 다운로드 작업이 업로드가 완료 될 때까지 기다릴 필요가 없습니다 (사용 가능한 작업자가있는 한). 분리의 또 다른 이점은 각 큐를 서로 다른 대기열에 배치하고 백업 대기열이 스스로를 드러내는 동안 더 많은 작업자를 할당 할 수 있다는 것입니다.

벤치마킹하려고한다면 두 전략 각각에 대해 동일한 수의 직원을 사용하여 실행 시간을 비교합니다. 예를 들어, 결합 된 작업에 대한 2 명의 근로자와 2 개의 분할 된 근로자에 ​​대한 근로자. 그런 다음 각각에 대해 4 명의 작업자를 수행하십시오. 내 성향은 분리 된 과제 자체가 더 빨라진다는 것이다. 특히 근로자 수가 증가 할 때