[TIL] 20241231 TIL : Sharding

Jaeyoung Ko·2024년 12월 31일
0

Sharding


데이터 베이스를 물리적으로 쪼개는 기술을 말한다. 하나의 게임 서버 데이터를 단일 데이터베이스를 통한 관리가 아닌, 여러 데이터베이스를 통해 관리를 하는 방식을 말한다. 각 shard는 독립적으로 관리되어 데이터베이스의 전체 크기와 처리 능력을 분산시킨다.


const shardNo = playerId % NUM_OF_SHARDS






Sharding의 효과

많은 connection을 준비시킬 수 있어서 CCU(Concurrent connected User) 동시 접속자들이 늘어나는 상황에서도 가용할 수 있는 리소스가 많기에 지장없이 핸들링 가능

성능 향상

데이터를 여러 샤드에 분산하여 병렬적 요청 처리를 통해 성능 향상

Consistent hashing 기법을 활용한 균등한 샤딩



다양한 sharding 전략: 데이터베이스 특성 및 요구사항에 따라 상이하게 적용된다.이 적용될 수 있습니다.

  • 키 기반 sharding: 키 값 기준의 데이터 분할
  • 리페어 기반 sharding: 데이터의 리페어 그룹 기준 분할

Hashing과 Sharding

해시 함수는 해시 테이블을 통한 빠른 데이터 검색과 효율적인 구조로 저장을 가능하게 한다.

이러한 해시함수에 있어서,

key값이 달라도 동일한 hash값이 나오는 경우인 Hash Collision이 발생하거나,

동일한 키 입력 시 항상 동일한 해시 값이 생성되는 특징을 가진다.



Consistent Hashing의 필요성

shard의 개수를 줄이는 상황을 가정하자. 이 때, 데이터 이동을 하지 않으면 기존 유저들은 잘못된 데이터베이스 shard에 접근하게 되는 상황이 발생할 수 있다.

이러한 식의 샤드의 총 개수가 자주 변경이 될 일은 없으나, 변경이 이루어질 때마다

  • 해시 값의 균등한 분포
  • 기존의 해싱 결과가 영향받지 않음

두 가지의 이슈를 감안해야 한다.

이러한 이슈를 위해, Consistent Hashing 기법을 통해 어느 정도 보완할 수 있다.





Sharding의 단점

sharding된 환경에서 transaction을 적용한다는 것은 상당히 어려운 부분이다.

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글