4P by neo 2달전 | favorite | 댓글 1개
  • Maestro: Netflix의 워크플로 오케스트레이터

  • TL;DR

    • Netflix는 Maestro 소스 코드를 공개했음
    • GitHub 저장소에서 시작할 수 있으며, 유용하다고 생각되면 별을 달아달라는 요청
  • Maestro란 무엇인가

    • Maestro는 대규모 워크플로를 관리하기 위해 설계된 범용, 수평 확장 가능한 워크플로 오케스트레이터임
    • 데이터 파이프라인 및 머신러닝 모델 훈련 파이프라인과 같은 워크플로의 전체 수명 주기를 관리함
    • 사용자는 Docker 이미지, 노트북, bash 스크립트, SQL, Python 등 다양한 형식으로 비즈니스 로직을 패키징할 수 있음
    • 전통적인 DAG(Directed Acyclic Graph)만 지원하는 워크플로 오케스트레이터와 달리, Maestro는 비순환 및 순환 워크플로를 모두 지원하며, foreach 루프, 서브워크플로, 조건부 분기 등 여러 재사용 가능한 패턴을 포함함
  • Maestro와 함께한 여정

    • 수십만 개의 워크플로를 사용자에게 최소한의 중단으로 성공적으로 마이그레이션했음
    • 지난 1년 동안 실행된 작업이 87.5% 증가했으며, 하루 평균 50만 개의 작업을 실행하고 있음
  • 확장성 및 다목적성

    • Maestro는 Netflix의 수천 명의 최종 사용자, 애플리케이션 및 서비스에 Workflow-as-a-Service를 제공하는 완전 관리형 워크플로 오케스트레이터임
    • ETL 파이프라인, ML 워크플로, AB 테스트 파이프라인 등 다양한 워크플로 사용 사례를 지원함
    • Netflix의 데이터 테이블이 단일 데이터 웨어하우스에 있기 때문에 단일 오케스트레이터가 이를 처리해야 한다고 믿음
  • Maestro 소개

    • JSON 형식으로 정의된 워크플로 정의를 사용함
    • 사용자 제공 필드와 Maestro가 관리하는 필드를 결합하여 유연하고 강력한 오케스트레이션 정의를 형성함
    • 워크플로 정의는 속성과 버전 관리된 워크플로로 구성됨
    • 속성에는 작성자 및 소유자 정보, 실행 설정 등이 포함됨
    • 버전 관리된 워크플로에는 고유 식별자, 이름, 설명, 태그, 시간 초과 설정 및 우선 순위 수준이 포함됨
  • 워크플로 실행 전략

    • 순차 실행 전략: FIFO 순서로 워크플로를 하나씩 실행함
    • 엄격한 순차 실행 전략: 차단 오류가 있는 경우 실행을 차단하고 수동으로 오류를 해결해야 함
    • 첫 번째만 실행 전략: 현재 실행 중인 워크플로가 완료될 때까지 새 워크플로 인스턴스를 대기열에서 제거함
    • 마지막만 실행 전략: 최신 트리거된 워크플로만 실행하고 기존 실행 중인 인스턴스를 중지함
    • 동시성 제한 병렬 실행 전략: 사전 정의된 동시성 제한에 따라 여러 워크플로 인스턴스를 병렬로 실행함
  • 매개변수 및 표현 언어 지원

    • 동적 매개변수와 코드 삽입을 지원하여 워크플로의 유연성과 동적 성을 크게 향상시킴
    • 보안 및 안전 문제를 해결하기 위해 자체 맞춤형 표현 언어 파서를 개발함
    • 간단하고 안전한 표현 언어(SEL): 코드 삽입과 관련된 위험을 해결하기 위해 개발된 간단하고 안전한 표현 언어
    • 출력 매개변수: 사용자 실행에서 출력 매개변수를 시스템으로 반환할 수 있음
    • 매개변수화된 워크플로: 사용자 정의 매개변수를 기반으로 런타임에 단계별로 초기화됨
  • 워크플로 실행 패턴

    • Foreach 지원: 동일한 작업을 다른 매개변수로 반복 실행하는 데 사용됨
    • 조건부 분기 지원: 특정 조건이 충족될 때만 후속 단계를 실행함
    • 서브워크플로 지원: 공통 기능을 여러 워크플로에서 공유할 수 있도록 함
  • 단계 런타임 및 단계 매개변수

    • 단계 런타임 인터페이스: 실행 시간에 작업을 설명하는 인터페이스
    • 단계 매개변수 병합: 단계 실행 전에 런타임 매개변수와 태그를 주입하여 동적으로 단계 동작을 제어함
  • 단계 종속성 및 신호

    • 단계 종속성을 사용하여 실행 종속성을 표현할 수 있음
    • 신호는 매개변수 값을 포함한 정보를 전달하는 메시지 조각임
  • 중단점

    • 워크플로 단계에 중단점을 설정하여 코드 수준의 중단점과 유사하게 작동함
    • 중단점에 도달하면 해당 단계가 "일시 중지" 상태로 들어가고 사용자가 수동으로 재개할 때까지 워크플로 그래프의 진행이 중단됨
  • 타임라인

    • 단계 실행 타임라인을 포함하여 모든 중요한 이벤트를 캡처함
    • 디버깅에 유용하며 단계 상태에 대한 통찰력을 제공함
  • 재시도 정책

    • 실패로 인해 터미널 상태에 도달한 단계에 대해 재시도 정책을 지원함
    • 플랫폼 오류와 사용자 정의 조건에 대한 재시도를 구분함
  • 집계 보기

    • 워크플로 인스턴스의 모든 단계의 집계 상태를 볼 수 있음
    • 현재 실행의 런타임 데이터와 기본 집계를 결합하여 집계 상태를 계산함
  • 롤업

    • 워크플로 인스턴스의 높은 수준의 요약을 제공함
    • 각 단계의 상태와 각 상태의 단계 수를 자세히 설명함
  • Maestro 이벤트 발행

    • 워크플로 정의, 워크플로 인스턴스 또는 단계 인스턴스가 변경될 때 이벤트를 생성하고 외부 시스템에 발행함
    • 내부 이벤트와 외부 이벤트로 구분됨
  • Maestro 시작하기

    • Netflix에서 광범위하게 사용되었으며, 이제 소스 코드를 공개함
    • GitHub 저장소에서 코드를 찾을 수 있으며, 질문이나 의견이 있으면 GitHub 이슈를 생성해달라는 요청
  • 감사의 말

    • Maestro 프로젝트에 기여한 팀원들과 Netflix의 동료들에게 감사의 말을 전함

