Celery로 하는 비동기 작업 개발

무거운 작업을 동기가 아닌 비동기로 처리하는 방법

SoniaComp
5 min readMar 22, 2021

참고

celery 공식 문서

Task Queue

  • 스레드 또는 머신에 작업을 분산시키기 위한 메커니즘
  • task 라는 하나의 작업 단위를 입력으로 받는다.
  • 전담 워커 프로세스는 새로운 작업을 수행하기 위해 태스크 큐를 지속적으로 모니터링 한다.
  • Celery는 클라이언트워커 사이를 중재하는 브로커를 사용하며 메시지를 통해 통신한다.
  • 클라이언트는 태스크를 시작하기 위해 큐에 메시지를 추가하고,
    브로커는 워커에게 메시지를 전달한다.

→ Python으로 짜여졌지만, 프로토콜 자체는 어느 언어에서든 구현할 수 있다.

→ celery는 메시지를 주고 받기 위해 메시지 전송이 필요하다. RabbitMQ와 Redis 브로커 전송 기능은 완벽하지만, 로컬 개발환경의 SQLite를 위한 다양한 실험적인 솔루션도 지원된다.

특징

  1. 간단하다. — 환경 설정 파일이 필요 없기 때문에 사용 및 유지가 쉽다.
  2. 고가용성 워커와 클라이언트는 커넥션이 유실되거나 실패했을 때 자동으로 retry한다. 몇몇 브로커는 Primary/Primary 또는 Primary/Replica 의 방법에서 HA를 지원한다.
  3. 빠르다. 단일 Celery 프로세스는 RabbitMQ, librabbitmq 또는 최적화된 설정을 사용하여 밀리 세컨드 미만의 왕복 대기 시간을 통해 분당 수백만 건의 태스크를 처리할 수 있다.
  4. 유연하다. Celery의 거의 모든 부분을 자체적으로 확장하거나 사용할 수 있다. → Custom Pool 구현, serializers, compression schemes, logging, schedulers, consumers, producers, broker transports

Celery가 지원하는 것

  1. 브로커 Rabbit MQ, Redis — Amazon SQS 등
  2. 동시성 (Concurrency) Prefork(멀티 프로세싱) — Eventlet, gevent, thread(멀티스레딩), solo(단일스레딩)
  3. 결과 스토어 (Result Stores) AMQP, Redis
  • Memcached
  • SQLAlchemy, Django ORM
  • Apache Cassandra, Eleastic Search, Riak
  • MongoDB, CouchDB, Couchbase, ArangoDB
  • Amazon DynamoDB, Amazon S3
  • Microsoft Azure BlockBlob, Microsoft Azure CosmosDB
  • 파일 시스템
  • Serialization pickle, json, yaml, msgpack
  • zlib, bzip2 압축
  • Cryptographic message signing

기능

  1. 모니터링 이벤트 모니터링 스트림은 워커가 생성하며 내장 또는 외부 툴에서 클러스터가 수행중인 작업을 실시간으로 알려주는 데에 사용된다.
  2. 스케줄링 초 단위 또는 일시로 태스크 수행할 시간을 정할 수 있다. Crontab 을 기반으로 반복되는 이벤트에 대해 주기적인 작업을 수행할 수 있다.
  3. 워크 플로우 grouping, chaining, chunking 등을 포함하여 canvas 라는 파워풀한 집합으로 구성될 수 있다.
  4. 리소스 누수 방지 — max-tasks-per-child 옵션을 통해 메모리 또는 파일 디스크립터와 같은 리소스를 누수시키는 작업을 방지할 수 있다.
  5. 시간 & 속도 제한 초당, 분당, 시간당 얼마나 많은 태스크를 수행할지 설정할 수 있다. 각 태스크 유형 또는 특정 워커에 대해 기본 값을 설정할 수 있다.
  6. 사용자 컴포넌트 각 워커 컴포넌트는 커스터 마이징 할 수 있고, 추가적으로 컴포넌트를 정의할 수 있다. 워커 내부를 세밀하게 제어할 수 있는 의존성 그래프인 bootsteps 를 통해 워커가 빌드 된다.

셀러리 이용 사례

  • Celery를 이용한 긴 작업 처리
  • Celery 첫 걸음마 떼기
  • Django + AI 아키텍처

--

--

SoniaComp
SoniaComp

Written by SoniaComp

Data Engineer interested in Data Infrastructure Powering Fintech Innovation (https://www.linkedin.com/in/sonia-comp/)

No responses yet