728x90
반응형
목차는 DB 목차 에 있습니다.
[DB 10편] MySQL 확장성 (스케일링, 샤딩)
읽기 영역 확장성
- 레플리카 서버를 클러스터로 묶습니다.
- 이렇게 묶은 클러스터 앞에 Load balancer 를 구성합니다.
- 읽기 쿼리가 요청이 들어오면 Load balancer 는 요청을 분배해줍니다.
- HAProxy, 물리 Load balancer, 네트워크 load balancer 가 있습니다.
쓰기 영역 확장성
메시지 기반 오픈소스
- 큐 또는 카프카와 같은 메시지 기반 오픈소스를 사용하면 쓰기 요청이 늘어나도 처리가 가능합니다.
- 단, 메시지 기반 처리 방식은 준실시간 처리이기에 비즈니스 요구사항과 맞는지 확인이 필요합니다.
샤딩
- 쿼리 최적화, 인덱스 최적화, 메시지 기반 오픈소스를 써도 안될때는 샤딩을 고려해보는 것이 좋습니다.
- 샤딩에는 기능적 파티셔닝 (테이블 별 샤딩), 데이터 샤딩 (데이터 별 샤딩) 이 있으며, 데이터 샤딩을 많이 사용하는 편입니다.
샤딩
고려사항
- 데이터를 분할해서 각 서버에 저장하기에 조인문에 필요한 데이터들은 하나의 서버로 저장하도록 설계하는 것이 좋습니다.
- 예를 들어, test, test2 라는 테이블이 있으며, 해당 테이블은 ID (파티셔닝 키) 라는 값을 기준으로 특정 서버에 저장된다고 가정하겠습니다. 이런 상황에서 두 테이블을 조인을 할 때, 다른 서버로 접근하지 않기 위해 하나의 서버로 데이터를 분배하는 것이 좋습니다.
- 데이터가 너무 많아져 하나의 서버에서 더 이상 감당이 안될 경우입니다.
- 데이터 재배치 또는 안정 해시 기법을 활용을 고려해봐야 합니다.
샤딩 기법
레인지 샤딩
- 데이터베이스 별로 샤딩키의 범위를 지정해서 처리하는 샤딩 방법입니다.
- 예를 들면, 1-5번은 1번 database, 6-10번은 2번 database 이런식으로 처리합니다.
모듈러 샤딩
- 샤딩키에 모듈러 연산을 적용하여 분배하는 방식입니다.
Reference
'database' 카테고리의 다른 글
[DB 12편] MySQL 실행계획 2탄 (실행계획 상세) (0) | 2022.11.28 |
---|---|
[DB 11편] MySQL 실행계획 1탄 (실행계획 순서) (0) | 2022.11.28 |
[DB 8편] MySQL 복제 정리 (0) | 2022.11.24 |
[DB 7편] MySQL 인덱스 성능 관련 정리 (커버링인덱스) (0) | 2022.10.15 |
[DB 9편] MySQL 인덱스 성능 관련 정리 (Auto increment, UUID) (0) | 2022.10.15 |
댓글