대규모 서비스 토폴로지 구축: 아키텍처, 과제 및 교훈
Netflix는 엔지니어들이 분산 아키텍처를 문제 해결하고 이해하는 데 도움을 주기 위해 실시간 서비스 종속성 맵을 개발했습니다. 이 시스템은 eBPF 네트워크 흐름, IPC 메트릭, 분산 추적을 독립적인 그래프 레이어로 결합합니다. 초기 버전은 로컬에서 작동했지만, 프로덕션 환경에서는 Kafka 소비자 지연 및 메모리 문제와 같은 상당한 확장성 문제를 드러냈습니다.핵심 아키텍처 결정은 시간당 배치 처리 대신 거의 실시간에 가까운 토폴로지 업데이트를 제공하는 스트리밍 우선 접근 방식이었습니다. 이는 사고 대응 및 실시간 이벤트 모니터링에 중요했습니다. 초당 수백만 개의 흐름 기록을 데이터 손실 없이 처리하기 위해 이 시스템은 백프레셔를 갖춘 반응형 스트림을 사용하여 다운스트림 시스템이 과부하될 때 업스트림 구성 요소에 속도를 늦추도록 신호를 보냅니다. 이는 데이터 손실이나 충돌 대신 점진적인 성능 저하를 보장합니다.이 아키텍처는 네트워크, IPC, 추적 레이어에 대한 물리적 스토리지 격리를 갖춘 다층 설계를 사용하여 독립적인 최적화를 가능하게 합니다. 네트워크 레이어의 수집은 3단계 분산 집계 파이프라인에 의존합니다. 1단계는 Kafka에서 초기 집계를 수행하고, 2단계는 네트워크 중개자(로드 밸런서 등)를 직접 애플리케이션 수준 종속성으로 해석하며, 3단계는 최종 집계, 외부 데이터로의 강화, 그래프 데이터베이스에 대한 영구 저장을 처리합니다.3단계 파이프라인은 중개자 해석 및 강화 중에 데이터 집중으로 인해 "핫 노드" 문제가 발생했던 초기 2단계 설계에서 중요한 진화였습니다. 이러한 책임을 3단계로 분할하면 워크로드가 분산되어 병목 현상을 방지합니다. Server-Sent Events(SSE)는 gRPC의 성능 오버헤드로 인해 스테이지 간 통신에 gRPC를 대체했습니다. 이 오버헤드는 대규모 환경에서 과도한 CPU 및 메모리를 소비했습니다.