Netflix / data-replication

2 개의 포스트

netflix

Automating RDS Postgres to Aurora Postgres Migration (새 탭에서 열림)

넷플릭스는 기능성, 성능 및 총소유비용(TCO)을 종합적으로 검토한 결과, 사내 관계형 데이터베이스 표준을 Amazon Aurora PostgreSQL로 전환하기로 결정했습니다. 약 400개에 달하는 기존 RDS PostgreSQL 클러스터를 효율적으로 이전하기 위해 넷플릭스는 가동 중지 시간을 최소화하고 데이터 무결성을 보장하는 자동화된 셀프 서비스 마이그레이션 워크플로우를 구축했습니다. 이를 통해 개별 서비스 팀은 운영 부담 없이 클라우드 네이티브 아키텍처의 확장성과 고가용성 이점을 누릴 수 있게 되었습니다. ### Aurora PostgreSQL 표준화 배경 * **높은 호환성:** 내부 분석 결과, 기존 관계형 데이터베이스에서 실행되는 애플리케이션의 95% 이상이 Aurora PostgreSQL 환경에서 원활하게 지원됨을 확인했습니다. * **클라우드 네이티브 이점:** 전통적인 단일 노드 PostgreSQL에 비해 확장성, 고가용성 및 탄력성 측면에서 Aurora의 분산 아키텍처가 월등한 우위를 점하고 있습니다. * **생태계 및 로드맵:** 강력한 커뮤니티 지원을 받는 PostgreSQL의 오픈 생태계와 대규모 글로벌 분산 애플리케이션에 최적화된 Aurora의 기능 로드맵이 결정적인 요인이 되었습니다. ### 대규모 마이그레이션의 운영 및 기술적 과제 * **운영의 규모 가변성:** 400개에 가까운 클러스터를 수동으로 이전하는 것은 인적 오류의 위험이 크고 운영 팀에 과도한 부담을 주므로, 자동화된 셀프 서비스 방식이 필수적이었습니다. * **데이터 무결성 및 가동 중지 최소화:** '제로 데이터 손실'을 보장하는 동시에, 서비스 신뢰도에 영향을 주지 않도록 쓰기 트래픽을 중단하고 전환하는 시간을 극도로 짧게 유지해야 합니다. * **제어 권한의 한계:** 플랫폼 팀은 데이터베이스를 관리하지만 클라이언트 애플리케이션의 동작(쓰기 일시 중단 등)을 직접 제어할 수 없으며, 보안상 사용자 데이터베이스의 자격 증명(Credentials)에 직접 접근하지 않고 마이그레이션을 수행해야 하는 제약이 있습니다. * **생태계 패리티 유지:** 핵심 데이터뿐만 아니라 파라미터 그룹, 읽기 전용 복제본(Read Replica), 복제 슬롯 등 연관된 모든 구성 요소를 동일하게 이전해야 성능 저하를 방지할 수 있습니다. ### AWS 권장 마이그레이션 기법의 활용 * **스냅샷 기반 마이그레이션:** RDS PostgreSQL의 수동 스냅샷을 생성하여 Aurora로 변환하는 방식으로, 구조는 단순하지만 스냅샷 생성부터 완료 시까지 쓰기 트래픽을 중단해야 하므로 가동 중지 시간이 길다는 단점이 있습니다. * **Aurora 읽기 전용 복제본 기반 마이그레이션:** 기존 RDS를 소스로 하는 Aurora 읽기 복제본을 생성하여 비동기 복제를 수행합니다. 복제 지연(Lag)이 충분히 낮아졌을 때 짧은 순간만 트래픽을 중단하고 복제본을 승격(Promote)시키므로, 스냅샷 방식보다 가동 중지 시간을 현저히 줄일 수 있습니다. ### 성공적인 전환을 위한 전략적 결론 대규모 데이터베이스 마이그레이션은 단순한 데이터 복사를 넘어 복제, 정지(Quiescence), 검증, 전환의 정교한 조율이 필요합니다. 넷플릭스의 사례처럼 데이터베이스 전문가가 아닌 서비스 담당자도 쉽고 안전하게 마이그레이션을 수행할 수 있도록 자동화된 컨트롤 플레인을 구축하는 것이 대규모 인프라 현대화의 핵심입니다. 특히 가동 중지 시간에 민감한 서비스라면 AWS의 읽기 전용 복제본 승격 방식을 자동화 워크플로우에 통합하는 것이 가장 권장되는 접근법입니다.

