programing

분산 작업 대기열(예:Celery) 대 crontab 스크립트

stoneblock 2023. 7. 28. 21:46

분산 작업 대기열(예:Celery) 대 crontab 스크립트

저는 '분산 작업 대기열'의 목적을 이해하는 데 어려움을 겪고 있습니다.예를 들어, 파이썬의 셀러리 라이브러리입니다.

저는 파이썬 프레임워크인 셀러리에서 실행할 함수에 대한 시간 창을 설정할 수 있다는 것을 알고 있습니다.그러나 이는 파이썬 스크립트를 대상으로 하는 리눅스 크론탭에서도 쉽게 수행할 수 있습니다.

그리고 제가 아는 한, 그리고 제가 만든 장고 셀러리 웹 앱에서 보여준 것처럼 셀러리는 단순히 원시 크론탭을 설정하는 것보다 훨씬 더 많은 RAM 메모리를 사용합니다.상대적으로 작은 앱의 경우 수백 MB 차이가 납니다.

누가 이 구별을 도와줄 수 있습니까?일반적으로 작업 대기열/크론탭이 어떻게 작동하는지에 대한 높은 수준의 설명도 좋을 것입니다.

감사해요.

태스크를 수행할 작업, 태스크 배포 여부 및 태스크 관리 방법에 따라 달라집니다.

크론탭은 N개의 간격마다 스크립트를 실행할 수 있습니다.실행되고 다시 실행됩니다.기본적으로 각 간격마다 한 번씩 실행됩니다.crontab에 django 관리 명령을 실행하고 전체 django 환경에 액세스하도록 지시하면 셀러리가 실제로 도움이 되지 않습니다.

셀러리가 메시지 큐의 도움을 받아 테이블에 가져오는 것은 분산 작업입니다.많은 서버가 작업자 풀에 참여할 수 있으며, 각 서버는 이중 작업에 대한 두려움 없이 작업 항목을 받을 수 있습니다.작업이 준비되는 즉시 실행할 수도 있습니다.cron을 사용하면 최소 1분으로 제한됩니다.

예를 들어, 새 웹 응용 프로그램을 시작한 지 얼마 되지 않았는데 각 사용자에게 전자 메일을 보내야 하는 수백 개의 등록을 받는다고 가정해 보십시오.전자 메일을 보내는 데 시간이 오래 걸릴 수 있으므로 작업을 통해 활성화 전자 메일을 처리하기로 결정합니다.

cron을 사용하는 경우 매 분 cron이 전송해야 하는 모든 전자 메일을 처리할 수 있는지 확인해야 합니다.여러 서버가 있는 경우 여러 활성화 전자 메일을 같은 사용자에게 보내지 않는지 확인해야 합니다. 동기화 작업이 필요합니다.

셀러리를 사용하면 대기열에 작업을 추가할 수 있습니다.서버당 여러 명의 작업자가 있을 수 있으므로 이미 cron 작업보다 먼저 크기를 조정했습니다.또한 여러 대의 서버를 사용하여 더욱 확장할 수도 있습니다.동기화는 '큐'의 일부로 처리됩니다.

당신은 셀러리를 크론 대체물로 사용할 수 있지만 그것은 실제로 그것의 주요 용도가 아닙니다.분산 클러스터 전체에서 비동기 작업을 파밍하는 데 사용됩니다.

물론 셀러리에는 cron이 가지고 있지 않은 많은 기능들이 있습니다.

언급URL : https://stackoverflow.com/questions/16232572/distributed-task-queues-ex-celery-vs-crontab-scripts