복제

이 페이지는 Spanner에서 데이터가 복제되는 방식, 다양한 유형의 Spanner 복제본과 읽기 및 쓰기에서의 역할, 복제 이점을 설명합니다.

개요

Spanner는 바이트 수준에서 자동으로 복제합니다. Spanner 읽기 및 쓰기 수명에 설명된 대로 Spanner는 근간이 되는 파일 시스템에서 이러한 기능을 활용합니다. Spanner가 데이터베이스 변형을 이 파일 시스템의 파일에 기록하면, 파일 시스템은 이러한 파일을 복제하고, 머신 또는 디스크 오류가 발생하면 파일을 복구합니다.

Spanner의 근간인 기본 분산형 파일 시스템이 이미 바이트 수준의 복제를 제공하고 있지만 Spanner도 데이터를 복제하여 데이터 가용성 및 지리적 위치의 추가 이점을 제공합니다. 상위 수준에서 Spanner의 모든 데이터는 행으로 구성됩니다. Spanner는 이러한 행의 복사본(또는 '복제본')을 여러 개 만든 후 이러한 복제본을 서로 다른 지역에 저장합니다. Spanner는 동기식 Paxos 기반 복제 스키마를 사용합니다. 이 스키마에서 쓰기가 커밋되기 전에 응답 복제본이 각 쓰기 요청에 대해 응답합니다. 이러한 전역 동기 복제 속성을 사용하면 Spanner의 읽기-쓰기 또는 읽기 전용 복제본에서 최신 데이터를 읽을 수 있습니다.

Spanner는 각 데이터베이스 분할 복제본을 만듭니다. 분할은 연속된 행 범위를 포함하며, 기본 키를 기준으로 행이 정렬됩니다. 분할의 모든 데이터는 복제본에서 물리적으로 함께 저장되며, Spanner는 독립적인 오류 영역 외부에서 각 복제본을 제공합니다. 자세한 내용은 스키마 정보를 참조하세요.

분할 조합은 Paxos를 사용하여 저장되고 복제됩니다. 각 Paxos 복제 조합 내에서 복제본 한 개가 리더로 선택됩니다. 리더 복제본이 쓰기 처리를 담당하고, 읽기-쓰기 또는 읽기 전용 복제본은 리더와 통신하지 않고 읽기 요청을 제공할 수 있습니다. 단, 강력 읽기가 요청되면 일반적으로 읽기 전용 복제본이 최근의 모든 변형을 받았는지 확인하기 위해 리더가 참조됩니다.

Spanner 복제 이점

Spanner 복제 이점은 다음과 같습니다.

  • 데이터 가용성: 더 많은 데이터 복사본을 보유하면 이를 읽으려는 클라이언트에게 더 많은 데이터를 제공할 수 있습니다. 또한 일부 복제본을 사용할 수 없는 경우에도 과반수의 응답 복제본만 있으면 쓰기 커밋이 가능하므로 Spanner가 쓰기를 계속 제공할 수 있습니다.

  • 지리적 위치: Spanner를 사용하면 서로 다른 지역과 대륙에 데이터를 배치할 수 있으므로 데이터를 필요로 하는 사용자 및 서비스와 데이터가 지리적으로 더 가까워져 액세스가 더 빨라집니다.

  • 단일 데이터베이스 환경: Spanner는 동기식 복제와 전역 strong consistency으로 인해 단일 데이터베이스 환경을 제공할 수 있습니다.

  • 간편해진 애플리케이션 개발: Spanner는 ACID와 호환되고 전역적으로 strong consistency를 제공하므로 Spanner로 작업하는 개발자는 애플리케이션에서 eventual consistency를 처리하는 데 논리를 추가할 필요가 없으므로 애플리케이션 개발 및 이후의 유지보수가 빨라지고 간편해집니다.

복제본 유형

Spanner에는 읽기-쓰기 복제본, 읽기 전용 복제본, 감시 복제본 등 세 가지 유형의 복제본이 있습니다. 기본 인스턴스 구성을 형성하는 리전과 복제 토폴로지가 고정되어 있습니다. 기본 리전 인스턴스 구성은 읽기-쓰기 복제본만 사용하지만 기본 멀티 리전 인스턴스 구성은 세 가지 복제본 유형 조합을 사용합니다. 커스텀 인스턴스 구성을 만들고 리전 및 멀티 리전 인스턴스 구성 모두에 읽기 전용 복제본을 추가할 수 있습니다.

다음 표에는 Spanner의 복제본 유형과 해당 속성이 요약되어 있습니다.

