피드로 돌아가기
Why Hytales Treasure Hunt Engines Explode Under Load (And How We Fixed It Without Losing Ourselves)
Dev.toDev.to
Backend

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)

Lillian Dube2026년 5월 27일4advanced

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 스크립트 등을 통한 선제적 자원 회수 메커니즘 구현

원문 읽기