피드로 돌아가기
Dev.toBackend
원문 읽기
Kafka 파티셔닝 기반 단일 스레드 엔진으로 구현한 200ms 지연시간의 실시간 트레이딩 시스템
Building a Real-Time Opinion-Trading Engine: An Anatomy
AI 요약
Context
초단위로 가격이 변동하는 예측 시장 특성상 엄격한 주문 순서 보장과 실시간 업데이트가 필수적인 상황. 기존 분산 처리 방식으로는 동시성 제어 문제로 인한 Race Condition과 데이터 정합성 훼손 위험이 상존함.
Technical Solution
- Kafka를 market_id 기반으로 Partitioning 하여 특정 시장의 모든 주문이 단일 Consumer에 순차적으로 도달하는 구조 설계
- Matching Engine을 단일 스레드 In-memory 상태 머신으로 구현하여 락 경합 제거 및 결정론적 처리 보장
- 상태 유실 방지를 위해 모든 이벤트를 Kafka에 Durable하게 기록하고 30초 주기 Postgres Snapshot을 통한 복구 시간 최적화
- Matching Engine과 Wallet Service를 비동기 이벤트 기반으로 분리하여 정산 처리의 원자성 확보 및 성능 병목 제거
- Limit Order와 Slippage Protection 로직을 도입하여 클라이언트-서버 간 가격 괴리에 따른 불공정 거래 방지
- Redis Pub/Sub과 WebSocket을 연동하여 최대 10Hz 빈도로 가격 업데이트를 전송하는 실시간 UX 파이프라인 구축
실천 포인트
1. 상태 기반 엔진 설계 시 In-memory 처리와 Event Sourcing 기반 복구 전략을 함께 검토할 것
2. 금융 트랜잭션 처리 시 동기 API 호출 대신 Immutable Ledger 방식의 비동기 업데이트 구조를 채택할 것
3. 고빈도 업데이트 발생 시 클라이언트 부하 방지를 위해 Throttling(예: 10Hz 제한)을 적용할 것
4. 정산 시스템 설계 시 (MarketID, UserID)와 같은 고유 키를 활용한 Idempotent 처리 로직을 필수 구현할 것