이 아키텍처적 과제는 Google, Amazon, Meta와 같은 회사에서 하이퍼스케일 인프라를 운영하는 과정에서 등장했습니다. 여기서 제어 평면은 수억 개의 구성 항목을 수백만 개의 일시적인 컴퓨팅 인스턴스에서 관리해야 합니다. Chubby나 ZooKeeper와 같은 초기 시스템은 강력한 일관성을 제공했지만 노드 수가 수십만을 초과할 때 처리량 문제가 발생했습니다. Kubernetes와 같은 오케스트레이션을 통해 다중 지역 활성-활성 배포를 지원하면서 부분적인 네트워크 실패를 허용해야 한다는 필요성이 느슨한 일관성 모델을 가진 연합 제어 평면으로의 진화를 이끌었습니다.
핵심 긴장은 보안이 중요한 업데이트(예: 인증서 회전)에 대해 선형 가능 일관성을 제공하면서 지역 간 네트워크 분할 동안 가용성을 유지하는 CAP 정리 제약을 충족하는 데 있습니다. 전통적인 단일 클러스터 etcd 배포는 수백만 개의 노드가 동시에 지역 중단 후 재연결될 때 처리량 핫스팟과 단일 실패 지점이 됩니다. 또한, 비잔틴 결함 허용성이 필요하여 손상된 지역 제어 평면이 데이터 평면 노드에 악성 구성을 전파하는 것을 방지해야 합니다.
지역 합의 고리를 사용하여 지역적인 일관성을 가진 계층적 제어 평면 아키텍처를 구현하고, 교차 지역의 최종 일관성을 확보하기 위해 가십 기반 반엔트로피 프로토콜로 상호 연결합니다. 보안이 중요한 업데이트는 글로벌 쿼럼의 강화된 검증 노드 내에서 비잔틴 결함 허용 (BFT) 합의를 활용합니다(예: Tendermint 또는 HotStuff). 데이터 평면 에이전트는 머클 트리 기반의 점진적 동기화 및 천둥 떼를 방지하기 위해 지터를 포함한 기하급수적 재시도와 함께 계층 캐싱을 사용합니다. 서비스 검색은 BGP에서 영감을 받은 경로 전파를 활용하고, 지역 캐시 역할을 하는 Envoy 사이드카를 사용합니다.
글로벌 비디오 스트리밍 플랫폼의 인프라를 이끌던 중 TLS 인증서 회전 중에 발생한 치명적인 사건을 겪었습니다. 이 과정에서 제로데이 취약점을 패치해야 했습니다. 플랫폼은 50개 지역에서 500만 개의 엣지 컨테이너를 관리하고 있었습니다. 인증기관에서 새로운 자격 증명을 게시했을 때, 모든 노드가 동시에 중앙 Consul 클러스터에서 업데이트를 가져오려고 하여 제어 평면을 압도하는 천둥 떼가 발생했습니다. 이로 인해 연속적인 시간 초과가 발생하고, 잘못된 긍정적 건강 검사 실패가 발생하며, 불필요한 포드 퇴거가 시작되어 40%의 사용자에게 스트리밍 품질이 저하되었습니다.
etcd 클러스터를 고메모리 바렛 메탈 인스턴스와 NVMe 스토리지로 업그레이드하여 연결 급증을 흡수하는 방안을 고려했습니다. 이 접근 방식은 아키텍처의 최소한의 변경을 제공하고 강력한 일관성 보장을 유지했습니다. 그러나 수직 확장은 물리적 한계가 뚜렷하고 엄청난 폭발 반경을 만들어냅니다. 중앙 클러스터가 실패하면 전체 글로벌 인프라가 동시에 구성 상태를 잃게 됩니다. 이러한 과도하게 큰 클러스터를 안정 상태 운영 동안 유지하는 비용은 경제적으로 불가능했습니다.
또 다른 옵션은 중앙 제어 평면을 완전히 없애고, 대신 노드가 구성 델타를 직접 교환하는 SWIM 기반의 가십 프로토콜을 사용하는 것이었습니다. 이는 단일 실패 지점을 제거하고 노드 수에 따라 선형적으로 확장할 수 있었습니다. 불행히도 보안 업데이트에 대한 인과 일관성을 보장하는 것이 거의 불가능해졌고, 구성 변경의 수렴 시간은 정상 부하에서 30초를 초과했습니다. 또한, 가십 프로토콜은 강력한 신원 확인 없이는 시빌 공격에 취약하여 인증서 배포에 보안 위험을 초래합니다.
결국 우리는 지역 Raft 클러스터가 지역 토폴로지에 대한 권위 있는 샤드 역할을 하고, 보안 업데이트의 암호화 검증을 위해 글로벌 BFT 계층을 갖춘 3계층 시스템으로 아키텍처를 설계했습니다. 엣지 노드는 지역 제어 평면과의 지속적인 연결을 유지하며 로컬 BoltDB 캐시를 통해 upstream 압력을 감지했을 때 각각 100ms에서 30s 사이의 무작위 오프셋을 가진 지터를 포함한 기하급수적 재시도를 사용했습니다. 지역 클러스터는 mTLS 보호 gRPC 스트림을 통해 통신하며, 변경된 구성 키만 동기화하기 위해 머클 트리 차이를 활용합니다.
우리는 지역 샤드별로 카나리 배포를 통해 인증서 롤아웃을 점진적으로 조절할 수 있도록 폭발 반경을 개별 지역으로 한정 지어 계층적 연합 접근 방식을 선택했습니다. 클라이언트 측 재시도를 전면 지터와 함께 구현하고 지역 Envoy 프록시가 회로 차단기 역할을 하도록 하여, 후속 회전 동안 제어 평면 부하를 95% 감소시켰습니다. 이 시스템은 현재 분당 1000만 개의 노드 등록을 지원하며 99.999%의 가용성을 유지하고, 전 세계적으로 800 밀리초 이내에 중요한 보안 업데이트를 전파합니다.
중앙 집중식 조정 병목 현상 없이 대량 클라이언트 재연결 중 우레 소떼 시나리오를 어떻게 방지합니까?
후보자들은 종종 서버에서 간단한 비율 제한을 제안하는데, 이는 실패 모드를 클라이언트 측 시간 초과 및 재시도 폭풍으로 전환할 뿐입니다. 올바른 접근 방식은 클라이언트에서 전면적인 지터가 포함된 무작위 기하급수적 재시도를 구현하고, 지역 프록시에서 AIMD(Additive Increase Multiplicative Decrease) 비율 제한을 결합하는 것입니다. 클라이언트는 마지막으로 알려진 좋은 구성을 TTL과 함께 캐시하고, 제어 평면 비가용성 동안 저하된 모드에서 계속 운영하며, 지역 상태 업데이트에 대한 CRDT 기반의 충돌 해결을 활용해야 합니다. 또한, Hedge 요청을 배포하여 지연 후 다른 지역 엔드포인트로 복제 요청을 보내는 방식은 부하를 증가시키지 않으면서 지연을 개선합니다.(단, 백엔드가 항등적일 경우).
지역 관리자가 손상되는 글로벌 분산 구성 시스템에서 비잔틴 결함을 어떻게 탐지하고 완화하겠습니까?
대부분의 후보자들은 mTLS 인증에 초점을 맞추지만 구성 커밋을 위한 비잔틴 결함 허용 합의의 필요성을 간과합니다. 솔루션은 글로벌 검증 계층을 위한 BFT 상태 기계 복제를 요구하며, 지역 제어 평면이 수락되기 전에 지리적으로 분산된 검증자가 구성 다이제스트를 암호화 서명하기 위해 초 다수(2f+1)를 요구합니다. 데이터 평면 노드는 역사적인 구성의 머클 트리를 유지하고, 변조를 탐지하기 위해 가십 프로토콜을 사용한 경량 반엔트로피 검사를 수행해야 합니다. 또한, 특정 법적 관할권 내에서 하드웨어 보안 모듈(HSM)을 요구하는 다중 서명 체계를 구현하여 단일 손상 지점을 방지합니다.
네트워크 분할로 지역 제어 평면이 오랜 시간 동안 격리될 경우 서비스 검색에 대한 인과 일관성을 어떻게 유지합니까?
후보자들은 종종 인과 일관성을 궁극적인 일관성과 혼동하여 중요 의존성을 놓치는 마지막 기록 우승(LWW) 충돌 해결을 제안합니다. 올바른 솔루션은 각 서비스 등록 이벤트에 벡터 시계 또는 버전 벡터를 부착하여 노드가 분할 복구 중 병렬 업데이트를 탐지할 수 있도록 하는 것입니다. 지역 제어 평면은 Plumtree 가십 프로토콜을 사용하여 업데이트를 효율적으로 전파하는 인과 방송을 구현해야 합니다. 분할이 복구될 때, 노드는 머클 트리 비교를 수행하여 분기된 이력을 식별하고, 팬텀 서비스 항목을 방지하며 단조로운 읽기를 보장하기 위해 추가를 유지하는 도메인 특정 병합 함수(서비스 레지스트리에 대한 OR-Set와 같은)를 적용합니다.