최종 그림
위치서비스
위치전송
- DAU 10억, 평균적으로 주당 35시간 사용 가정. 10억 * 35분 = 주당 350억분 = 하루 50억분 사용
- GPS 좌표 매초 전송시 50억분 * 60초 = 하루 3000억 건 요청 발생 ⇒ QPS 환산시 3백만
- 15초마다 변경된 좌표를 모아서 전송시 QPS 15 분의 1로 감소. 20만 QPS
저장소
- 위치정보 업데이트가 빈번하게 발생하기 때문에 일관성보다는 가용성에 무게를 둔 DB 필요
지도표시 서비스
지도타일 사전 계산
- 모든 지도타일을 동적으로 계산하게 되면 서버에 심각한 부하가 발생하고 캐시 활용이 힘들다
- 타일 하나는 256 x 256 픽셀
- 확대수준이 1단계 올라갈때 마다 필요 타일 갯수는 4배씩 증가
- 세계지도를 최대 확대 수준으로 제공시 약 4.4조개의 타일 필요. 타일당 100KB 로 계산시 약 440PB 필요
- 지구 표면가운데 90% 는 인간이 살고 있지 않은 바다, 사막, 산간 과 같은 지역이기때문에 10~ 20% 정도로 타일 갯수를 줄일 수 있다
지도표시
- WebGL 기술을 사용하기 위해 클라이언트에 이미지 대신 벡터 정보를 전송
- 벡터 사용시 이미지에 비해 압축률이 뛰어나고, 지도 확대/축소 시 매끄럽게 동작
- 이미지를 그대로 사용시 확대시 순간적으로 이미지가 늘어지고 픽셀이 도드라져 보이는 단점이 있음
지오코딩 서비스
주소를 위도와 경도 쌍으로 변환해준다
클라이언트에서 주소를 위도와 경도 쌍으로 변환할 수도 있지만, 지원하는 클라이언트 종류가 많아질 수록 변환 로직이 여러곳에서 관리되어야 하는 부담이 생긴다