피드로 돌아가기
Dev.toBackend
원문 읽기
Global Event Bus의 Regionalization을 통한 Redis 메모리 71% 절감 및 p99 Latency 180ms 달성
Why Hytales Treasure Hunt Engines Explode Under Load (And How We Fixed It Without Losing Ourselves)
AI 요약
Context
단일 Global Event Channel 기반의 pub/sub 구조로 인해 2,500명 동접자 환경에서 Redis 메모리 급증 및 OOM 발생. 전 지역 통합 스트림 사용에 따른 데이터 병목으로 Treasure spawn Latency가 2.4초까지 치솟으며 시스템 전체가 마비되는 한계 노출.
Technical Solution
- Biome ID 기반의 6개 독립 Redis Stream 도입을 통한 Region별 Event Bus 격리
- Go 기반 Event Bus Gateway 구축으로 Consumer가 아닌 Fan-out Router 역할 수행 및 k3s 노드 배치
- Consumer Group별 max-in-flight 32개 제한 및 Exponential Backoff 적용을 통한 Backpressure 제어
- Lua 스크립트를 활용한 Redis 메모리 6GB 임계치 기반 강제 GC 수행 및 allkeys-lru 정책 설정
- Client-side 활성화 로직을 ETag Locking 기반의 TreasureCore 마이크로서비스로 이전하여 데이터 정합성 확보
- Cross-region Spawn 완전 제거를 통한 이벤트 전파 범위의 엄격한 Bounded Context 정의
실천 포인트
1. 단일 Global Channel의 병목 여부 확인 및 도메인/지역 기반의 Stream 분리 검토
2. Client-side State 변경 로직의 Server-side 이전 및 ETag 등을 활용한 동시성 제어 적용
3. Redis Stream 사용 시 max-in-flight 제한 및 NACK 기반의 Backoff 전략 수립
4. 메모리 임계치 도달 전 Lua 스크립트 등을 통한 선제적 자원 회수 메커니즘 구현