지오레플리케이션

지오레플리케이션 (Geo Replication)

예상치 못한 사고로 운영이 멈췄을 때 서비스를 빠르게 복구하려면 재해 복구 계획이 필수인데, 이를 위해선 지리적으로 분산된 다중 데이터센터 배포가 필요해요. Pulsar의 지오레플리케이션은 이런 다중 데이터센터 환경에서 영구 저장된 메시지 데이터를 여러 데이터센터에 복제해 추가적인 중복성을 제공해요. 이 글에서는 지오레플리케이션의 동작 방식과 복제 패턴, 그리고 클러스터 간 구독의 동작을 정리해 드릴게요.

출처: 문서

본문

산업 분야와 무관하게, 예상치 못한 사건이 발생해 일상적인 운영이 중단되면 조직은 서비스를 클라이언트에게 빠르게 복구하기 위해 잘 준비된 재해 복구 계획이 필요해요. 하지만 재해 복구 계획은 보통 지리적으로 분산된 데이터센터를 갖춘 다중 데이터센터 배포를 요구해요. 그런 다중 데이터센터 배포는 데이터센터 하나가 실패할 경우를 대비해 추가적인 중복성을 제공하는 지오레플리케이션 메커니즘이 필요해요.

Pulsar의 지오레플리케이션 메커니즘은 일반적으로 재해 복구에 사용되며, 영구 저장된 메시지 데이터를 여러 데이터센터에 걸쳐 복제할 수 있게 해줘요. 예를 들어 애플리케이션이 한 리전에서 데이터를 게시하고, 다른 리전에서 소비를 위해 그 데이터를 처리하고 싶다고 해볼게요. Pulsar의 지오레플리케이션 메커니즘을 사용하면 메시지를 서로 다른 지리적 위치에서 생산하고 소비할 수 있어요.

아래 다이어그램은 지오레플리케이션의 과정을 보여줘요. 세 개의 프로듀서(P1, P2, P3)가 각각 세 클러스터의 T1 토픽에 메시지를 게시할 때마다 그 메시지는 클러스터 전반에 즉시 복제돼요. 메시지가 복제되면 두 소비자(C1, C2)가 자신의 클러스터에서 그 메시지를 소비할 수 있어요. 각 소비자는 자신의 클러스터에 로컬인 구독을 통해 소비해요. 토픽을 둘 이상의 클러스터에서 소비할 때 구독이 어떻게 동작하는지는 클러스터 간 구독과 소비자를 보세요.

클러스터 간 구독과 소비자

지오레플리케이션은 토픽 데이터를 복제하지 구독을 복제하지 않아요. 구독은 생성된 클러스터에 속하며, 각 클러스터는 로컬에 존재하는 구독에만 메시지를 전달해요.

항목 클러스터 간 복제되나요?
메시지 (토픽 데이터)
구독 (커서, 소비자, 백로그, 확인 상태 포함) 아니요, 각 클러스터가 자신의 구독을 유지해요
복제 구독의 mark-delete 위치 네, 명시적으로 활성화된 경우
개별 확인(acknowledgment) 아니요

구독은 클러스터에 로컬이다

두 클러스터에서 같은 구독 이름을 사용하면 Pulsar는 각 클러스터에 하나씩 두 개의 독립적인 구독을 만들어요:

  • 각 구독은 자신만의 커서, 백로그, 소비자, 확인 상태를 가져요. 한 클러스터에서 메시지를 확인(ack)해도 다른 클러스터의 같은 이름의 구독 커서는 진행되지 않아요.
  • 각 구독은 로컬에서 자신만의 구독 유형을 적용해요. 예를 들어 한 클러스터의 exclusive 구독이 다른 클러스터에서 같은 이름의 구독이 생성되는 것을 막지 않아요.
  • 각 구독은 로컬 복사본의 토픽을 소비하는데, 그 토픽에는 로컬에서 생산된 메시지와 다른 클러스터에서 복제된 메시지가 모두 포함돼요. 그 복사본의 완전성은 복제 구성에 따라 달라져요. 1-way 지오레플리케이션 또는 선택적 복제(selective replication)를 사용하면 클러스터는 토픽 데이터의 일부만 받고, 그 구독들도 마찬가지로 일부만 받아요.

