배달의민족, OSRM, Kafka, Redis로 배차 정확도 UP!

by DD
11개월 전
조회수 29

배민커넥트 배차 시스템에서 실거리 기반 배차를 위해 OSRM을 도입함

Kafka를 활용한 이벤트 드리븐 아키텍처를 구축하고, Redis를 캐싱으로 활용함

Redis Cluster 적용 및 데이터 압축, TTL 최적화를 통해 성능 및 안정성을 확보함

이벤트 기반 아키텍처 설계

Kafka를 활용하여 배달 상태 변경 이벤트를 처리하고, EventProcessorFactory를 통해 각 이벤트에 맞는 로직을 수행한다. 구체적으로, DeliveryCreated, PickupLocationChanged 등 다양한 이벤트에 따라 실거리 데이터를 관리한다. 따라서 데이터 일관성을 유지하며, 시스템 확장성을 확보한다.

Redis 성능 최적화 전략

초기에는 Redis String에 실거리 데이터를 저장했으나, 네트워크 대역폭 초과 문제를 겪었다. Zstd 압축을 시도했지만, 효과가 미미했다. 반면 Redis Hash 자료구조를 활용하여 읽기/쓰기 성능을 개선하고, Redis Cluster를 적용하여 쓰기 트래픽 분산을 달성했다.

실전 적용 가이드: TTL 및 클러스터 모드

과도한 TTL 설정은 네트워크 오버헤드를 유발하므로, 배달 완료 시점에 명시적 삭제 방식으로 변경했다. Redis Cluster를 적용하여 쓰기 트래픽 분산을 구현하고, 수평 확장을 가능하게 했다. 따라서 서비스 안정성을 높이고, 트래픽 증가에 유연하게 대응할 수 있다.

배차 정확도를 높이는 실거리 시스템 구축하기: OSRM, Kafka, 그리고 Redis