주요 컨텐츠로 이동
데이터 엔지니어링

수천만 개의 서버리스 VM에 Databricks 네트워크 구성 전달

이벤트 기반 사전 컴퓨팅 및 스냅샷 제공을 통해 매일 수십억 건의 네트워크 구성 요청 전체에서 RPC 대기 시간을 97.5%(5,000ms → 125ms) 단축하고 99.99%의 가용성을 달성한 방법.

작성자: Manish Bansal, Yankai Zhang , Chen He

  • 이벤트 기반 사전 컴퓨팅: Databricks는 동기식 업스트림 호출 방식이었던 서버리스 네트워크 구성 제공 방식을 백그라운드에서 구성을 사전 컴퓨팅하고 스냅샷 저장소에서 제공하는 이벤트 기반 파이프라인으로 재설계했습니다.
  • 크리티컬 패스 분리: 비용이 많이 드는 다중 서비스 집계를 클러스터 시작 경로에서 분리함으로써 취약한 종속성 체인을 단일하고 빠른 스토리지 읽기로 전환했습니다.
  • 대규모 검증 완료: 하루 수십억 건의 요청 전체에서 RPC p99 대기 시간을 98.5%(5,000ms → 75ms) 단축하고, 가용성을 99.99%로 높였으며, 업스트림 호출 볼륨을 86% 줄였습니다.

요약

  • Databricks의 서버리스 플랫폼은 매일 수천만 개의 VM을 실행하며, 각 VM은 고객 워크로드를 처리하기 전에 허용된 대상 및 프라이빗 엔드포인트와 같은 네트워크 구성이 필요합니다. 각 노드가 시작 시 구성을 가져오고 수명 주기 동안 업데이트를 폴링하므로, 이는 하루에 수십억 건의 네트워크 구성 요청으로 이어집니다. 기존 아키텍처는 여러 업스트림 서비스에서 이를 동기식으로 가져왔기 때문에 지연 시간과 가용성 병목 현상이 발생했습니다.
  • 이벤트 기반 파이프라인과 스냅샷 사전 계산을 사용하여 네트워크 구성 전달 아키텍처를 재설계함으로써 RPC 지연 시간을 97.5%(5,000ms → 125ms) 줄이고 99.99%의 서비스 가용성을 달성했습니다.

문제 정의

Databricks의 서버리스 컴퓨팅 플랫폼은 SQL 웨어하우스, 노트북, ML 서빙 엔드포인트 등 거의 모든 데이터 및 AI 제품을 구동합니다. 이 플랫폼은 AWS, Azure, GCP 전반에서 매일 수천만 개의 VM을 실행합니다.

서버리스 워크로드가 실행되기 전에 VM은 네트워크 구성을 알아야 합니다. 어떤 스토리지 대상에 액세스할 수 있는지, 트래픽을 라우팅해야 하는 프라이빗 링크 엔드포인트가 있는지, 새로운 스토리지 대상에 대한 액세스 권한을 부여하는 Unity Catalog의 최근 변경 사항이 있는지, Delta Sharing을 통해 공유된 새로운 대상을 사용하기 시작해야 하는지 등이 이에 해당합니다.

과제는 네트워크 구성이 단일 위치에 저장되지 않는다는 점입니다. 전체 그림의 일부를 각각 제공하는 여러 업스트림 서비스로부터 이를 취합해야 합니다.

기존 아키텍처

기존 설계에서는 서버리스 클러스터가 시작될 때마다 네트워크 구성 서비스가 모든 업스트림 서비스를 동기식으로 호출하고, 응답을 집계하고, 워크스페이스별 네트워크 구성을 계산하여 서버리스 데이터 플레인으로 반환했습니다. 이 작업은 클러스터 생성의 크리티컬 패스(critical path)에서 발생했습니다.

기존 아키텍처

