일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- router
- html5
- 백준 32029번
- localstorage
- 더 흔한 색칠 타일 문제
- 백준 28303번
- 자바스크립트
- ccw 알고리즘
- ERD
- MongoDB
- map
- 게임 서버 아키텍처
- HTTP
- 그리디
- JavaScript
- ucpc 2023 예선 i번
- insomnia
- Express.js
- ucpc 2024 예선 e번
- 지금 자면 꿈을 꾸지만
- Github
- string
- Next
- MySQL
- Prisma
- pm2
- ucpc 2023 예선 d번
- PROJECT
- 백준 32028번
- branch
Archives
- Today
- Total
dh_0e
[특강] 샤딩(Sharding) 본문
CCU가 엄청나게 늘어나면 Pool에는 커넥션이 메마르고, 데이터베이스가 부족해진다. 이 떄 샤딩이란 기술을 활용하여 이 문제를 해결해보자.
샤딩(Sharding)
- 데이터를 조각내 분산 저장하는 데이터 처리 기법으로 일괄적 관리가 힘든 거대 데이터베이스나 네트워크를 물리적으로 쪼개는 기술이다.
- 즉, 하나의 게임 서버 데이터를 하나의 데이터베이스에서 관리하는 것이 아닌 여러 데이터베이스에서 나눠서 관리를 한다는 것
장점
- 더 많은 커넥션을 준비시킬 수 있어 CCU가 늘어나도 크게 지장을 받지 않음
- 샤드는 독립적으로 작동하기 때문에 요청을 병렬적으로 처리할 수 있음 > 전반적인 성능 향상
- 특정 샤드가 문제가 생겨도 일부 유저들을 제외하고는 전체 게임 자체의 가용성은 계속 유지할 수 있음
방법
로직으로 샤드를 나눌 수 있다. 플레이어 ID % 샤드의 총 개수 = 저장되는 샤드 번호
ex) 샤드가 4개일 때, 플레이어 ID가 4, 8, 12, ... 이면 0번샤드에,1, 5, 9, ...이면 1번 샤드에 저장
범위 기반으로도 샤드를 나눌 수 있다. 1~1000 1번째 샤드, 1001~2000 2번째 샤드 ..
문제점
샤드의 총 개수는 회사의 재정적 문제나 게임의 흥행에 의해 줄어들 수도, 늘어날 수도 있음
해결 방법
위 문제점이 해결되기 위해 2가지를 해결 해야한다.
1. 해시 값들이 균등하게 분포되어야 함
2. 샤드의 총 개수와 같은 외부 요인으로 인해 기존의 해싱 결과가 지장을 받으면 안 됨
이를 어느정도 해결하는 방법이 Consistent Hashing 기법이다.
Consistent Hashing
- 해시 링을 기반으로 동작을 하는 해싱 기법
- 위 그림에서 req가 플레이어 ID이며 S가 샤드라고 할 때, 시계 방향으로 해시 링을 탐색해 나가면서 만나는 것이 첫 번째 샤드라고 할 때 아래 그림과 같이 샤드가 정해지며 플레이어 ID가 저장된다.
- 이 때, S2 샤드가 제거 된다고 가정하면, 플레이어 ID 4, 5를 제외하곤 재배치를 하지 않아도 된다.
- 전반적으로 데이터를 재배치하는 것이 아닌, 최소한의 이동만 할 수 있다.
- 또한 다음과 같이 가상 노드라는 개념을 도입하여 여러 가상 샤드를 링에 배치하면 샤드의 개수가 적을 때에도 적은 데이터만을 추가적으로 사용하여 데이터가 특정 샤드로 편중되는 것을 막아준다.
단점
- 일반적으로 트랜잭션은 단일 데이터베이스에서만 작동이 되도록 설계되어 있어 트랜잭션 적용에 어려움이 있다. (ACID 속성의 원자성때문)
- 여러 유저의 여러 테이블들을 JOIN해서 결과를 보여줘야 할 때에도 단일 데이터베이스에 비해서 느리다.
결론
- 장점처럼 단점도 명확하기 때문에 필요한 순간에만 적용을 하자.
샤딩 체크리스트
- [ ] 데이터베이스 크기가 커서 단일 서버로 처리하기 어려운가요?
- [ ] 동시 접속자가 많아 단일 데이터베이스 서버의 커넥션 한계를 초과합니까?
- [ ] 현재 데이터베이스 성능이 부족하여 응답 시간이 길거나 처리 속도가 느린가요?
- [ ] 복잡한 샤드 관리와 모니터링을 처리할 수 있는 기술적 능력과 자원이 충분한가요?
- [ ] 분산 트랜잭션 관리를 할 수 있는 역량이 있습니까?
'내일배움캠프 > 특강' 카테고리의 다른 글
[특강] 응용 계층? DNS? HTTP? (0) | 2024.06.21 |
---|---|
[과제] 전송 계층, TCP/UDP, TCP 오류, 흐름, 혼잡 제어 (0) | 2024.06.18 |
[특강] 연봉 1억 받는 개발자가 되는 법 (1) | 2024.06.07 |
[과제] Windows에서 사용되는 I/O 모델 (0) | 2024.06.04 |
[과제] 서브넷 마스크, 공인/사설 IP 주소, 정적/동적 IP 주소, 라우터/라우팅 (0) | 2024.05.30 |