같은 이유로, 같은 구독 이름으로 다른 클러스터에 다시 연결하는 소비자는 원래 구독을 이어받지 않아요. 이름만 공유하는 새롭고 무관한 구독의 생성을 트리거해요. PIP-33: Replicated subscriptions에 설명된 대로요.

구독은 로컬이므로 로컬에서 관리돼요. 예를 들어 지오복제된 토픽을 삭제하려면 모든 클러스터에서 로컬 구독을 삭제해야 해요.

소비자는 클러스터 간 작업 부하를 공유하지 않는다

서로 다른 클러스터에서 같은 구독 이름을 사용하는 소비자들은 하나의 소비자 그룹을 형성하지 않으며, Pulsar는 그들 사이에 메시지를 분배하지 않아요. 위의 full-mesh 예시에서 소비자 C1Cluster-AT1 토픽을 sub-1로 소비하고 소비자 C2Cluster-B에서 같은 토픽을 sub-1로 소비한다면, 둘 다 어느 클러스터에서든 T1에 게시된 모든 메시지를 받아요. 각 클러스터가 자신의 복사본에서 메시지를 전달하기 때문이에요. 그 결과 모든 메시지가 클러스터마다 한 번씩 처리되므로, 애플리케이션이 중복을 처리하지 않으면 애플리케이션 수준에서 처리가 중복돼요.

따라서 클러스터 간에 구독 이름을 재사용해도 복제된 토픽의 소비가 분할되지 않아요. 단일 구독이 클러스터를 가로지르지 않기 때문이에요. 리전 간 처리 부하를 분산하려면 토픽 또는 파티션 수준에서 워크로드를 샤딩해요. 예를 들어 리전마다 다른 토픽이나 다른 파티션 부분집합을 사용하세요.

복제 구독: active-active 소비가 아닌 페일오버용

기본적으로 메시지만 복제돼요. Pulsar는 구독의 mark-delete 위치를 서브초 단위로 클러스터 간에 동기화하는 복제 구독도 지원해요. 이 기능은 페일오버를 위한 것이에요. 구독의 소비자들은 단일 클러스터에서 활성 상태이고, 그 클러스터를 사용할 수 없게 되면 같은 이름의 구독으로 다른 클러스터에서 다시 시작해 전체 토픽을 재처리하는 대신 일관된 위치에서 이어서 처리할 수 있어요.

복제 구독은 클러스터를 가로지르는 단일 구독을 만들지 않아요. 소비자들이 동시에 여러 클러스터에서 활성 상태이면 Pulsar는 그들 사이에서 메시지 전달을 조정하지 않아요. 대부분의 메시지가 두 클러스터 모두에서 처리되고(중복 처리), 일부 메시지는 복제 타이밍에 따라 어느 한 클러스터에서만 처리될 수 있어요. 따라서 복제 구독을 활성화했을 때는 한 번에 하나의 클러스터에서 메시지를 처리하세요.

복제 메커니즘

지오레플리케이션 메커니즘은 동기식 지오레플리케이션과 비동기식 지오레플리케이션 전략으로 분류할 수 있어요. Pulsar는 두 복제 메커니즘을 모두 지원해요.

Pulsar의 비동기식 지오레플리케이션

비동기식 지오복제 클러스터는 서로 다른 데이터센터에 구성된 여러 물리적 클러스터로 구성돼요. Pulsar 토픽에서 생산된 메시지는 먼저 로컬 클러스터에 영구 저장된 다음 브로커에 의해 원격 클러스터에 비동기적으로 복제돼요.

정상적인 경우 연결 문제가 없으면 메시지는 로컬 소비자에게 전달되는 것과 동시에 즉시 복제돼요. 일반적으로 종단 간 전달 지연은 데이터센터 사이의 네트워크 왕복 시간(RTT)으로 결정돼요. 애플리케이션은 원격 클러스터에 도달할 수 없을 때도(예: 네트워크 분할 중) 어느 클러스터에서든 프로듀서와 소비자를 만들 수 있어요.

