GN⁺: PgQueuer – PostgreSQL을 작업 대기열로 이용하는 파이썬 라이브러리
(github.com/janbjorge)- PgQueuer는 PostgreSQL의 견고함을 활용한 Python용 미니멀/고성능 작업 큐 라이브러리
- 단순성과 효율성을 위해 설계되었으며, PostgreSQL의 LISTEN/NOTIFY를 사용하여 작업 큐를 손쉽게 관리함
특징
- 간단한 통합: PostgreSQL을 사용하는 기존 Python 애플리케이션과 쉽게 통합할 수 있음
-
효율적인 동시성 처리: PostgreSQL의
FOR UPDATE SKIP LOCKED
를 사용하여 신뢰할 수 있고 동시적인 작업 처리를 가능하게 함 -
실시간 알림:
LISTEN
과NOTIFY
를 활용하여 작업 상태 변경에 대한 실시간 업데이트를 제공함
GN⁺의 정리
- PgQueuer는 PostgreSQL의 LISTEN/NOTIFY 기능을 활용하여 Python 애플리케이션에서 작업 큐를 효율적으로 관리할 수 있게 해줌.
- 간단한 통합과 효율적인 동시성 처리를 제공하여 기존 시스템에 쉽게 적용할 수 있음.
- 실시간 알림 기능을 통해 작업 상태를 즉시 확인할 수 있어, 작업 관리가 용이함.
- 비슷한 기능을 제공하는 다른 프로젝트로는 RQ, Celery 등이 있음.
Hacker News 의견
- Graphile Worker 라이브러리와의 비교에 대한 질문
- PostgreSQL 기반 작업 큐 라이브러리들이 공통 스키마를 공유할 가능성에 대한 생각
- Elixir의 Oban 팬임
- 여러 언어에서 Sidekiq 호환 라이브러리가 있는 것처럼 PostgreSQL 기반 작업 큐도 유사한 접근이 유익할 것임
- Rust로 핵심 작업 큐 라이브러리를 개발하고 언어별 바인딩을 고려할 수 있음
- Postgres를 모든 것에 사용하는 것을 지지하며, 프로젝트에서 이를 극대화하고 있음
- 다단계 파이프라인, 팬 아웃 및 축적을 수행하는 Postgres 작업 큐를 원함
- 구조적 관계형 데이터베이스가 이를 모델링하는 데 특히 적합함
- listen/notify의 최대 페이로드 크기 8k가 제한적임
- 스트리밍 테이블과 풍부한 타입 지원을 원함
- Postgres에서 큐를 구현하는 것에 대한 좋은 PostgresFM 에피소드 추천
- PgQueuer가 Postgres RPC 호출, 트리거 및 cronjobs(pg_cron)을 잘 통합함
- River 라이브러리도 참고할 만함
- 예약된 작업 등을 지원함
- 디버깅을 위한 UI도 제공함
- Broadcaster를 PUB/SUB 작업에 사용 중임
- MySQL에서 가장 간단한 작업 큐 예시
-
update job_table set key=value where ... limit 1
구문 사용 - 간단하고 원자적임
- PostgreSQL은
update ... limit
구문을 허용하지 않음
-
- MySQL 사용자지만 PostgreSQL을 탐구 중임
- 많은 기능을 기본적으로 제공함
- 매우 흥미로운 도구임
- Procrastinate 라이브러리도 있음
- PostgreSQL의 LISTEN/NOTIFY를 사용함(옵션으로 끌 수 있고 폴링 사용 가능)
- 동기 및 비동기 작업, 주기적 작업, 재시도, 작업 잠금, 우선순위, 작업 취소/중단, Django 통합(옵션)을 지원함
- Procrastinate의 공동 유지보수자임