복붙노트

[PYTHON] 동시성, 작업자와 자동 확장 간의 셀러리 차이

PYTHON

동시성, 작업자와 자동 확장 간의 셀러리 차이

/ etc / defaults / celeryd 설정 파일에 다음과 같이 설정했습니다 :

CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"

데몬이 샐러리맨 8 명을 태어난다는 것을 이해하지만 자동 스케일과 동시성이 함께하는 일을 완전히 확신하지 못합니다. 동시성은 작업자가 사용할 수있는 스레드의 최대 수를 지정하는 방법이며, 자동 확장은 필요할 경우 하위 작업자를 위아래로 조정할 수있는 방법이라고 생각했습니다.

작업은 큰 페이로드 (약 20 ~ 50kB)를 가지며 2-3 백만 개 정도의 작업이 있지만 각 작업은 1 초 이내에 실행됩니다. 브로커가 작업을 모든 작업자에게 배포하여 페이로드를 여러 번 복제하기 때문에 메모리 사용량이 급증합니다.

나는이 문제가 config에 있고 worker + concurrency + autoscaling의 조합이 과도하다고 생각하며,이 세 가지 옵션이 무엇을하는지 더 잘 이해하고 싶습니다.

해결법

  1. ==============================

    1.근로자와 근로자 프로세스를 구별합시다. 샐러리 작업자를 스폰하면 프로세스가 여러 개 생성됩니다 (--concurrency 및 -autoscale과 같은 경우 기본값은 시스템의 코어만큼 프로세스를 생성하는 것입니다). 라우팅을 원할 때가 아니면 특정 컴퓨터에서 둘 이상의 작업자를 실행하는 것은 의미가 없습니다.

    근로자와 근로자 프로세스를 구별합시다. 샐러리 작업자를 스폰하면 프로세스가 여러 개 생성됩니다 (--concurrency 및 -autoscale과 같은 경우 기본값은 시스템의 코어만큼 프로세스를 생성하는 것입니다). 라우팅을 원할 때가 아니면 특정 컴퓨터에서 둘 이상의 작업자를 실행하는 것은 의미가 없습니다.

    기본 프로세스 수와 함께 컴퓨터 당 단 하나의 작업자 만 실행하는 것이 좋습니다. 이렇게하면 작업자 간의 데이터 중복을 제거하여 메모리 사용량을 줄일 수 있습니다.

    메모리 문제가 계속 발생하면 데이터를 상점에 저장하고 ID 만 작업자에게 전달하십시오.

  2. from https://stackoverflow.com/questions/31898311/celery-difference-between-concurrency-workers-and-autoscaling by cc-by-sa and MIT license