GN⁺의 정리

  • Maestro는 Netflix의 대규모 워크플로를 관리하기 위해 설계된 오케스트레이터로, 다양한 형식의 비즈니스 로직을 지원함
  • 동적 매개변수와 코드 삽입을 통해 유연성과 동적 성을 크게 향상시킴
  • 다양한 실행 전략과 패턴을 제공하여 복잡한 워크플로를 쉽게 정의하고 관리할 수 있음
  • Netflix의 데이터 웨어하우스와 같은 단일 데이터 소스를 처리하는 데 적합함
  • 유사한 기능을 제공하는 다른 오케스트레이터로는 Apache Airflow와 Prefect가 있음
Hacker News 의견
  • 기업 기술 블로그와 내부 시스템에 감명받았으나, 이제는 코드가 부채임을 깨달음

    • 오픈 소스 사용을 선호하며, 코드 유지보수와 기능 추가가 필요함
    • 비즈니스에 중요한 코드가 아닌 것은 자원 낭비임
  • 엔지니어들이 워크플로우 솔루션에 만족하기까지 여러 번의 반복이 필요함을 궁금해함

    • Netflix, Uber, Amazon 모두 여러 솔루션을 구축함
    • 엔지니어들이 워크플로우 엔진을 만드는 것에 흥미를 느낌
  • Windmill.dev 창립자 의견

    • Maestro와 Windmill은 유사점이 많음
    • 주요 차이점:
      • Windmill은 Rust로 작성됨
      • Maestro는 CockroachDB를 사용, Windmill은 자체 샤딩 알고리즘 사용
      • 라이선스 차이: Maestro는 Apache 2.0, Windmill은 AGPL
      • Netflix의 지원을 받는 Maestro와 비교해 Windmill은 작은 회사임
      • Maestro는 자체 호스팅 문서와 UI가 부족함
  • Activebatch 사용 경험 공유

    • Activebatch는 간단한 MS SQL DB와 Windows GUI 설치로 강력한 자동화 환경을 제공함
    • Airflow와 다른 오픈 소스 경쟁자들은 복잡함
    • Activebatch가 기업 판매 모델로 인해 널리 사용되지 못하는 것이 아쉬움
  • Netflix/Conductor 사용에 대한 혼란

    • 프로젝트가 Netflix/Conductor를 사용하는 것처럼 보이지만, 아카이브된 버전을 사용 중임
    • Orkes Conductor를 사용하지 않음
  • 오케스트레이터에 대한 의견

    • 오픈 소스와 공개 개발은 훌륭하지만, 이미 많은 오케스트레이터가 존재함
    • 새로운 옵션이 상업적으로 사용될 가능성이 낮음
  • Temporal과 비교

    • Maestro는 Java로 작성되었고, Temporal은 Go로 작성됨
  • 프로젝트에 대한 긍정적인 평가

    • ML과 데이터 엔지니어링 프로젝트에서 유사한 것을 만들고 싶었음
    • 테스트를 기대함
  • Conductor와의 차이점에 대한 질문

    • 코드에서 많은 유사점을 발견함
    • JSON을 워크플로우 정의 언어로 사용함
  • 기사 내용에 대한 비판

    • AI가 작성한 것처럼 느껴짐
    • 실제 사용 사례의 예제 워크플로우가 필요함