비동기식 지오레플리케이션은 더 낮은 지연을 제공하지만, 일부 데이터가 아직 복제되지 않았을 수 있는 복제 지연 때문에 일관성 보장이 더 약해질 수 있어요.

BookKeeper를 통한 동기식 지오레플리케이션

동기식 지오레플리케이션에서 데이터는 여러 데이터센터에 동기적으로 복제되며, 클라이언트는 다른 데이터센터로부터 확인을 기다려야 해요. 아래에 설명된 대로 클라이언트가 한 클러스터에 쓰기 요청을 보내면, 쓰여진 데이터는 다른 두 데이터센터에 복제돼요. 쓰기 요청은 대부분의 데이터센터(이 예시에서는 최소 2개의 데이터센터)가 쓰기가 영구 저장되었음을 확인했을 때만 클라이언트에 승인돼요.

Pulsar의 동기식 지오레플리케이션은 BookKeeper로 이루어져요. 동기식 지오복제 클러스터는 여러 데이터센터에서 실행되는 bookie 클러스터와 broker 클러스터, 그리고 전역 메타데이터 저장소 설치(Oxia, ZooKeeper 또는 여러 데이터센터에 걸쳐 실행되는 기타 지원되는 메타데이터 저장소)로 구성돼요. 데이터를 여러 데이터센터에 걸쳐 저장하고 쓰기 가용성 제약을 보장하려면 BookKeeper의 리전 인지(region-aware) 배치 정책을 구성해야 해요.

동기식 지오레플리케이션은 가장 높은 가용성을 제공하고 서로 다른 데이터센터 간에 더 강력한 데이터 일관성을 보장해요. 하지만 애플리케이션은 데이터센터 간에 추가적인 지연 비용을 지불해야 해요.

복제 패턴

Pulsar는 복제 전략을 맞춤 구성할 수 있는 큰 유연성을 제공해요. 여러 데이터센터 간 애플리케이션의 복제 전략을 제공하기 위해 서로 다른 복제 패턴을 설정할 수 있어요.

Pulsar는 다음 복제 패턴을 지원해요:

Full-mesh 복제

full-mesh 복제를 사용하고 선택적 메시지 복제를 적용하면, 원하는 수의 데이터센터 사이에서 복제 전략과 토폴로지를 맞춤 구성할 수 있어요.

Active-active 복제

active-active 복제는 두 데이터센터만 사용하는 full-mesh 복제의 변형이에요. 프로듀서는 어느 데이터센터에서든 메시지를 생산할 수 있고, 어느 한 데이터센터의 소비자도 두 데이터센터에서 생산된 모든 메시지를 소비할 수 있어요. 각 데이터센터가 토픽의 로컬 복사본을 보유하기 때문이에요. 이 메시지 팬아웃은 데이터센터 간 처리 부하를 분산하지 않아요. 각 데이터센터의 소비자는 자신의 로컬 구독에 속하고, 모든 구독이 모든 메시지를 받기 때문이에요. 클러스터 간 구독과 소비자를 보세요.

active-active 복제를 사용해 클러스터 간에 데이터를 마이그레이션하는 방법은 여기를 보세요.

집계 복제 (Aggregation replication)

집계 복제 패턴은 일반적으로 엣지에서 클라우드로 메시지를 복제할 때 사용돼요. 예를 들어 3개의 프런팅(fronting) 데이터센터에 3개의 클러스터가 있고 중앙 데이터센터에 하나의 집계 클러스터가 있다고 해볼게요. 여러 프런팅 데이터센터의 메시지를 집계 목적으로 중앙 데이터센터로 복제하고 싶다면, 각 프런팅 데이터센터가 사용하는 토픽에 대해 개별 네임스페이스를 만들고 집계 데이터센터를 그 네임스페이스에 할당할 수 있어요.

더 알아보기 (Learn more)