temporal

2 개의 포스트

Temporal이 넷플릭스의 안정 (새 탭에서 열림)

넷플릭스는 배포 시스템인 Spinnaker의 클라우드 작업 안정성을 높이기 위해 '지속 가능한 실행(Durable Execution)' 플랫폼인 Temporal을 도입했습니다. 기존 시스템은 인스턴스 재시작이나 네트워크 일시 오류 발생 시 작업 상태를 잃어버리는 구조적 한계로 인해 약 4%의 배포 실패율을 보였습니다. Temporal 도입 후, 상태 정보를 자동으로 유지하고 장애 시 중단 지점부터 재개하는 방식을 통해 일시적 장애로 인한 실패율을 0.0001%까지 획기적으로 낮추는 성과를 거두었습니다. **기존 Spinnaker 구조와 상태 관리의 한계** * 배포 엔진인 Orca가 Clouddriver에 작업을 요청하면, Clouddriver는 내부 오케스트레이션 엔진을 통해 클라우드 제공업체의 API를 호출하는 구조였습니다. * 작업 상태가 메모리나 휘발성 저장소에 유지되었기 때문에, 클러스터 업데이트나 인스턴스 종료와 같은 운영 작업 중 실행 중인 모든 작업이 유실되거나 일관성이 깨지는 문제가 빈번했습니다. * 복잡한 다단계 클라우드 작업 중 중간 단계에서 오류가 발생하면, 수동으로 개입하여 상태를 정리하거나 재시도 로직을 직접 복잡하게 구현해야만 했습니다. **Temporal을 이용한 지속 가능한 실행 구현** * 비즈니스 로직을 담당하는 '워크플로우(Workflow)'와 외부 API 호출 등 부수 효과를 수행하는 '액티비티(Activity)'를 분리하여 설계했습니다. * Temporal은 작업의 모든 실행 단계를 데이터베이스에 기록(Event Sourcing)하므로, 실행 중 프로세스가 죽더라도 새 인스턴스에서 마지막 상태를 복구하여 즉시 재개할 수 있습니다. * 개발자는 일시적인 네트워크 오류나 API 제한에 대비한 복잡한 재시도 코드를 작성하는 대신, Temporal의 선언적 재시도 정책을 활용해 "장애가 없는 것처럼" 코드를 작성할 수 있게 되었습니다. **도입 결과 및 운영 효율성 향상** * 일시적 장애로 인한 배포 실패율이 4%에서 0.0001%로 감소하며 시스템 신뢰도가 비약적으로 상승했습니다. * CDN 장비 업데이트와 같이 며칠 혹은 몇 주가 소요되는 장기 실행 작업도 타임아웃이나 상태 유실 걱정 없이 안정적으로 관리할 수 있게 되었습니다. * 인프라 운영 팀은 시스템 점검이나 배포를 위해 기존 작업을 강제로 중단하거나 완료될 때까지 기다릴 필요가 없어져 운영 유연성이 크게 확보되었습니다. 복잡한 분산 시스템에서 상태 관리와 재시도 로직을 직접 구현하는 것은 매우 까다롭고 오류가 발생하기 쉽습니다. 넷플릭스의 사례처럼 장기 실행 작업이나 높은 신뢰성이 요구되는 마이크로서비스 환경에서는 Temporal과 같은 워크플로우 엔진을 도입하여 인프라 수준에서 안정성을 보장받는 것이 효율적입니다.

복제의 재정의: 저지연 멀티테넌트 데이터 복제 플랫폼 구축기 (새 탭에서 열림)

데이터독(Datadog)은 모놀리식 포스트그레스(Postgres) 데이터베이스의 확장성 한계와 수동 데이터 파이프라인의 복잡성을 해결하기 위해 자동화된 관리형 데이터 복제 플랫폼을 구축했습니다. 이 플랫폼은 체계적인 변경 데이터 캡처(CDC)와 비동기 복제 방식을 통해 데이터 일관성을 유지하면서도 시스템 성능을 비약적으로 향상시켰습니다. 결과적으로 엔지니어링 팀은 인프라 관리의 부담에서 벗어나 안정적이고 낮은 지연 시간으로 대규모 데이터를 다양한 서비스 간에 자유롭게 이동시킬 수 있게 되었습니다. **포스트그레스의 확장성 한계와 데이터 재건축** * 서비스 초기에는 포스트그레스의 ACID 보장과 편의성이 유용했으나, 데이터량이 증가하면서 복잡한 조인 및 집계 쿼리의 응답 시간이 수 밀리초에서 수 초 단위로 급격히 악화되었습니다. * 특정 조직의 메트릭 요약 페이지에서 수십만 개의 행을 조인할 때 P90 지연 시간이 7초에 달했으며, 인덱스 팽창(Bloat)과 VACUUM 작업 부하로 인한 I/O 병목 현상이 발생했습니다. * OLTP 부하와 검색/필터링 부하를 분리하기 위해, 복제 과정에서 데이터를 비정규화(Denormalization)하여 전용 검색 플랫폼으로 전송하는 아키텍처로 전환했습니다. * 이러한 최적화를 통해 페이지 로드 시간을 최대 97% 단축(30초 → 1초)하고, 복제 지연 시간을 500ms 수준으로 유지하는 성과를 거두었습니다. **Temporal을 활용한 복제 파이프라인 프로비저닝 자동화** * Debezium, Kafka, Elasticsearch 등 다양한 기술 스택이 결합된 복제 파이프라인을 수동으로 구축하는 과정은 운영상 큰 부담이 되었습니다. * 포스트그레스의 `wal_level` 설정, 논리적 복제 슬롯 생성, 사용자 권한 관리, Kafka 토픽 매핑 등 반복적이고 오류가 잦은 단계를 Temporal 워크플로우를 통해 모듈화했습니다. * WAL(Write-Ahead Log) 보존 문제를 해결하기 위한 하트비트 테이블 설정부터 싱크 커넥터 배포까지의 모든 과정을 오케스트레이션하여 운영 탄력성을 높였습니다. * 자동화된 플랫폼 덕분에 개발자들은 인프라 설정 대신 혁신에 집중할 수 있게 되었으며, 멀티 테넌트 환경에서도 일관된 파이프라인 관리가 가능해졌습니다. **성능과 확장성을 위한 비동기 복제 전략** * 강한 일관성을 보장하는 동기 복제 대신, 대규모 고처리량 환경에 적합한 비동기 복제 방식을 채택했습니다. * 동기 복제는 네트워크 지연이나 복제본의 응답 상태가 기본 시스템의 성능에 직접적인 영향을 주지만, 비동기 방식은 애플리케이션의 쓰기 성능을 네트워크 지연으로부터 격리합니다. * 장애 발생 시 미세한 데이터 지연이 발생할 수 있는 트레이드오프가 있으나, 이는 확장성과 가용성을 우선시하는 데이터독의 분산 환경에 더 적합한 선택이었습니다. **결론 및 권장사항** 대규모 시스템에서 데이터베이스의 성능 저하를 방지하려면 OLTP와 읽기 전용 검색 워크로드를 분리하는 것이 필수적입니다. 이때 발생하는 복잡한 데이터 이동 문제는 Temporal과 같은 워크플로우 엔진으로 자동화하여 운영 비용을 낮추고, 비동기 복제 모델을 통해 시스템의 전체적인 처리량과 가용성을 확보하는 전략이 권장됩니다.