본문 바로가기
database

[DB 10편] MySQL 확장성 (스케일링, 샤딩)

by 무대포 개발자 2022. 11. 25.
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

댓글