개념
장점
- 서비스 운영시 DB Query의 절반 이상이 Select 문이 차지하고 있음. 이 경우 많은 Slave DB에 분산해서 요청하면 부하를 낮추고 빠른 Read를 할 수 있음
- 비동기 방식으로 운영되어 지연 시간이 거의 없음
- Master DB의 관여 없이 Slave의 DB를 통해 로그 읽을 수 있음
단점
- 노드들 간의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다
- Master 노드가 다운되면 복구 및 대처가 까다롭다
[참고] 클러스터링(Clustering)
개념
- 여러개의 DB를 수평적인 구조로 구축 (master-slave구조의 수직적인 replication과 반대)
- 분산환경을 구성
- 동기방식으로 노드들 간의 데이터를 동기화
- Single point of Failure 문제를 해결하기 위해 등장
방식
![](https://velog.velcdn.com/images/mdy0102/post/35cb1487-cf9e-41d2-8e55-66c0decb009a/image.png)
- 1개의 노드에 쓰기 트랜잭션이 수행한 후 commit 한다
- 실제 디스크에 쓰기 전에 다른 노드로 데이터의 복제 요청한다
- 다른 노드에서 복제 요청 수락했다는 신호(OK)를 받으면 디스크에 저장한다
장점
- 노드들 간의 데이터 동기화 하여 항상 일관성 있는 데이터를 얻을 수 있다
- SPOF 문제 대응 가능(한개 죽어도 장애 X)
단점
- 여러 노드들간의 데이터 동기화 하는 시간이 필요하므로 오래걸림(성능 떨어짐)
- 장애가 전파된 경우 처리가 까다로우며, 데이터 동기화를 하기 위해 스케일링의 한계가 있음
참고 자료
https://nesoy.github.io/articles/2018-02/Database-Replication
https://mangkyu.tistory.com/97