동일한 서버에 셀러리 및 Gunicorn 작업자가 몇 명 있습니까?

동일한 서버에 셀러리 및 Gunicorn 작업자가 몇 명 있습니까?

gunicorn과 Celery 작업 대기열에서 제공하는 Django 애플리케이션을 실행하는 서버가 하나 있습니다.

군니콘문서 제안(2 x $num_cores) + 1을 기본 작업자 수로 지정합니다.

셀러리 문서Celery 작업자 수의 기본값은 1 x $num_cores임을 보여줍니다.

그리고 둘 다 적절한 숫자를 찾기 위해 실험을 제안합니다.

내 질문은 동일한 시스템에서 Gunicorn과 Celery를 모두 실행하는 데 좋은 경험 법칙은 무엇입니까? 8개 코어 시스템에서는 Gunicorn 17개와 Celery 작업자 8개로 시작해야 합니까? 아니면 9명의 Gunicorn과 4명의 Celery 작업자로 시작하는 것이 합리적일까요?

도움이 되는 경우를 대비해 시스템은 CPU에 바인딩되어 있습니다.

답변1

모든 종류의 성능 조정은 엄격하고 빠른 규칙보다 더 안심이 되는 경우가 많습니다. 최근 누군가가 남용하기로 결정한 Django 앱과 비슷한 작업을 수행해야 했습니다. 동일한 시스템에서 Gunicorn과 Celery를 모두 실행하는 경우 Gunicorn 작업자를 최대한 활용하기보다는 보다 균형 잡힌 접근 방식으로 시작하는 것이 이상적으로 좋습니다. 이것이 내 접근 방식입니다.

  • Gunicorn 노동자:

    • 2 * $num_cores + 1 공식을 사용하여 약간 적은 수의 Gunicorn 작업자로 시작합니다.
    • 8코어 머신의 경우 8~12명의 Gunicorn 작업자로 시작할 수 있습니다.
    • 그 이유는 Celery 작업이 CPU 집약적일 수 있으므로 Celery 작업자를 위한 일부 CPU 리소스가 아직 남아 있는지 확인하려는 것입니다.
  • 셀러리 작업자:

    • '권장' 개수의 Celery 작업자를 사용할 수 있습니다.
    • 1 * $num_cores로 정의할 수 있습니다.
    • 예를 들어 8코어 시스템의 경우 8개의 Celery 작업자로 시작할 수 있습니다.

따라서 8코어 머신에서 좋은 시작 설정은 다음과 같습니다.

  • 구니콘: 8-12명의 작업자
  • 셀러리: 8명의 노동자

목표는 Gunicorn 작업자를 압도하지 않고 최소한 Celery 작업자를 위해 CPU 리소스를 남겨 두는 것입니다.

관련 정보