기존 아키텍처는 단순하고 소규모 환경에서는 잘 작동했지만, 운영 대시보드에서 추적하는 다음 메트릭에 나타난 것처럼 근본적인 문제를 안고 있었습니다.

  1. 지연 시간: 크리티컬 패스에 여러 업스트림 서비스가 있어 네트워크 구성을 제공하는 RPC 지연 시간이 p99에서 5,000ms에 달했습니다. 이는 서버리스 클러스터 시작 지연 시간에 영향을 미쳤습니다.
  2. 서버 성공률: 각 업스트림 서비스는 고유한 가용성 특성을 가집니다. 여러 서비스가 직렬로 연결되어 있으면 복합 가용성이 빠르게 떨어지며, 이는 연간 서버리스 클러스터 시작 실패 가능성이 높아지는 결과로 이어집니다.

서버리스 사용량이 계속해서 빠르게 증가함에 따라 동기식 모델은 점점 더 감당하기 어려워졌습니다. 각 동기식 호출은 모든 워크스페이스에서 비용이 많이 드는 작업을 트리거했으며, 종종 중복 계산을 수행했습니다. 이로 인해 테넌트 수와 구성된 리소스 수에 비례하여 부하가 증가했습니다.

해결책: 이벤트 기반 사전 계산

우리는 Databricks가 네트워크 구성을 전달하는 방식을 처음부터 완전히 재설계했습니다. 이는 다음과 같은 핵심 원칙을 기반으로 구축되었습니다.

  1. 이벤트 기반 파이프라인: 모든 업스트림 서비스에 동기식 호출을 하는 대신, 새 시스템은 메시지 큐를 통해 변경 이벤트를 구독합니다. 고객이 새로운 Unity Catalog 연결을 생성하거나 네트워크 정책을 수정하면 업스트림 서비스가 이벤트를 발행합니다. 시스템은 이를 처리하고 사전 계산된 구성을 업데이트합니다.
  2. 스냅샷 사전 계산: 네트워크 구성은 백그라운드에서 비동기식으로 계산되어 사전 계산된 스냅샷 저장소에 저장됩니다. 서빙 경로는 단일의 가벼운 스토리지 가져오기(fetch)가 되어 업스트림 서비스와 완전히 분리됩니다.
  3. 정적 안정성: 업스트림 서비스 장애가 발생하더라도 정적 구성을 유지하여 서버리스 클러스터에 정적 안정성을 제공할 수 있습니다.
새로운 아키텍처

이 아키텍처는 두 개의 경로를 깔끔하게 분리합니다. 관리 경로는 백그라운드에서 비동기식으로 실행됩니다. 업스트림 서비스가 메시지 큐로 변경 이벤트를 발행하면, 이벤트 프로세서가 이를 소비하여 영향을 받는 워크스페이스를 파악하고 워크스페이스별 업데이트 알림을 팬아웃(fan out)합니다. 그런 다음 로컬 이벤트 관리자가 업스트림에서 관련 세부 정보를 가져와 워크스페이스의 네트워크 구성을 재계산하고 그 결과를 사전 계산된 스냅샷 저장소에 저장합니다. 또한 주기적인 조정자(reconciler)가 백그라운드에서 모든 워크스페이스를 다시 동기화하여 이벤트를 놓치더라도 최종 일관성(eventual consistency)을 보장합니다. 반면, 서빙 경로는 매우 중요하고 빠릅니다. 서버리스 클러스터가 시작되어 네트워크 구성이 필요할 때, 네트워크 구성 서비스는 단 한 번의 스토리지 읽기로 스냅샷 저장소에서 직접 구성을 제공하므로 업스트림 서비스 호출이 필요 없고 업스트림 서비스의 부하를 유의미하게 줄여줍니다.

주요 설계 결정 사항

  • 업스트림 서비스가 변경 이벤트를 메시지 큐로 푸시합니다. 시스템은 백그라운드에서 이러한 이벤트를 처리합니다. 빈도가 낮은 조정자(reconciler)가 안전망으로서 주기적으로 모든 워크스페이스를 다시 동기화하여 푸시 방식의 효율성과 함께 동기식 프레임워크의 안정성을 제공합니다.
  • 네트워크 구성은 각 서비스 파티션 내에서 로컬로 계산 및 저장되며, 서비스를 제공하는 워크스페이스와 동일한 위치에 배치(co-locate)됩니다. 이를 통해 계산을 분산하고, 장애 발생 시 영향 범위(blast radius)를 줄이며, 서빙 경로에서 파티션 간 종속성을 제거합니다.
  • 이벤트에는 워크스페이스 및 리소스 식별자만 포함됩니다. 이를 통해 이벤트를 가볍게 유지하고, 멱등성(idempotent, 어떤 순서로든 재실행 가능)을 보장하며, 메시징 파이프라인을 통해 민감한 고객 데이터가 전송되는 것을 방지합니다.