복제본 유형 응답 가능 리더가 될 수 있음 읽기 제공 가능 복제본을 수동으로 구성 가능
읽기-쓰기 아니요
읽기 전용 아니요 아니요 *
감시 아니요 아니요 아니요

* 자세한 내용은 커스텀 인스턴스 구성으로 인스턴스를 만드는 방법을 참조하세요.

읽기-쓰기 복제본

읽기-쓰기 복제본은 읽기와 쓰기를 모두 지원합니다. 이 복제본은 다음과 같습니다.

  • 데이터 전체 복사본을 유지합니다.
  • 읽기를 제공합니다.
  • 쓰기 커밋 여부를 응답할 수 있습니다.
  • 리더 선택에 참여합니다.
  • 리더가 될 자격이 있습니다.
  • 단일 지역 인스턴스에서만 사용되는 유형입니다.

읽기 전용 복제본

읽기 전용 복제본은 읽기만 지원합니다(쓰기는 아님). 이러한 복제본은 리더 선택이나 쓰기 커밋을 위해 응답되지 않으므로 쓰기에 필요한 쿼럼 크기를 늘리지 않고도 읽기 용량을 확장할 수 있습니다. 읽기 전용 복제본의 특성:

  • 읽기-쓰기 복제본에서 복제된 데이터 전체 복사본을 유지합니다.
  • 읽기를 제공합니다.
  • 쓰기 커밋을 위한 응답에 참여하지 않습니다. 따라서 읽기 전용 복제본의 위치는 쓰기 지연 시간에 절대 영향을 주지 않습니다.
  • 애플리케이션에 가장 가까운 복제본인 경우 읽기 전용 복제본은 비활성 상태가 최소 15초라고 가정 시 일반적으로 기본 리더 리전으로 왕복하지 않고도 비활성 읽기를 제공할 수 있습니다. 또한 방향성 읽기를 사용하여 읽기 전용 트랜잭션과 단일 읽기를 멀티 리전 인스턴스 구성의 특정 복제본 유형 또는 리전으로 라우팅할 수 있습니다. 자세한 내용은 방향성 읽기를 참조하세요.

    강력한 읽기를 위해서는 리더 복제본에 대한 왕복이 필요할 수 있습니다. 왕복은 리더에서 실제 데이터를 전달하는 것이 아니라 단지 타임스탬프를 협상하기 위한 것입니다. 타임스탬프 협상은 리더에서의 CPU 효율 작업이며, 일반적으로 데이터가 이미 이동 경로 상에 있습니다. 이러한 통신은 시스템에서 자동으로 처리됩니다.

    비활성 읽기 및 강력한 읽기에 대한 자세한 내용은 읽기 섹션을 참조하세요.

  • 리더가 될 자격이 없습니다.

커스텀 리전 또는 멀티 리전 인스턴스 구성을 만들고 선택적으로 읽기 전용 복제본을 추가하여 읽기를 확장하고 지연 시간이 짧은 비활성 읽기를 지원할 수 있습니다. 선택적 리전 아래에 나열된 위치를 선택적 읽기 전용 복제본으로 추가할 수 있습니다. 선택한 읽기 전용 복제본 위치가 표시되지 않으면 새로운 선택적 읽기 전용 복제본 리전을 요청할 수 있습니다. 고정된 기본 인스턴스 구성의 복제 토폴로지를 변경할 수 없습니다.

모든 선택적 읽기 전용 복제본에는 컴퓨팅 용량과 스토리지 비용이 적용됩니다. 또한 읽기 전용 복제본을 커스텀 인스턴스 구성에 추가해도 인스턴스 구성의 Spanner SLA는 변경되지 않습니다. 읽기 전용 복제본을 리더 리전과 다른 대륙에 있는 대륙에 추가하는 경우 읽기 전용 복제본을 최소 2개 이상 추가하는 것이 좋습니다. 이렇게 하면 읽기 전용 복제본 중 하나를 사용할 수 없게 되는 상태에서도 읽기 지연 시간을 짧게 유지할 수 있습니다.

