클러스터, 샤딩 이런 용어들이 익숙하지 않아 공부한걸 정리한다.
일단 db에 대해 다시 생각해야 한다.
db는 단지 db 1개의 덩어리가 아니라 사실은
서버와 스토리지의 구성이다.
db는 서버 역할을 하는 db서버와, 데이터를 저장하는 저장소(스토리지)가 한 세트로 구성되어 있다.
클러스터링
서비스를 제공할 때 db server에 장애가 나면, 서비스가 멈추게 된다.
이것을 방지하기 위해 db서버를 늘리고, 하나의 저장소를 바라보도록 한다.
db서버의 부하가 줄어드는 장점이 있지만,
또 cpu나 메모리 자원 부하도 적어지지만,
병목현상 즉 몰려서 대기시간이 길어지는 상황이 생길 수 있다. 또 비용적 이슈도 있다.
클러스터링을 하는 다양한 방법이 있는데,
active-active, active-stanby 등이 있다.
active-active
- 두 서버 모두 활성화.
- 대기시간이 길어지는 상황 발생(병목현상)
active-stanby
- 하나의 서버만 활성화.
- 병목현상이 해결되는 장점이 있다.
- 이 서버에 장애가 발생하면 fail over진행 (fail over시 데이터 유실 가능성.)
- 스탠바이 하던 다른 서버를 엑티브 상태로 변환.
- fail over 이뤄지는 동안에는 영업손실이 필연적으로 발생 하고,
- db서버를 2대 구비하는데, 효율은 이전보다 1/2정도 안나온다는 단점이 있다.
레플리케이션
- 클러스터링을 진행시 fail over 동안 데이터 유실 가능성 있다.
- 레플리케이션은 master-slave개념을 기억하자.
- 마스터에 작업하는 데이터를 슬레이브로 복제한다.
- 마스터는 쓰기만 수행, 슬레이브는 읽기만 수행한다.
- 데이터 유실을 방지할 수 있고, 부하도 분산시킬수 있다.
- 그러다 단점으로는 서버비용 추가 발생과, 데이터 양이 많아지면 데이터를 찾는데 오래 걸린다.
- 처리방식을 동기로 했을때, 비동기로 했을때 다른데
- 동기방식은 replication시 속도가 느려진다.
- 비동기방식은 데이터 동기화 하기 때문에 일관성 있는 데이터를 얻지 못할 수 있다.
- 목적은 이렇다
- 데이터의 ==안정성.
- ==읽기 성능 개선
- 가용성 향상.
아래 그림에서 셀렉트는 slave에게 시킨다.
샤딩
- 데이터를 수평적으로 분할하는 방식이다
- 이 분할은 하나의 데이터 베이스 안에 테이블을 기준으로 할 수도 있고, 전체 데이터베이스 수준에서 일어날 수 도 있다.
- 테이블 샤딩과, 데이터베이스 샤딩으로 나눠진다.
- 데이터베이스 샤딩은
- 데이터베이스 스토리지를 여러 조각으로 나누어 각 조각을 다른 서버에서 관리하게 하는것.
- 데이터베이스 서버와, 데이터베이스 스토리지 모두를 나누게 된다.
- 각 서버는 데이터의 일부만을 관리한다.
- (이에 반해 레플리케이션은 모든 레플리카가 동일한 데이터 세트를 가지게 된다. )
- 테이블 샤딩은 테이블의 데이터를 여러 서버에 분산시키는 걸 말한다.
- 샤드 키를 기준으로 나누어 저장.
참고한 블로그
https://jordy-torvalds.tistory.com/entry/Clustering-vs-Replication-vs-Sharding
'TIL' 카테고리의 다른 글
24/02/04 TIL __ socket io에 redis어뎁터 추가 (0) | 2024.02.04 |
---|---|
24/02/03 TIL __ socket io와 TCP 통신 (0) | 2024.02.03 |
24/02/01 TIL __ rtmp 프로토콜, hls 프로토콜을 이용한 스트리밍 서비스 (0) | 2024.02.01 |
24/01/29 TIL __ 레디스 stream타입 데이터 벌크로 영구저장. (0) | 2024.01.29 |
24/01/27 TIL __ 도커(1) (0) | 2024.01.27 |