GN⁺ 2023-09-25 | parent | ★ favorite | on: Postgres 큐 기술 선택(adriano.fyi)
Hacker News 의견
  • Kafka의 간결함, 지속성, 고장 허용성이 인정받지만, 분산된 특성은 대부분의 사용 사례에서 복잡성을 더할 수 있다.
  • Postgres 큐는 Redis 큐를 대체할 수 있지만, SQS 큐를 대체할 수는 없다.
  • Postgres는 시스템이 가동된 이후 4억 이상의 이벤트를 처리하며, 하루에 약 100만 개의 이벤트를 처리하는 데 사용되었다.
  • 일반 테이블을 사용하여 SELECT FOR UPDATE SKIP LOCKED를 사용하는 것은 모든 ORM/Query DSL 프레임워크에서 작동하는 간단한 접근 방식이다.
  • LISTEN/NOTIFY를 사용하여 PostgreSQL을 pub/sub 버스로 사용하는 주요 단점은 LISTEN이 세션 기능이므로, 문장 수준의 연결 풀링과 호환되지 않는다.
  • Postgres를 애플리케이션 큐로 사용하는 것은 트랜잭션성의 이점이 있어, 예약된 비동기 작업이 이로부터 혜택을 받는다.
  • Postgres는 큐를 위해 확장할 수 있지만, AWS, GCP, Azure에서 SQS 또는 다른 큐 스택을 설정하는 것이 더 간단하고 목적에 맞게 제작되었다.
  • Postgres는 github CI 인스턴스에서 1200jobs/s로 벤치마크를 실행하며, 추가 작업자를 통해 5000jobs/s로 확장되었다.
  • Elixir의 Oban을 사용한 Postgres는 백그라운드 작업 주변의 트랜잭션 의미론이 편리하게 증명된 수십만에서 수백만 개의 작업을 일일이 처리하는 데 사용되었다.
  • 47M 작업이 처리된 구현은 VACUUM을 위한 SKIP LOCKED, 지연된 작업, 재시도, 상태 업데이트, "적어도 한 번"과 같은 비싼 패턴을 구현하기 위한 인덱스가 있는 내구성 있는 저장의 이점을 강조한다.