읽기 전용 복제본을 추가하면 리더 복제본에 더 많은 복제 로드가 발생하여 성능이 영향을 받을 수 있습니다. 먼저 커스텀 인스턴스 구성의 비프로덕션 인스턴스에서 성능 워크로드를 테스트하는 것이 좋습니다. 리전 간 지연 시간 중앙값 데이터는 리전 간 지연 시간 및 처리량 벤치마크 대시보드를 참조하세요. 예를 들어 eur6 멀티 리전 기본 구성 및 us-east1의 선택적 읽기 전용 복제본을 사용하여 커스텀 인스턴스 구성을 만드는 경우 us-east1의 클라이언트에 대한 예상되는 강력한 읽기 지연 시간은 europe-west4의 리더 리전으로의 왕복 시간으로 인해 약 100밀리초입니다. 비활성이 충분한 비활성 읽기에서는 왕복이 발생하지 않으므로 이 읽기 속도가 훨씬 빠릅니다. 또한 트랜잭션 유형별 지연 시간 측정항목을 사용하여 읽기-쓰기 및 읽기 전용 유형 트랜잭션의 지연 시간 데이터를 볼 수 있습니다.

자세한 내용은 커스텀 인스턴스 구성 만들기를 참조하세요.

감시 복제본

감시 복제본은 읽기를 지원하지 않으며 쓰기 커밋을 위한 응답에 참여합니다. 이러한 복제본은 데이터의 전체 복사본을 저장하고 읽기를 제공하기 위해 읽기-쓰기 복제본에 필요한 저장소 및 컴퓨팅 리소스 없이도 쿼럼을 보다 간편하게 확보할 수 있습니다. 감시 복제본:

  • 멀티 리전 인스턴스에서만 사용됩니다.
  • 데이터 전체 복사본을 유지하지 않습니다.
  • 읽기를 제공하지 않습니다.
  • 쓰기 커밋 여부를 응답합니다.
  • 리더 선택에 참여하지만 리더가 될 자격은 없습니다.

쓰기 및 읽기에서 복제본 역할

이 섹션에서는 Spanner의 쓰기 및 읽기에서 복제본의 역할과 Spanner가 멀티 리전 구성에서 감시 복제본을 사용하는 이유를 설명합니다.

쓰기

클라이언트에 더 가까운 곳에 비리더 복제본이 있거나 리더 복제본이 지리적으로 클라이언트에서 멀리 있더라도 클라이언트 쓰기 요청은 항상 리더 복제본에서 먼저 처리됩니다. 멀티 리전 인스턴스 구성을 사용하고 클라이언트 애플리케이션이 비리더 리전에 위치한 경우 Spanner는 데이터베이스의 지연 시간을 줄이기 위해 리더 인식 라우팅을 사용하여 읽기-쓰기 트랜잭션을 동적으로 라우팅합니다. 자세한 내용은 리더 인식 라우팅을 참조하세요.

리더 복제본은 들어오는 쓰기를 기록하는 동시에 해당 쓰기에 응답할 수 있는 다른 복제본에 이를 전달합니다. 적격한 각 복제본은 쓰기를 완료한 후 쓰기 커밋 여부에 대한 응답과 함께 다시 리더에 응답합니다. 과반수의 응답 복제본(또는 '쓰기 쿼럼')이 쓰기 커밋에 동의하면 쓰기가 커밋됩니다. 백그라운드에서는 나머지 모든(비 감시) 복제본이 쓰기를 기록합니다. 읽기-쓰기 또는 읽기 전용 복제본이 쓰기 기록에 뒤처지면 다른 복제본에서 누락된 데이터를 요청하여 완전한 최신 데이터 복사본을 확보할 수 있습니다.

읽기

클라이언트 읽기 요청은 읽기 요청의 동시 실행 모드에 따라 실행되거나 리더 복제본과 통신해야 할 수 있습니다.

  • 리더 복제본은 직렬 가능성 적용에 필요한 잠금을 유지하므로 읽기-쓰기 트랜잭션에 속한 읽기가 리더 복제본에서 제공됩니다.

  • 단일 읽기 메소드(트랜잭션 컨텍스트 밖의 읽기)와 읽기 전용 트랜잭션의 읽기는 읽기 동시 실행 모드에 따라 리더와 통신해야 할 수 있습니다. (읽기 유형에서 이러한 동시 실행 모드에 대해 자세히 알아보세요.)

    • 강력 읽기 요청은 모든 읽기-쓰기 또는 읽기 전용 복제본으로 전달될 수 있습니다. 요청이 비 리더 복제본으로 전달되면 해당 복제본은 읽기 실행을 위해 리더와 통신해야 합니다.

    • 비활성 읽기 요청은 요청의 타임스탬프까지 포착된 가장 가까운 곳에 있는 읽기 전용 또는 읽기-쓰기 복제본으로 전달됩니다. 리더가 읽기 요청을 한 클라이언트에 가장 가까운 복제본이라면 이러한 요청은 리더 복제본일 수 있습니다.