(Redis) 레디스의 확장과 분산기법

레디스에 스케일 아웃을 처리하기 위한 방법으로 두 가지 기법을 제공한다.
읽기분산을 위한 복제(Replication)와 쓰기 분산을 위한 샤딩(Sharding)이 이에 해당된다.



1. 복제


복제는 동일한 데이터를 다중의 노드에 중복하여 저장하는 것을 말한다.
레디스는 복제를 위해 마스터와 슬레이브의 복제의 개념을 사용한다.
마스터는 복제를 위한 데이터의 원본 역할을 한다. 슬레이브는 마스터 노드에 데이터 복제 요청을 하고 데이터를 수신하여 데이터를 동기화 한다.

통상적으로 레디스 인스턴스 하나가 처리할 수 있는 TPS는 1만~2만이다.
또한 대부분의 레디스 명령은 읽기와 쓰기에 따른 성능편차가 없다.

복제는 슬레이브 노드가 마스터 노드의 데이터를 실시간으로 복제하여 데이터의 동기화를 유지한다.
슬레이브 노드가 시작할 때 마스터 노드에게 복제를 요청하고 최초 복제가 완료된 이후는 변경 사항만 업데이트 한다.

레디스의 복제는 마스터노드가 슬레이브노드의 정보를 가지지 않고, 슬레이브 노드가 마스터 노드의 위치만 알고있으면 복제를 할 수 있다.

1-1. 단일 복제


마스터노드와 슬레이브 노드 하나로 구성된다.
마스터 노드에 변경이 발생하면 실시간으로 슬레이브 노드에 데이터 변경사항이 기록된다.
하지만 슬레이브 노드에 변경이 발생하면 마스터 노드는 해당 변경 사항을 감지하지 못한다.
슬레이브 노드에서 데이터 변경이 일어나는 순간 데이터의 정합성이 무너지게 되므로 슬레이브 노드에서는 데이터의 변경을 수행하지 않아야 한다.


1-2. 다중 복제

단일 복제만으로는 필요한 읽기 성능을 만족하지 못할때 다중 복제를 고려할 수 있다.
단일 복제 구조의 클러스터에 슬레이브 노드를 추가하기 위해서는 마스터 노드의 위치정보를 슬레이브 노드에 설정하고 인스턴스를 실행하면 노드 추가가 완료된다.
이와 같이 단일 복제 상태에서 여러 대의 슬레이브 노드를 추가한 것을 다중 복제라고 한다.
마스터 노드의 재시작이 필요하지 않다.


1-3. 계층형 복제




댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기