state-machines

1 개의 포스트

100배 더 빠르게 (새 탭에서 열림)

넷플릭스는 대규모 데이터 및 머신러닝 워크플로우를 관리하는 오케스트레이터인 'Maestro'의 엔진을 전면 개편하여 성능을 100배 이상 향상시켰습니다. 기존 수 초 단위에 달하던 실행 오버헤드를 밀리초(milliseconds) 단위로 단축함으로써, 광고나 라이브 스트리밍과 같이 저지연 및 고빈도 스케줄링이 필요한 신규 비즈니스 요구사항을 충족하게 되었습니다. 이번 업데이트를 통해 Maestro는 확장성뿐만 아니라 극도로 빠른 실행 속도까지 갖추게 되어 개발자들의 작업 효율을 획기적으로 개선했습니다. **기존 아키텍처의 한계와 병목 현상** * **3계층 구조의 복잡성:** Maestro는 API/런타임, 엔진, 내부 플로우 엔진의 3단계로 구성되었으나, 각 계층 간의 데이터 전달과 상태 동기화 과정에서 상당한 시간이 소요되었습니다. * **폴링(Polling) 방식의 지연:** 기존의 내부 플로우 엔진은 일정 간격으로 태스크를 확인하는 폴링 방식으로 동작하여, 단계별 상태 전이 시마다 초 단위의 불필요한 대기 시간이 발생했습니다. * **분산 큐 및 데이터베이스 부하:** 분산 작업 큐(Dyno-queues)와 데이터베이스 액세스 패턴에서 발생하는 오버헤드로 인해 워크플로우가 복잡해질수록 전체 실행 속도가 저하되는 문제가 있었습니다. * **경합 조건 발생:** 강력한 일관성 보장이 부족하여 특정 단계가 두 개의 워커에서 동시에 실행되는 등의 레이스 컨디션(Race condition) 문제가 간혹 발생했습니다. **100배 빠른 엔진을 위한 설계 최적화** * **이벤트 기반 리액티브 모델:** 폴링 방식을 폐기하고 이벤트 기반 아키텍처를 도입하여, 태스크 완료 즉시 다음 단계가 실행되도록 지연 시간을 최소화했습니다. * **상태 머신 직접 관리:** 워크플로우 그래프를 내부 플로우 태스크로 변환하던 중간 레이어를 제거하고, 엔진이 직접 워크플로우와 단계별 상태 머신을 제어하도록 단순화했습니다. * **데이터 액세스 최적화:** 데이터베이스 쓰기 횟수를 줄이고 효율적인 캐싱 및 분산 잠금(Distributed Locking) 메커니즘을 적용하여 성능과 안정성을 동시에 확보했습니다. * **추상화 계층 정합성:** Maestro 엔진이 상태 전이와 생명주기를 전담하게 함으로써, 하부 플로우 엔진에 대한 의존성을 없애고 엔진의 실행 효율을 극대화했습니다. **성능 향상 결과 및 활용 사례** * **실행 속도 극대화:** 워크플로우 엔진의 내부 오버헤드가 수 초에서 밀리초 단위로 줄어들며 전체적인 응답 속도가 100배 이상 개선되었습니다. * **신규 비즈니스 지원:** 1시간 미만의 짧은 주기로 실행되는 스케줄링이나 광고(Ads), 게임 등 저지연 워크플로우가 필수적인 도메인에 적용 가능해졌습니다. * **개발 생산성 제고:** 반복적인 개발 및 테스트 사이클에서 발생하는 대기 시간이 사라져 엔지니어들의 반복 작업 효율이 크게 향상되었습니다. 대규모 확장성과 초고성능을 동시에 요구하는 환경이라면, 넷플릭스에서 검증되고 오픈 소스로 공개된 최신 버전의 Maestro 도입을 적극적으로 검토해 볼 가치가 있습니다. 특히 기존 워크플로우 엔진의 지연 시간으로 인해 실시간 처리에 어려움을 겪고 있는 조직에 강력한 해결책이 될 수 있습니다.