피드로 돌아가기
Hacker NewsDatabase
원문 읽기
Single Postgres 서버 기반 초당 144K Write 및 43K Workflow 처리 검증
Does Postgres Scale?
AI 요약
Context
Durable Workflow 시스템의 핵심 병목인 Write 성능에 대한 Postgres의 확장성 의문 제기. 워크플로우 실행 시 상태 체크포인트를 위한 빈번한 DB 쓰기 작업이 시스템 전반의 처리량을 결정하는 구조적 한계 존재.
Technical Solution
- UUIDv7 Primary Key와 Async Python Client를 활용한 고부하 Write Throughput 측정 설계
- pg_stat_activity 분석을 통한 Write-Ahead Log(WAL) flush 과정의 단일 프로세스 병목 지점 식별
- 단순 Insert와 Workflow 상태 업데이트(31개 컬럼, 9개 인덱스) 간의 데이터 볼륨 차이에 따른 성능 격차 분석
- Queue 기반 시스템의 Lock Contention 해결을 위해 SKIP LOCKED 최적화 및 다중 큐 파티셔닝 전략 도입
- 단일 WAL 쓰기 한계 도달 시 Sharding을 통한 수평 확장 가능성 제시
Impact
- 단일 서버 기준 최대 144K Writes/sec (일일 120억 건 처리 가능) 달성
- Durable Workflow 처리 시 최대 43K Workflows/sec (일일 40억 건 처리 가능) 확인
- 다중 큐 파티셔닝 적용 시 Queued Workflow 처리량을 12.1K에서 30.6K/sec로 개선
Key Takeaway
Write-intensive 워크로드에서 Postgres의 실질적 병목은 CPU나 IOPS보다 WAL flush의 동기적 특성에 기인함. Queue 설계 시 발생하는 Lock Contention은 파티셔닝을 통해 WAL 성능 한계치까지 끌어올릴 수 있다는 설계 원칙 도출.
실천 포인트
- 고빈도 쓰기 시스템 설계 시 CPU/Memory보다 WAL 쓰기 지연 및 Lock 경합 여부를 최우선 검토 - Queue 구현 시 단일 테이블 헤드에 집중되는 경합을 방지하기 위해 큐 파티셔닝(Partitioning) 도입 고려 - 인덱스 개수 증가가 WAL 플러시 데이터 양을 증가시켜 전체 Throughput을 저하시키는 상관관계 주의