TIL

1장 근접성 서비스

1단계: 문제 이해 및 설계 범위 확정

2단계: 개략적 설계안 제시 및 동의 구하기

API 설계

다음 REST API가 필요할 것이다.

데이터 모델

개략적 설계

graph TD;
    A[사용자] -->|서비스 요청| LB[로드 밸런서]
    LB -->|LBS 요청| B[LBS]
    LB -->|사업장 서비스 요청| D[사업장 서비스]
    B -->|읽기 연산| C1[사본 데이터베이스 1]
    B -->|읽기 연산| C2[사본 데이터베이스 2]
    B -->|읽기 연산| C3[사본 데이터베이스 3]
    D -->|추가/갱신/삭제 요청| E[주 데이터베이스]
    E -->|데이터 복제| C1
    E -->|데이터 복제| C2
    E -->|데이터 복제| C3

주변 사업장 검색 알고리즘

지오해시 (Geohash)

쿼드 트리 (quadtree)

구글 S2

추천

색인 방법 회사
지오해시 Bing 지도, 레디스, 몽고DB, 리프트
쿼드트리 엑스트
지오해시 + 쿼드트리 Elasticsearch
S2 구글 맵, 틴더

지오해시 vs 쿼드트리

3단계: 상세 설계

데이터베이스의 규모 확장성

classDiagram
    class  geospatial_index{
        geohash : VARCHAR
        business_id : BIGINT
    }

캐시

지역 및 가용성 구역

최종 설계도

graph TD;
    A[사용자] -->|서비스 요청| LB[로드 밸런서]
    LB -->|LBS 요청| B[LBS]
    LB -->|사업장 서비스 요청| D[사업장 서비스]
    B -->|읽기 연산| F1[사업장 정보 캐시 - Redis]
    B -->|읽기 연산| F2[지오해시 캐시 - Redis]
    D -->|추가/갱신/삭제 요청| E[주 데이터베이스]
    E -->|데이터 복제| C1[사본 데이터베이스 1]
    E -->|데이터 복제| C2[사본 데이터베이스 2]
    E -->|데이터 복제| C3[사본 데이터베이스 3]
    C1 -->|데이터 동기화| F1
    C2 -->|데이터 동기화| F2