클러스터링 vs 리플리케이션 vs 샤딩

Red Culture·2021년 8월 2일
1

클러스터링

-여러 개의 DB를 수평적인 구조로 구성하여 Failover하는 시스템을 구축하는 방식
-동일한 DB 서버를 두 대를 묶고 active-active 상태로 운영하거나 active-stanby 상태로 운영한다. active-active 상태는 하나의 서버가 부담하던 부하를 2대의 서버에서 부담하기 때문에 cpu, 메모리 자원의 부하도 줄게 된다. 하지만, DB 스토리지를 2대의 서버가 공유하기 때문에 병목이 생길 수 있다. 이러한 단점을 보완하기 위해 active-stanby 상태로 두는데 장애 발생 시 failover를 통해 두 서버가 상호 전환하게 된다.
-노드가 죽으면 다른 노드가 살아있어 시스템을 장애없이 운영할 수 있다.
-동기 방식으로 노드들 간의 데이터를 동기화한다.
-여러 노드들 간에 데이터 동기화 시간이 필요하기 때문에 리플리케이션에 비해 쓰기 성능이 떨어진다.

리플리케이션

-여러 개의 DB를 master-slave 형태로 구축하고, master에 DML(Write-only)을 하고 slave에 복제(Read-only)하는 방식이다.
-비동기 방식으로 노드들 간의 데이터를 동기화한다.
-비동기 방식으로 데이터를 동기화하기 때문에 지연 시간이 거의 없다.
-노드들 간의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다.
-데이터 양이 많을 경우 데이터를 찾는데 오랜 시간이 걸린다.
-마스터 노드 장애 시 복구&대처가 까다롭다.

샤딩

테이블을 특정 기준으로 나눠서 저장하고 검색하는 것을 의미한다. 데이터를 어떻게 분산시킬 것인지, 어떻게 읽을 것인지 결정하는 것이 중요하다. 분산시켜 저장하기 위한 기준이 Shard key이다.

1) hard sharding
-샤드의 수만큼 hash 함수를 사용해서 나온 결과에 따라 db 서버에 저장하는 방식이다.
-db 서버가 추가될 경우 hash 함수가 변경되어야 하므로 기존에 저장되던 데이터의 정합성이 깨진다.
2) dynamic sharding
3) entity group
-연관성 있는 엔티티를 한 샤드에 두는 방식이다.
-같은 샤드에 있는 데이터를 조회할 때는 효과적이지만, 다른 샤드에 있는 데이터를 함께 조회할 때는 성능이 떨어진다.
4) moduler sharding
-PK를 모듈러 연산한 결과로 DB를 특정하는 방식
-데이터량이 일정 수준에서 유지될 것으로 예상되는 데이터 성격을 가진 곳에 적용할 때 좋다.
-DB를 추가 증설해야하는 상황에서 이미 적재된 데이터의 재정렬이 필요하다.
5) range sharding
-PK의 범위를 기준으로 DB를 특정하는 방식이다.
-활성유저가 몰린 DB로 트래픽이나 데이터량이 몰릴 수 있다.

*참고 자료
https://jordy-torvalds.tistory.com/94
https://techblog.woowahan.com/2687/

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글