Celery
방대한 양의 메시지를 처리할 수 있는 분산 작업 큐(Distributed Task Queue). 분산 메시지 전달을 기반으로 하는 비동기 작업 큐라고 정의하기도 한다.
Celery는 간단하고(simple), 유연하고(flexible), 안정적이며(reliable), Task 스케쥴링을 지원하되 실시간 처리에 중점을 두고 있다. Python 동시성 프로그래밍에서 많이 사용한다.
Celery 자체는 Python으로 작성되어 있지만 프로토콜은 모든 언어로 구현할 수 있다.
Task Queue 개념
스레드 또는 machine 간에 Task를 분산하는 메커니즘으로 사용된다.
Task Queue는 Task라고 불리는 작업 단위를 입력으로 받는다. Celery의 클라이언트가 큐에 추가한 메시지는 broker를 통해 worker에 전달되고, worker 프로세스는 새 작업을 수행하기 위해 task queue를 지속적으로 모니터링한다.
Celery는 여러 개의 worker와 broker로 구성할 수 있기 때문에 고가용성과 수평적 scailing의 한 방법이 될 수 있다.
구성 요소
Celery는 크게 아래 세 가지 요소로 구성되어 있다.
- Client : Task(message)를 생성한다.
- Broker : Task(message)를 입력받아 worker에게 전달한다. RabbitMQ, Redis 등의 소프트웨어를 많이 사용한다.
- Worker : Task를 처리한다.
특징
단순함
사용 및 유지 관리가 쉽고 구성 파일을 필요로 하지 않는다.
고가용성
클라이언트와 Worker 간 연결이 끊어지거나 장애가 발생한 경우, 자동으로 재시도되며 특정 broker는 Primary/Primary 또는 Primary/Replica 복제 방식으로 HA를 지원한다.
빠른 속도
최적화된 broker를 사용하는 경우 단일 Celery 프로세스는 1분에 백만 개의 Task를 처리할 수 있다.
유연성
사용자 정의 pool 구현, serializer, compression schemes, logging, schedulers, consumers, producers, broker transports 등 대부분의 요소를 확장할 수 있다.
참고 문서
https://docs.celeryq.dev/en/stable/index.html
https://jammdev.tistory.com/219