Uber, 실시간 위치 업데이트를 위한 RAMEN 시스템의 기술적 진화
Uber는 초기 폴링 방식에서 RAMEN 시스템으로 전환하여 실시간 위치 업데이트를 구현, SSE 기반으로 시작함.
SSE의 한계로 인해 gRPC 기반으로 RAMEN을 업그레이드, 양방향 스트리밍 및 프로토콜 버퍼를 활용하여 성능 개선.
gRPC 전환을 통해 지연 시간 단축, 푸시 성공률 향상 등의 효과를 얻었으며, 개발자들은 실시간 시스템 설계에 대한 인사이트를 얻음.
RAMEN 아키텍처: SSE에서 gRPC로의 전환
초기 Uber의 RAMEN은 SSE(Server-Sent Events)를 사용하여 실시간 위치 정보를 전송했다. 구체적으로, HTTP Long Polling의 대안으로 선택되었지만, 단방향 통신으로 인해 메시지 전송 확인에 30초의 지연이 발생했다. 따라서, Uber는 gRPC를 도입하여 양방향 스트리밍을 구현하고, 프로토콜 버퍼를 통해 데이터 전송 속도를 향상시켰다.
gRPC 전환의 기술적 장점과 트레이드 오프
gRPC로의 전환은 실시간 응답 속도를 개선하고, 이중 연결 문제를 해결했다. 반면, gRPC는 SSE보다 복잡한 설정과 관리가 필요하며, Protocol Buffers의 학습 곡선이 존재한다. 결과적으로, Uber는 P95 지연 시간을 45% 개선하고, 푸시 성공률을 1~2% 향상시켰으며, 바이너리 데이터 전송의 유연성을 확보했다.
실시간 시스템 설계 시 고려사항
Uber의 사례는 실시간 시스템 설계 시 프로토콜 선택의 중요성을 보여준다. 구체적으로, SSE와 같은 단방향 프로토콜은 단순하지만, 양방향 통신이 필요한 경우 한계가 있다. 따라서, gRPC와 같은 양방향 스트리밍 프로토콜을 고려하여 메시지 신뢰성과 성능을 모두 확보해야 한다. 결과적으로, 확장성과 유지보수성을 고려한 아키텍처 설계를 통해 안정적인 서비스 운영을 보장해야 한다.