피드로 돌아가기![[System Design] Uber RAMEN: How Ride-Hailing Apps Push Real-Time Notifications to Millions of Devices](/_next/image?url=https%3A%2F%2Ftsewlmecqtvqphyhezcm.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fthumbnails%2Ff1c25a49-7ac6-4d51-aea0-bcc2c96b5949.webp%3F&w=3840&q=75)
Dev.toInfrastructure
원문 읽기
gRPC/QUIC 기반 RAMEN 시스템으로 알림 지연시간 100ms 미만 달성
[System Design] Uber RAMEN: How Ride-Hailing Apps Push Real-Time Notifications to Millions of Devices
AI 요약
Context
기존 Polling 방식의 잦은 요청으로 인한 서버 리소스 낭비와 0~3초의 전송 지연 발생. 500만 명의 드라이버 대상 실시간 매칭을 위해 대규모 동시 연결을 효율적으로 처리하는 Push 모델의 필요성 증대.
Technical Solution
- Fireball, API Gateway, RAMEN Server로 이어지는 3계층 분리 구조를 통한 결정, 생성, 전송 로직의 책임 분리
- SSE(Server-Sent Events)의 단방향 제약을 극복하기 위해 gRPC Bidirectional Stream 도입으로 Full-duplex 통신 구현
- HTTP/3 및 QUIC 프로토콜 채택을 통한 모바일 네트워크 환경의 Connection Migration 지원 및 Head-of-line Blocking 제거
- Protobuf 기반 Binary Framing을 적용하여 페이로드 크기 최소화 및 CPU 오버헤드 감소
- Apache Helix와 ZooKeeper를 활용한 Sharding 설계로 수백 대의 Stateful 서버 간 연결 상태 관리 및 자동 Rebalancing 구현
- User UUID 해시 기반의 정교한 라우팅 전략을 통해 특정 사용자의 소켓이 연결된 서버로 메시지를 정확히 전달하는 구조 설계
실천 포인트
1. 실시간성 요구사항이 1초 미만인 경우 Polling 대신 gRPC Stream 또는 WebSocket 검토
2. 모바일 클라이언트 대상 서비스라면 네트워크 전환 시 연결 유지를 위해 QUIC 도입 고려
3. Stateful 서버 클러스터 구축 시 ZooKeeper와 같은 분산 코디네이터를 통한 Sharding 및 Failover 전략 수립
4. 전송 효율 극대화를 위해 JSON 대신 Protobuf와 같은 Binary Serialization 포맷 적용