필요 기능
- 사용자 위치 갱신
- 경로 안내 서비스
- 예상 도착 시간 서비스(ETA)
- 지도표시
사용량 추정
- DAU
- 사용자 위치 갱신
- 주기 : 30초
- QPS : 10,000,000 / 30초 ≈ 333,333
- 경로 안내 서비스
- 하루에 사용자 중 20%가 경로 안내 요청
- QPS : 10,000,000 * 0.2 / 86,400초 ≈ 23
- ETA 서비스
- 경로 안내 서비스와 함께 계산
- QPS : 23
- 지도 표시
- 사용자 중에 50%가 하루에 한 번 지도를 새로 로딩
- QPS : 10,000,000 * 0.5 / 86,400초 ≈ 58
아키텍처 선택
- 경로 안내 서비스
- 솔루션: API Server
- 역할: 사용자가 요청한 출발지와 목적지 간 최적 경로를 계산하고 안내합니다.
- 선정 이유: RESTful API 서버는 사용자 요청에 실시간으로 응답하며 비즈니스 로직을 효율적으로 처리할 수 있습니다. 또한, 수평적 확장이 용이하여 대규모 트래픽을 감당할 수 있습니다.
- 지오코딩 서비스
- 솔루션: API Server
- 역할: 사용자가 입력한 주소를 위도/경도 좌표로 변환합니다.
- 선정 이유: 지오코딩은 외부 API와의 연동이 많기 때문에 API 서버로 처리하는 것이 적합합니다. 비즈니스 로직이 복잡하지 않으므로 가볍게 처리할 수 있습니다.
- 지오코딩 데이터베이스
- 솔루션: Cassandra DB
- 역할: 지오코딩 결과(위도/경도)를 저장하고, 자주 요청되는 데이터를 빠르게 제공.
- 선정 이유: Cassandra는 NoSQL로서 확장성, 가용성, 고가용성을 제공하며 분산 환경에서 효율적입니다. 사용자 위치 데이터는 빈번한 읽기/쓰기 작업이 있으므로 Cassandra의 분산 처리 능력이 적합합니다.
- 적응형 ETA 및 경로 변경
- 솔루션: Kafka + API Server
- 역할: 실시간 교통 상황 변화에 따라 ETA를 실시간으로 업데이트하고, 필요한 경우 경로를 재설정합니다.
- 선정 이유: Kafka는 대량의 실시간 데이터를 처리할 수 있으며, API 서버는 비즈니스 로직 처리를 담당합니다. 실시간으로 변동되는 데이터를 빠르게 반영해야 하므로 Kafka가 적합합니다.
- 활성 사용자
- 솔루션: Redis
- 역할: 현재 활성 상태의 사용자 정보를 빠르게 관리하고 저장합니다.
- 선정 이유: Redis는 인메모리 데이터베이스로 매우 빠른 읽기/쓰기 성능을 제공하며, 실시간으로 자주 접근되는 데이터에 적합합니다.
- 경로 계획 서비스
- 솔루션: API Server
- 역할: 출발지와 목적지를 기반으로 최적 경로를 계획하고 경로 안내를 제공합니다.
- 선정 이유: 실시간으로 다수의 경로 요청을 처리하며, 비즈니스 로직 처리에 유리한 API 서버를 통해 경로를 계획하는 것이 적합합니다.
- 순위 결정 서비스
- 솔루션: API Server
- 역할: 경로 필터링(유료 도로 제외, 고속도로 제외 등)을 적용하고, 최종 경로 순위를 결정하여 사용자에게 제공합니다.
- 선정 이유: API 서버를 사용하여 사용자 맞춤형 필터링을 적용하고 빠른 경로 계산이 가능합니다.
- 필터링 서비스
- 솔루션: API Server
- 역할: 유료 도로나 고속도로, 특정 구역을 필터링하여 사용자가 원하는 경로를 제공합니다.
- 선정 이유: 사용자 맞춤형 경로를 빠르게 제공할 수 있는 API 서버로 필터링 로직을 처리합니다.