월간-CS, 대규모 시스템 설계면접 2권 스터디 발표 자료입니다. - [Ref]
1. 요구사항 이해 (73~81p)
구글 맵(Google Map)을 설계
DAU 10억
기능
위치 갱신, 경로 안내, ETA, 지도 표시 등에 포커스
실시간 교통 상황 고려
다양한 교통 수단 지원 (도보, 버스, 지하철 등)
수 TB급의 도로 데이터를 사전에 확보한 상태
사업장 위치 및 사진은 고려하지 않음
비기능
경로 안내는 높은 정확도를 요구한다
지도 표시는 부드러운 경로 표시로 구현되어야 한다.
데이터 및 배터리 사용량은 낮아야 한다.
일반적인 가용성 및 규모 확장성 요구사항을 충족해야 한다.
1.1. 몇가지 기본 상식 (75~81p)
지오코딩 : 물리적 주소를 측위 시스템의 좌표로 변환
인터폴레이션(interpolation), GIS(Geographic Information System) 등으로 구현 가능
역-지오코딩 : 측위 시스템의 좌표를 물리적 주소로 변환
지오해싱 : 지도 위 특정영역을 영문자와 숫자로 구성된 짧은 문자열로 대응
경로 안내 알고리즘 : 지오해싱과 같이 세분화된 격자 단위로 도로 그래프를 관리
데이크스트라(Djikstra) 및 A* 경로 탐색 알고리즘 등으로 구현 가능
계층적 경로 안내 타일 : 구체성 정도를 상,중, 하로 구분하여 경로 안내 타일을 준비
2. 개략적인 규모 추정(82~85p)
저장소 사용량 및 서버 대역폭 관점에서 개략적인 규모 추정이 필요합니다.
2.1. 저장소 사용량 (82~84p)
세계 지도를 3m 단위까지 세분화하기 위해서는 21개의 확대 단계가 필요합니다.
확대 수준 별로 필요한 타일은 4의 거듭제곱으로 증가하여 4.3조 개가 필요합니다,
(256, 256)의 PNG 한 장은 약 200 KB이 들고 전체는 총 880 PB가 필요합니다.
RGB (1, 1)은 3 Byte
256 * 256 * 3 Byte = 196,608 Byte / 1000 KB/Byte = 196 KB
(바다나 산간등에서는 RGB 반복도가 높아 압축율이 높을 것이므로)
전체 용량의 10~20%인 88 ~ 176 PB 정도가 21 확대시의 용량일 것입니다.
확대가 1 단계씩 내려가는 점을 고려하면 총 용량은 118 ~ 236 PB이 필요합니다.
2.1.1. 21단계의 확대 단계 (계산)
2.1.2. 4^21 거듭 제곱
2.2. 서버 대역폭 (84~85p)
DAU가 10억
경로 안내 평균 사용 시간 35분/주
경로 안내 총 사용 시간 350억 분/주
경로 안내 총 사용 시간 50억 분/일
매초 전송 시, 3000억 요청/일, 300만 QPS
15초 마다 전송 시, 200억 요청/일, 20만 QPS
3. 개략적인 설계안 제시 및 동의 구하기
기본적인 아키텍처 설계
해당 아키텍처를 클라우드 환겨에서 설계
15초 마다 데이터를 위치 정보를 기록하기 위해
Apache Kafka와 Kafka Consumer를 이용해서 해당 내역을 반영
경로 안내 서비스의 지오코딩 DB를
Aurora for MySQL을 Global Database 모드를 사용하면 멀티 리전 운영 가능
일부 위치 서비스는 OPTIONS 메서드만 캐싱하는 것으로
브라우저 레벨에서 네트워크 전송 시간을 50% 이상 개선 가능