더북(TheBook)

복제

복제republication는 클러스터에 있는 데이터의 여러 복사본을 저장하는 프로세스를 말한다. 이전에 설명했듯이 복제는 고가용성을 보장한다.

고려해야 할 한 가지 조건은 관리하는 복제본 개수다. 복제본 개수가 많을수록 데이터를 소실할 가능성이 줄어들지만, 복제본 개수가 많아지면 성능이 저하될 것이다. 데이터의 재생과 갱신이 많이 일어나는 키-값 데이터베이스에서는 복제본 개수를 적게 유지하는 것이 좋다.

일부 NoSQL 데이터베이스에서는 쓰기 요청을 전송한 애플리케이션 관점에서 쓰기 작업이 완료된 것으로 간주되기 전에 얼마나 많은 복제본을 쓸 건지 지정할 수 있다. 예를 들어 복제본 세 개를 데이터베이스에 저장하도록 구성했다면 복제본 두 개를 성공적으로 저장하자마자 쓰기 요청을 보낸 애플리케이션으로 쓰기 작업이 성공했다는 정보를 전송하게 된다. 마지막 세 번째 복제본은 애플리케이션이 다른 작업을 수행하는 동안 저장된다.

읽기 작업에서도 복제본을 고려해야 한다. 보통 키-값 데이터베이스에서는 2단계 커밋이 필수사항이 아니므로 다른 버전의 데이터를 가진 복제본이 있을 가능성이 있다. 복제본의 모든 버전들은 결국 데이터가 일치하게 되겠지만, 아주 짧은 기간에는 다른 값을 갖고 있을 수 있다.

최신 데이터 대신 이전 데이터를 읽어올 위험을 최소화하려면 애플리케이션에 응답하기 전에 읽기 요청에 대해 같은 결괏값을 반환하는 노드의 수를 명시하면 된다. 복제본 3개를 관리한다면 호출한 애플리케이션에 응답을 하기 전에 적어도 복제본으로부터 응답을 2개 확보하는 것이 좋다.

필요한 복제본 수가 증가할수록 최신 데이터가 포함된 응답을 보낼 가능성이 커진다. 이 경우 세 번째 서버가 응답하는 데 시간이 걸리므로 읽기 지연이 발생할 수 있다.

지금까지 설명한 대부분의 용어는 논리 모델링, 서버 구성, 그리고 이와 관련된 프로세스에 대한 것이었다. 이제 좀 더 높은 수준의 기능을 구현하기 위해 키-값 데이터베이스 소프트웨어에서 실행되는 프로세스와 구현 알고리즘을 살펴보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.