5장. 복제
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
잘못될 수 있는 것과 잘못될 가능성이 없는 것의 가장 큰 차이점은 잘못될 가능성이 없는 것이 잘못되면 일반적으로 접근하거나 수리할 수 없는 것으로 판명된다는 점입니다.
더글러스 아담스, 모스틀리 무해 (1992)
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 사본을 보관하는 것을 의미합니다. 2부 소개에서 설명한 것처럼 데이터를 복제하는 데는 몇 가지 이유가 있습니다:
-
데이터를 사용자와 지리적으로 가깝게 유지하여 액세스 지연 시간을 줄이려면 다음과 같이 하세요.
-
일부 부품에 장애가 발생하더라도 시스템이 계속 작동할 수 있도록 하여 가용성을 높이려면 다음과 같이 하세요.
-
읽기 쿼리를 처리할 수 있는 컴퓨터의 수를 확장하여 읽기 처리량을 늘리려면 다음과 같이 하세요.
이 장에서는 데이터 세트가 너무 작아서 각 머신이 전체 데이터 세트의 사본을 저장할 수 있다고 가정하겠습니다. 6장에서는 이러한 가정을 완화하여 단일 머신에서 처리하기에는 너무 큰 데이터 세트의 파티셔닝(샤딩)에 대해 논의하겠습니다. 이후 장에서는 복제된 데이터 시스템에서 발생할 수 있는 다양한 종류의 오류와 이를 처리하는 방법에 대해 설명합니다.
복제하는 데이터가 시간이 지나도 변하지 않는다면 모든 노드에 데이터를 한 번만 복사하기만 하면 복제가 간단합니다. 복제의 모든 어려움은 복제된 데이터의 변경 사항을 처리하는 데 있으며, 이 장에서는 이 부분에 대해 설명합니다. 노드 간에 변경 사항을 복제하는 데 널리 사용되는 세 가지 알고리즘인 단일 리더, 다중 리더,리더리스 복제에 대해 설명합니다. 거의 모든 분산 데이터베이스는 이 세 가지 접근 방식 중 하나를 사용합니다. 모두 다양한 장단점이 있으며, 이에 대해 자세히 살펴보겠습니다.
예를 들어 동기식 복제를 사용할지 비동기식 복제를 사용할지, 실패한 복제본을 처리하는 방법 등 복제와 관련하여 고려해야 할 많은 절충안이 있습니다. 이러한 사항은 데이터베이스의 구성 옵션인 경우가 많으며, 세부 사항은 데이터베이스마다 다르지만 일반적인 원칙은 여러 구현에서 비슷합니다. 이 장에서는 이러한 선택에 따른 결과에 대해 설명합니다.
데이터베이스 복제는 오래된 주제입니다. 네트워크의 근본적인 제약 조건이 변하지 않았기 때문에 1970년대[1]에 연구된 이래로 그 원리는 크게 변하지 않았습니다. 그러나 연구 외적으로 많은 개발자들은 오랫동안 데이터베이스가 하나의 노드로만 구성되어 있다고 가정해 왔습니다. 분산 데이터베이스가 주류로 사용된 것은 최근의 일입니다. 많은 애플리케이션 개발자가 이 분야를 처음 접하기 때문에 최종 일관성과 같은 문제에 대해 많은 오해가 있었습니다.