[python] 분산 작업 대기열 (예 : Celery)과 crontab 스크립트
‘분산 작업 대기열’의 목적을 이해하는 데 문제가 있습니다. 예를 들어, 파이썬의 셀러리 라이브러리 .
파이썬 프레임 워크 인 celery에서 함수가 실행되도록 시간 설정 창을 설정할 수 있다는 것을 알고 있습니다. 그러나 이것은 파이썬 스크립트를 지시하는 리눅스 crontab에서도 쉽게 할 수 있습니다.
그리고 내가 아는 한, 내 django-celery 웹앱에서 보여준 한, celery는 원시 크론 탭을 설정하는 것보다 훨씬 더 많은 RAM 메모리를 소비합니다. 비교적 작은 앱의 경우 수백 MB 차이입니다.
누군가이 구별을 도와 줄 수 있습니까? 일반적으로 작업 대기열 / crontab이 어떻게 작동하는지에 대한 높은 수준의 설명도 좋을 것입니다.
감사합니다.
답변
작업을 수행 할 작업, 배포해야하는 경우 및 관리 방법에 따라 다릅니다.
crontab은 N 간격마다 스크립트를 실행할 수 있습니다. 실행 한 다음 돌아옵니다. 기본적으로 각 간격마다 단일 실행을 얻습니다. crontab에 django 관리 명령을 실행하고 전체 django 환경에 액세스하도록 지시 할 수 있으므로 celery는 실제로 도움이되지 않습니다.
셀러리가 메시지 대기열의 도움으로 테이블에 가져 오는 것은 분산 작업입니다. 많은 서버가 작업자 풀에 참여할 수 있으며 각 서버는 이중 처리에 대한 두려움없이 작업 항목을받습니다. 준비가되는 즉시 작업을 실행할 수도 있습니다. cron을 사용하면 최소 1 분으로 제한됩니다.
예를 들어, 방금 새 웹 애플리케이션을 시작했고 각 사용자에게 이메일을 보내야하는 수백 개의 등록을 수신한다고 가정 해보십시오. 이메일 전송은 (비교적으로) 시간이 오래 걸릴 수 있으므로 작업을 통해 활성화 이메일을 처리하기로 결정합니다.
크론을 사용하고 있었다면 1 분마다 크론이 전송해야하는 모든 이메일을 처리 할 수 있는지 확인해야합니다. 서버가 여러 개인 경우 동일한 사용자에게 여러 활성화 이메일을 보내지 않는지 확인해야합니다. 일종의 동기화가 필요합니다.
셀러리를 사용하면 대기열에 작업을 추가합니다. 서버 당 여러 작업자가있을 수 있으므로 cronjob보다 앞서 이미 확장했습니다. 더 많은 확장이 가능한 여러 서버가있을 수도 있습니다. 동기화는 ‘대기열’의 일부로 처리됩니다.
당신은 할 수 크론 대체 셀러리를 사용하지만 정말 그 차를 사용하지 않습니다. 분산 클러스터에서 비동기 작업을 수행하는 데 사용됩니다.
물론 셀러리는 크론이 제공하지 않는 많은 기능 을 가지고 있습니다.