netflix

Building a Resilient Data Platform with Write-Ahead Log at Netflix | by Netflix Technology Blog | Netflix TechBlog (새 탭에서 열림)

넷플릭스는 대규모 데이터 환경에서 발생하는 데이터 손실, 시스템 엔트로피, 복제 및 재시도 메커니즘의 한계를 극복하기 위해 분산 **Write-Ahead Log(WAL)** 추상화 레이어를 구축했습니다. 이 시스템은 데이터 변경 사항을 캡처하고 강력한 내구성을 보장하며 하위 소비자에게 데이터를 안정적으로 전달하는 단일 인터페이스를 제공합니다. 결과적으로 개발자는 복잡한 데이터 정합성 문제를 직접 해결할 필요 없이 비즈니스 로직에 집중할 수 있게 되었으며, 플랫폼 전반의 탄력성과 운영 효율성이 크게 향상되었습니다. **WAL의 핵심 구조와 유연한 API** * **WriteToLog API:** 단순한 인터페이스를 통해 내부 구현을 추상화하며, 데이터 내구성을 '성공/실패/알 수 없음'의 세 가지 상태(Trilean)로 반환하여 신뢰성을 높였습니다. * **네임스페이스(Namespace):** 데이터의 저장 위치와 방식을 정의하는 논리적 격리 단위로, 설정에 따라 Kafka, SQS 등 다양한 기반 스토리지를 선택할 수 있습니다. * **페르소나 기반 아키텍처:** 네임스페이스 설정에 따라 지연 큐, 복제 도구, 인덱싱 도구 등 목적에 맞는 다양한 '페르소나'로 동작합니다. **지연 큐와 신뢰할 수 있는 재시도 메커니즘** * 네트워크 오류나 다운스트림 서비스 장애 발생 시 데이터 처리 처리량을 희생하지 않고도 실패한 메시지를 안전하게 재시도합니다. * SQS를 기본 스토리지로 활용하여 메시지 전달 시점을 조절하는 지연 기능을 구현함으로써 실시간 데이터 파이프라인의 안정성을 확보했습니다. **범용 교차 리전 복제 및 데이터 동기화** * Kafka를 활용하여 서로 다른 리전 간에 데이터를 복제하며, 기본적으로 복제를 지원하지 않는 스토리지 엔진에서도 리전 간 데이터 정합성을 유지할 수 있게 합니다. * Key-Value 저장소와 Elasticsearch 같은 서로 다른 데이터 저장소 간의 상태를 동기화하여 구체화된 뷰(Materialized Views)나 보조 인덱스를 안정적으로 구축합니다. **안정적인 데이터 삭제 및 부하 관리** * 데이터베이스에서 대량의 데이터를 삭제할 때 발생하는 메모리 부족(OOM) 문제를 해결하기 위해 WAL을 활용합니다. * 삭제 요청을 WAL에 기록한 후 처리 속도를 제어(Rate-limiting)하거나 예약된 시간에 실행함으로써 데이터베이스 노드에 가해지는 충격을 완화합니다. **시스템 설계 원칙과 격리 전략** * **수집 및 소비의 분리:** 고가용성 수집 레이어와 신뢰 중심의 소비 레이어를 분리하여 트래픽 급증이나 다운스트림 장애가 전체 시스템으로 전이되는 것을 방지합니다. * **멀티테넌시와 격리:** 공유 리소스를 사용하되 네임스페이스별로 격리된 리소스 풀을 할당하여 특정 작업이 다른 서비스의 성능에 영향을 주지 않도록 설계되었습니다. 데이터 플랫폼 차원의 통합 WAL 솔루션 도입은 각 서비스 팀이 개별적으로 구축하던 복제 및 재시도 로직의 중복을 제거하고 기술 부채를 크게 줄여줍니다. 대규모 분산 시스템을 운영하는 조직이라면 데이터의 최종 정합성과 시스템 탄력성을 확보하기 위해 이러한 추상화된 로그 계층을 검토하는 것이 권장됩니다.