이벤트 흐름 방식

고객이 새로운 Unity Catalog 연결을 생성하면, Unity Catalog는 메시지 큐로 변경 이벤트를 발행합니다. 그런 다음 이벤트 프로세서가 이벤트를 수신하여 영향을 받는 메타스토어에 연결된 워크스페이스를 확인하고, 워크스페이스별 업데이트 알림을 팬아웃합니다. 각 워크스페이스의 파티션에서 이벤트 관리자는 이 알림을 수신하고, 업데이트된 연결 세부 정보를 가져와 워크스페이스의 네트워크 구성을 재계산한 다음 새로운 버전 마크와 함께 저장합니다. 그 시점부터 서버리스 클러스터가 네트워크 구성을 요청하면 업스트림 호출 없이 스냅샷 저장소에서 직접 제공됩니다.

효과

새로운 아키텍처를 도입한 후, 모든 운영 메트릭에서 획기적인 변화가 나타났습니다.

메트릭이전 (기존)이후 (신규)개선 효과
지연 시간 (RPC p99)~5,000 ms125 ms97.5% 감소
서버 성공률99.8%99.99%다운타임 감소
P99 지연 시간 개선

주요 메트릭 외에도 다음과 같은 성과가 있었습니다.

  1. 업스트림 호출량이 86% 감소했습니다. 시스템은 모든 요청이 아닌 변경을 나타내는 이벤트가 있을 때만 업스트림 서비스를 호출합니다.
  2. 네트워킹 구성의 최신성(freshness)이 유의미하게 개선되었습니다.
  3. 기존의 동기식 프레임워크가 완전히 폐기되었습니다.

결론

이 프로젝트를 통해 클라우드 규모에서 네트워크 인프라를 운영하는 것에 대한 몇 가지 교훈을 얻었습니다.

사전 계산은 크리티컬 패스를 분리합니다. 비용이 많이 드는 집계 작업을 백그라운드로 이동함으로써 서빙 경로가 매우 단순하고 빨라집니다. 이는 가장 영향력 있는 단일 아키텍처 결정이었습니다. 이를 통해 다중 서비스 종속성 체인을 단일 스토리지 읽기로 전환할 수 있었습니다.

이벤트 기반 아키텍처는 확장성을 위해 일관성을 절충하며, 조정(reconciliation)이 안전망을 제공합니다. 이벤트 기반 푸시는 일반적인 케이스를 효율적으로 처리하는 반면, 주기적인 조정자는 누락된 부분을 잡아냅니다.

첫날부터 확장성을 고려하여 설계해야 합니다. 모듈식 단계 기반 아키텍처 덕분에 새로운 업스트림 데이터 소스에 대한 지원을 추가할 때 핵심 파이프라인을 전혀 변경하지 않고 새로운 단계 구현만 추가하면 됩니다. Databricks의 제품 영역이 확장됨에 따라 네트워크 구성 시스템도 함께 확장됩니다.

오늘날 이 시스템은 Databricks의 글로벌 서버리스 플릿 전반에서 하루 수십억 건의 네트워크 구성 요청을 약 125ms의 지연 시간과 99.99%의 가용성으로 처리하고 있습니다. 서버리스 컴퓨팅이 계속해서 빠르게 성장함에 따라, 이벤트 기반 아키텍처는 네트워크 구성 전달이 그에 맞춰 확장될 수 있도록 보장합니다.

우리는 글로벌 규모의 분산 시스템 과제를 해결하는 데 즐거움을 느끼는 엔지니어를 언제나 찾고 있습니다. 이러한 문제를 해결하는 데 흥미를 느끼신다면 언제든 연락해 주세요. databricks.com/careers에서 채용 중인 포지션을 확인해 보세요!

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.