피드로 돌아가기
InfoQBackend
원문 읽기
250ms Batching 기반 계정당 30+ TPS 달성 및 처리 시간 단축
30+ Updates per Second per Account: Uber Scales Ledger Processing with Batching
AI 요약
Context
Double-entry accounting 모델 기반의 엄격한 직렬화 요구사항으로 인한 단일 계정 Write Contention 발생. Per-request 처리 방식의 잦은 Storage I/O와 Coordination 비용으로 인한 Hot Account 병목 현상 심화.
Technical Solution
- Account Affinity 기반의 250ms Time-bound Batching 도입을 통한 Storage I/O 횟수 최소화
- Redis Coordination을 활용한 업데이트 그룹화 및 효율적인 배치 큐 관리
- 단일 Ledger Read/Write Cycle 내 여러 업데이트를 통합 처리하는 Atomic Unit 실행 구조 설계
- Optimistic Atomic Update 적용을 통한 동시성 제어 및 수평적 확장성 확보
- Batch Window Size 조절을 통한 처리 효율성과 End-to-End Latency 간의 Trade-off 최적화
- Operation 레벨의 Failure Isolation 설계를 통한 Retry Amplification 방지 및 시스템 안정성 강화
Impact
- 단일 계정 기준 초당 30회 이상의 Update 처리 성능 확보
- 수 시간 소요되던 Pipeline 처리 시간을 수 분 단위로 대폭 단축
Key Takeaway
강한 일관성이 필요한 금융 시스템에서 개별 요청의 직렬화 병목을 해결하기 위해, 적절한 Windowing 전략과 Atomic Batching을 결합한 Throughput 최적화 설계의 중요성
실천 포인트
1. Write Contention이 심한 Hot Key 발생 시 Per-request 처리 대신 Time/Size 기반 Batching 검토
2. 일관성 유지를 위해 Batch 단위의 Atomic Update 및 Optimistic Locking 메커니즘 적용
3. Batch Window 설정 시 비즈니스 허용 Latency와 시스템 Throughput 간의 상관관계 분석
4. 전체 배치 실패가 아닌 개별 Operation 단위의 Failure Isolation 전략 수립