cloudflare

Meerkat 소개 - 글로벌 합의에 대한 실험 (새 탭에서 열림)

Cloudflare는 330곳이 넘는 글로벌 데이터센터에서 동일한 컨트롤 플레인 상태를 강한 일관성으로 읽고 수정할 수 있는 합의 서비스를 개발하고 있다. 기존 Raft는 리더 장애와 타임아웃 때문에 광역 네트워크에서 쓰기 가용성이 중단될 수 있어, Cloudflare는 모든 복제본이 쓰기에 참여하고 타임아웃으로 진행이 멈추지 않는 QuePaxa 기반의 Meerkat을 만들었다. Meerkat은 아직 실험 단계이며, 우선 데이터베이스 리더십이나 리소스 배치처럼 작은 규모의 내부 컨트롤 플레인 상태를 관리하는 데 사용될 예정이다.

글로벌 컨트롤 플레인 데이터의 필요성

  • Cloudflare의 여러 서비스는 전 세계 데이터센터에 분산된 머신에서 동일한 제어 상태를 읽고 수정해야 한다.
  • 대표적인 컨트롤 플레인 데이터는 다음과 같다.
    • AI 모델 인스턴스 등 리소스의 배치 정보
    • 데이터베이스에서 쓰기를 수행할 수 있는 머신을 나타내는 리더십 정보
  • 네트워크 단절, 데이터센터 장애, 서버 중단, 큐 포화, 케이블 절단 등 인터넷 환경의 불확실성에도 시스템이 동작해야 한다.
  • 따라서 다음 두 조건을 동시에 만족하는 데이터 시스템이 필요하다.
    • 여러 클라이언트가 서로 모순되지 않는 상태를 읽는 강한 일관성
    • 일부 머신이나 네트워크 링크가 실패해도 읽기와 쓰기가 가능한 장애 내성

선형화 가능성으로 대표되는 강한 일관성

  • 일관성 모델은 동시 읽기와 쓰기에서 시스템이 허용하는 동작 범위를 정의한다.
  • 약한 일관성에서는 여러 노드에 도착한 쓰기 순서가 재배열될 수 있다.
  • 더 강한 모델에서는 쓰기 순서는 유지되더라도 읽기가 서로 다른 시점의 값을 볼 수 있다.
  • 가장 강한 모델인 선형화 가능성(linearizability) 은 실제 시간 순서에 맞춰 연산이 실행된 것처럼 보이게 한다.
    • 어떤 쓰기가 완료된 뒤의 읽기는 반드시 그 쓰기 결과를 볼 수 있다.
    • 프로그래머는 분산 저장소를 단일 스레드 머신의 메모리처럼 추론할 수 있다.
  • Meerkat 위에 구축되는 키-값 저장소는 선형화 가능성뿐 아니라 직렬성(serializability)도 제공할 예정이며, 직렬성에 대한 자세한 내용은 후속 글에서 다룬다.

요구되는 장애 내성

  • 시스템은 전체 머신 수가 2f + 1일 때 최대 f개의 장애를 감당하는 것을 목표로 한다.
  • 다음 조건이 유지되면 어느 데이터센터의 클라이언트에서도 읽기와 쓰기가 가능해야 한다.
    • 전체 머신의 과반수가 살아 있고 서로 통신할 수 있다.
    • 클라이언트가 과반수의 활성 머신과 연결된 머신 하나에 접속할 수 있다.
  • 이 조건은 단일 머신 장애나 하나의 네트워크 링크 성능 저하만으로 전체 시스템의 가용성이 떨어지지 않아야 함을 의미한다.
  • 시스템은 다음과 같은 장애에서도 올바른 상태를 유지해야 한다.
    • 머신 충돌 및 재시작
    • 네트워크 장애와 지연
    • 데이터센터 장애
    • 네트워크 품질 저하
  • 한편 공격자가 악의적으로 잘못된 메시지를 보내는 비잔틴 장애는 Raft와 마찬가지로 처리 대상에서 제외한다.
  • 안전성의 핵심은 최신 상태를 가진 두 머신이 서로 다른 세계를 인식하지 않도록 하는 것이다. 예를 들어 한 머신이 key1=1, 다른 머신이 key1=2라고 판단하는 상황을 허용하지 않는다.

Raft가 광역 네트워크에서 겪는 한계

  • Raft는 한 번에 하나의 리더만 쓰기를 수행할 수 있도록 한다.
  • 리더가 충돌하거나 네트워크 지연으로 사실상 접근 불가능해지면 다음 과정이 필요하다.
    • 다른 복제본이 리더의 실패를 타임아웃으로 감지
    • 새로운 리더 선출
    • 새 리더가 활동을 시작할 때까지 쓰기 중단
  • 인터넷 전반에 걸친 Cloudflare 네트워크에서는 지연 시간이 일정하지 않기 때문에 타임아웃 값을 적절히 설정하기 어렵다.
  • 타임아웃이 너무 짧으면 정상적인 지연을 장애로 오인하고, 너무 길면 실제 장애 이후 복구가 늦어진다.
  • Cloudflare는 리더를 사용할 수 없어 합의 기반 시스템이 중단된 여러 장애를 경험했으며, 이것이 새로운 합의 서비스 개발의 배경이 되었다.

QuePaxa 기반 Meerkat

  • Meerkat은 EPFL 연구진이 2023년에 발표한 합의 알고리즘 QuePaxa를 기반으로 한다.
  • Raft와 달리 QuePaxa에서는 모든 복제본이 항상 쓰기를 수행할 수 있다.
  • 특정 리더가 장애를 일으켰을 때 새 리더 선출을 기다리느라 전체 진행이 멈추지 않는다.
  • 타임아웃 때문에 합의 진행이 중단되지 않는 특성은 지연이 불규칙한 광역 네트워크에 적합하다.
  • Meerkat은 합의 로그를 제공하고, 그 위에 다음과 같은 애플리케이션을 구축한다.
    • 트랜잭션 키-값 저장소
    • 분산 임대(lease) 및 잠금 시스템
    • 데이터베이스 리더십 관리
  • Cloudflare는 이를 글로벌 규모에서 산업적으로 배포하는 최초의 QuePaxa 사례가 될 것으로 보고 있다.

현재 개발 단계와 적용 범위

  • Meerkat은 아직 개발 중인 실험적인 서비스다.
  • 초기에는 대규모 사용자 데이터가 아니라 작은 컨트롤 플레인 상태를 관리하는 데 집중한다.
  • 즉시 외부 공개 서비스로 제공하지 않고 Cloudflare 내부 전용으로 운영할 계획이다.
  • 이번 글은 Meerkat의 배경과 요구사항을 소개하고, 이후 합의 로그와 그 위에 구축되는 저장소 및 리스 시스템에 관한 후속 글의 기반을 마련한다.

Meerkat의 핵심 설계 방향은 리더 장애와 고정된 타임아웃에 의존하지 않는 합의를 통해, 글로벌 네트워크에서도 선형화 가능한 데이터와 높은 쓰기 가용성을 함께 확보하는 것이다. 다만 실제 운영에서는 과반수 연결 조건과 비잔틴 장애를 처리하지 않는다는 한계를 함께 고려해야 한다.