요구 사항은 3가지 기능을 제공한다.
- 위치 서비스 : 사용자의 위치를 기록하는 역할을 담당
- 경로 안내 서비스 : A to B 까지 합리적인 빠른 경로를 찾는 역할을 담당
- 지도 표시 : 확대 수준에 따라 적절한 지로를 렌더링하는 역할을 담당
각 컴포넌트 별 개요
- 로드밸런서
- 트래픽 분배기, 요청에 따라 위치서비스, 경로 안내 서비스 클러스터에 요청을 적절히 분해
- 위치 서비스
- 사용자의 위치를 연속적으로 저장한다. 많은 쓰기 요청을 처리해야 하기 때문에 확장성이 높은 db를 사용한다. 이전의 히스토리가 크기 중요하지 않기 때문에, 일관성 보다 가용성을 위주로 생각한다.
파티션 키는 user_id로 사용한다.
- 경로 안내 서비스
- 주소를 위도와 경도로 바꿔주는 서비스 : 장소의 이름이나, 도로명 주소등을 위도와 경도 쌍으로 변경한다. db는 geometry를 쉽게 저장할 수 있는 db를 사용
- 최단 경로 서비스 : 출발지와 목적지의 위치를 받아. n개의 최단 경로를 반환한다.
- 예상 도착 서비스 : 사용자의 위치 정보등을 통해 교통량을 계산한고, 주기적으로 도착 예정시간을 반환한다.
- 순위 결정 서비스 (부가) : 사용자의 필터링에 맞게 n개의 최단 경로 중 추천된 경로 순으로 반환한다.
- 지도 표시 서비스
- 각 지도의 타일 이미지 데이터를 cdn으로 저장한다.
- 2가지 방법으로 고안 알 수 있음
- clinet side : 클라이언트 사이드에서 사용자의 위치를 기반으로 근접한 cdn url을 생성한다
장점 : network hop이 줄어든다. 서버를 거치지 않고 갈 수 있음
단점 : image url 변경 매우 힘들다 (변경하기 위해서는 client가 변경되어야 한다_
- server side : 사용자의 위치를 기반으로 적절한 url을 응답해준다.
장점 : image를 변경하기 쉽다. url만 변경하면 되므로
단점 : network hop이 추가가 된다.