샤딩(Sharding)

  • 데이터베이스를 물리적으로 쪼개는 기술

  • 동시 접속자( CCU: Concurrent connected User )를 늘릴 수 있으며 물리적 한계의 안정성을 어느정도 보장해줄 수 있음
    ( DB 중 하나가 망가지거나 없어져도 시스템은 작동할 수 있음 )

  • 데이터를 여러 샤드(쪼개진 DB)에 분산시켜 병렬적 처리가 가능해 성능이 향상됨

image

관리

  • 샤딩된 DB들을 균등하게 사용할 수 있도록 설계해야하며, 샤드의 수는 가변적일 수 있음

단점

분산 트랜잭션

  1. 분산된 데이터 베이스는 분산 트랜잭션을 수행함
    ( 이 때 트랜잭션 매니저가 생김 )

  2. 트랜잭션 매니저는 Two-Phase Commit 프로토콜을 사용해 트랜젹선의 ACID를 보장해줌
    ( Two-Phase Commit: 두번에 걸쳐서 Commit을 진행)

  • Commit이 끝나도 DB의 최신 값으로 갱신되는 타이밍이 조금씩 다를 수 있음

  • 분산 트랜잭션은 단일 트랜잭션보다 매우 느림

고려 환경

  • 데이터 베이스 크기가 커 단일 서버로 처리하기 어려울 때

  • 동시 접속자가 많아 단일 DB 서버의 연결 한계(max_connections)를 초과했을 때

  • 현재 DB 성능이 부족해 응답 시간이나 길거나 처리 속도가 느릴 때

  • 복잡한 샤드 관리와 모니터링 처리가 가능한 기술적 능력과 자원이 충분할 때

  • 분산 트랜잭션 관리를 할 수 있을 때

Hash 함수

  • 빠른 데이터 검색을 위해 효율적인 구조로 정보를 저장하는 방식

image

  • 개별 체이닝(Separate Chaining)은 충돌 발생 시 그림과 같이 연결 리스트로 연결(link)하는 방식

image

  • 오픈 어드레싱(Open Addressing) 방식은 충돌 발생 시 그림과 같이 탐사를 통해 빈 공간을 찾아나서는 방식

Consistent Hashing(일관된 해싱) 기법

  • 해시 테이블 크기가 조정될 때 평균적으로 Key/N(서버 수와 동일)의 키만 재배치하도록 하는 해시 기술

image

image

  • S1~3 은 각각 해시 테이블 이라 생각하고 req 는 거기에 저장될 데이터라 생각하면 편하다!

image

  • 만약 이처럼 S2이(해시 테이블) 사라지면 다음 테이블로 최소한의 이동을 하는 것이다!

Reference

Nesoy Blog
나무위키