The Netflix Cosmos Platform -번역

Netflix Cosmos 플랫폼

조정 된 기능은 microservice입니다

으로프랭크 샌 미구엘Cosmos 팀을 대신하여

Introduction

COSMOS는 비동기 워크 플로우 및 서버리스 함수로 MicroServices의 최상의 측면을 결합한 컴퓨팅 플랫폼입니다.그것의 달콤한 지점은 복잡한, 복잡한 계층 적 워크 플로우를 통해 조정 된 리소스 집약적 인 알고리즘을 분량에서 몇 년 사이에 포함하는 응용 프로그램입니다.그것은 한 번에 수십만 개의 CPU를 소비하는 높은 처리량 서비스와 인간이 계산 결과를 기다리고있는 대기 시간에 민감한 작업 부하를 모두 지원합니다.

코스모스 서비스

이 기사에서는 우리가 코스모스를 지은 이유, 어떻게 작동하는지, 우리가 방해받은 것들 중 일부를 공유하는 이유를 설명합니다.

배경

Netflix의 미디어 클라우드 엔지니어링 및 인코딩 기술 팀은 시스템을 공동으로 운영하여 수신 미디어 파일을 파트너와 스튜디오에서그들을 놀아 라모든 장치에서.이 시스템의 첫 번째 세대는 2007 년 스트리밍 출시와 함께 살아갔습니다. 2 세대 추가 된 규모는 작동하기가 매우 어렵습니다.세 번째 세대,다시로드되었습니다, 약 7 년 동안 온라인이었으며 안정적이지 않은 것으로 입증되었습니다.대규모 확장 가능…에

리로드가 설계되었을 때 우리는 제한된 컴퓨팅 클러스터를 운영하는 소규모 개발자 팀이었고 하나의 사용 사례에 중점을 둡니다 : 비디오 / 오디오 처리 파이프 라인.시간이 3 배 이상의 개발자의 수를 통과 할 때, 우리의 사용 사례의 폭과 깊이가 확장되었고, 우리의 규모는 10 배 이상 증가했습니다.모 놀리 식 아키텍처는 새로운 기능의 전달을 크게 느려졌습니다.우리는 더 이상 모든 사람들이 새로운 기능을 구축하고 배포하는 데 필요한 전문 지식을 소유 할 것을 기대할 수 없었습니다.생산 문제를 다루는 것은 인프라 코드가 모두 응용 프로그램 코드와 섞여 있기 때문에 모든 개발자에게 세금을 쌓은 값 비싼 잡초가되었습니다.우리가 소규모 팀이었을 때 우리를 잘 게재 한 중앙 집중식 데이터 모델은 책임이되었습니다.

우리의 대응은 워크 플로우 중심 마이크로 서비스를위한 플랫폼 인 Cosmos를 만드는 것이 었습니다.1 차 목표는 우리의 현재의 역량을 보존하는 것이 었습니다.

  • 관측 가능 – 내장 로깅, 추적, 모니터링, 경고 및 오류 분류를 통해.
  • 모듈성 – 서비스를 구성하고 컴파일 타임 및 런타임 모듈성을 모두 사용하는 의견이있는 프레임 워크입니다.
  • 생산성 – 전문화 된 테스트 러너, 코드 생성기 및 명령 줄 인터페이스를 포함한 로컬 개발 도구.
  • 배달 – 파이프 라인의 완전 관리 된 연속 배달 시스템, 지속적인 통합 작업 및 종료 테스트 종료 시스템.끌어 오기 요청을 합병하면 수동 개입 없이는 생산할 수 있습니다.

우리는 그것이 있었지만, 우리는 또한 확장 성, 신뢰성, 보안 및 기타 시스템 자질을 개선했습니다.

개요

코스모스 서비스는 마이크로 서비스가 아니지만 유사점이 있습니다.전형적인 마이크로 서비스는 요청 부하를 기반으로 자동 입학을 기반으로하는 상태 비 저장 비즈니스 로직이있는 API입니다.API는 다른 시스템에서 응용 프로그램 데이터 및 이진 종속성을 분리하면서 동료와 강력한 계약을 제공합니다.

전형적인 마이크로 서비스

코스모스 서비스는 마이크로 서비스의 강력한 계약 및 분리 된 데이터 / 종속성을 유지하지만 다단 워크 플로우 및 계산식 집약적 인 비동기식 서버가없는 기능을 추가합니다.일반적인 Cosmos 서비스의 아래 다이어그램에서 클라이언트는 비디오 인코더 서비스 API 레이어에 요청을 전송합니다.일련의 규칙은 워크 플로 단계 단계와 서버가없는 함수 집합 전원 특정 알고리즘을 조정합니다.기능은 Docker 이미지로 패키지화되어 있으며 자체 미디어 특정 이진 종속성 (예 : 데비안 패키지)을 가져옵니다.큐 크기에 따라 크기가 조정되며 수만 개의 다른 용기를 사용할 수 있습니다.요청은 몇 시간 또는 며칠이 걸릴 수 있습니다.

전형적인 코스모스 서비스

우려의 분리

코스모스에는 두 가지 분리가 있습니다.한편으로는 API, Workflow 및 Serverless 함수간에 논리가 나뉩니다.반면에 논리는 응용 프로그램과 플랫폼간에 분리됩니다.플랫폼 API는 분산 컴퓨팅의 세부 사항을 숨기면서 응용 프로그램 개발자에게 미디어 특정 추상화를 제공합니다.예를 들어, 비디오 인코딩 서비스는 API, 워크 플로 및 함수의 scale-agnostic 인 구성 요소로 구성됩니다.그들이 달리는 규모에 대한 특별한 지식은 없습니다.이러한 도메인 별 특정 스케일 – 불가지론 구성 요소는 3 개의 맨 위에 구축됩니다.규모 인식작업 분배의 세부 사항을 처리하는 Cosmos 서브 시스템 :

  • Optimus, API 레이어는 내부 비즈니스 모델에 외부 요청을 매핑합니다.
  • 플라토, 비즈니스 규칙 모델링을위한 워크 플로 계층입니다.
  • 지층, 무늬가없고 계산 집약적 인 기능을 실행하기 위해 호출되는 서버가없는 계층입니다.

서브 시스템은 모두 타임 스톤을 통해 서로 비동기 적으로 서로 통신하며, 하이 스케일, 낮은 대기 시간 우선 순위 큐 시스템.각 하위 시스템은 서비스의 다른 관심사를 해결하고 목적으로 구축 된 관리 지속적인 전달 프로세스를 통해 독립적으로 배포 할 수 있습니다.이러한 우려를 분리하면 Cosmos 서비스를 작성, 테스트 및 운영하기가 더 쉽습니다.

플랫폼 및 응용 프로그램의 분리

코스모스 서비스 요청

Cosmos 서비스 요청의 추적 그래프

위의 그림은 Nirvana의 스크린 샷, 우리의 관찰 능력 포털입니다.그것은 Cosmos (이 경우 비디오 인코더 서비스)에서 일반적인 서비스 요청을 보여줍니다.

  1. 인코딩에 대한 하나의 API 호출이 있으며, 비디오 소스와 레시피가 포함되어 있습니다.
  2. 비디오는 31 덩어리로 나뉩니다. 31 개의 인코딩 기능이 병렬로 실행됩니다.
  3. 어셈블 함수가 한 번 호출됩니다
  4. 인덱스 기능이 한 번 호출됩니다
  5. 워크 플로가 8 분 후에 완료됩니다

서비스 레이어징

Cosmos는 서비스의 분해 및 레이어징을 지원합니다.결과적으로 모듈 식 아키텍처를 통해 팀은 전문 분야에 집중하고 API를 방출하고주기를 방출 할 수 있습니다.

예를 들어, 위에서 언급 한 비디오 서비스는 장치에서 재생할 수있는 스트림을 만드는 데 사용되는 많은 것 중 하나 일뿐입니다.이러한 서비스는 검사, 오디오, 텍스트 및 패키징을 포함하여 상위 수준의 서비스를 사용하여 조율됩니다.이들 중 가장 크고 가장 복잡하고 이들은 스튜디오에서 출처를 가져 와서 Netflix 서비스에서 재생할 수있는 Tapas입니다.또 다른 높은 수준의 서비스는 마케팅 클립이나 일일 생산 편집 프록시와 같은 스튜디오 운영에 사용되는 Sagan입니다.

코스모스 서비스의 레이어링

프로덕션 스튜디오에서 새 제목이 도착하면 검사를 수행하고 비디오를 인코딩하는 요청 (여러 해상도, 자질 및 비디오 코덱), 오디오 (여러 자질 및 코덱)를 인코딩하고 자막 (많은 언어)을 생성하는 요청을 조정하는 타파스 워크 플로를 트리거합니다.및 패키지 결과 출력 (다중 플레이어 형식).따라서 TAPAS에 대한 단일 요청은 다른 코스모스 서비스와 수천 개의 계층 기능 호출에 수백 가지의 요청을 초래할 수 있습니다.

아래 추적은 최상위 서비스의 요청이 낮은 수준의 서비스로 내려갈 수있는 방법의 예를 보여줍니다.이 경우 요청은 8 가지 다른 코스모스 서비스와 9 가지의 계층 기능을 포함하는 수백 가지의 다른 조치가 완료 될 때 24 분이 걸렸습니다.

여러 레이어를 통해 서비스 요청의 추적 그래프

워크 플로우 규칙!

또는 우리는 말해야합니까?워크 플로우 규칙~을 빼앗아가는 것플라톤은 서비스 개발자가 도메인 논리를 정의하고 상태 비 저장 함수 / 서비스를 조정할 수있는 프레임 워크를 제공하여 Cosmos에서 모든 것을 함께 묶는 접착제입니다.Optimus API 레이어에는 워크 플로를 호출하고 상태를 검사하는 기본 기능이 내장되어 있습니다.Stratum Serverless Layer는 서버없는 함수를 쉽고 직관적으로 호출하기 위해 강력한 유형의 RPC 클라이언트를 생성합니다.

Plato는 우리의 알고리즘의 비동기적이고 계산 된 집중적 인 성격을 빌려하는 전방 체인 규칙 엔진입니다.절차 워크 플로우 엔진과 달리Netflix의 도체Plato를 사용하면 “항상 켜짐”인 워크 플로를 쉽게 만들 수 있습니다.예를 들어,보다 나은 인코딩 알고리즘을 개발할 때, 규칙 기반 워크 플로는 새로운 워크 플로를 트리거하고 관리 할 필요없이 기존 비디오 업데이트를 자동으로 관리합니다.또한 워크 플로가 다른 서비스를 호출 할 수 있으므로 위에서 언급 한 서비스 레이어를 사용할 수 있습니다.

플라톤은 다단계 시스템입니다 (사용법Apache Karaf.), 워크 플로우 운영의 운영 부담을 크게 줄입니다.사용자는 자신의 규칙을 자신의 소스 코드 저장소로 쓰고 테스트 한 다음 컴파일 된 코드를 플라톤 서버에 업로드하여 워크 플로를 배포합니다.

개발자는 EmiRax로 작성된 일련의 워크 플로우 인 Emirax로 작성된 도메인 특정 언어 인 워크 플로를 지정합니다.각 규칙에는 4 개의 섹션이 있습니다.

  • 일치 :이 규칙에 대해 만족 해야하는 조건을 트리거합니다.
  • 조치 :이 규칙이 트리거 될 때 실행될 코드를 지정합니다.이는 요청을 처리하기 위해 계층화 함수를 호출하는 위치입니다.
  • 반응 : 조치 코드가 성공적으로 완료 될 때 실행될 코드를 지정합니다.
  • 오류 : 오류가 발생했을 때 실행할 코드를 지정합니다.

이러한 각 섹션에서 일반적으로 먼저 워크 플로우의 변경 사항을 기록한 다음 워크 플로우를 실행하거나 실행 결과를 반환하는 것과 같이 워크 플로를 전달하는 단계를 수행합니다 (자세한 내용은이 프리젠 테이션짐마자

대기 시간에 민감한 응용 프로그램

Sagan과 같은 코스모스 서비스는 사용자가 직면하기 때문에 대기 시간에 민감합니다.예를 들어, 소셜 미디어 게시물에서 일하는 아티스트는의 최신 시즌에서 비디오를 클리핑 할 때 오랜 시간을 기다리고 싶지 않습니다.돈을 강조하고…에계층의 경우, 대기 시간은작업을 수행 할 시간더하기컴퓨팅 리소스를 얻는 시간…에일이 매우 파열되면 (종종 사례), “리소스를 얻는 시간“구성 요소가 중요한 요소가됩니다.일러스트레이션을 위해 쇼핑을 할 때 일반적으로 구매할 것들 중 하나가 화장지입니다.일반적으로 장바구니에 문제가없고 체크 아웃 라인을 통과하는 데 아무런 문제가 없으며 전체 프로세스가 30 분이 걸립니다.

자원 희소성

그런 다음 어느 날 나쁜 바이러스 일이 일어납니다여러분동시에 더 많은 화장지가 필요합니다.너의화장지 대기 시간전반적인 수요가 사용 가능한 용량을 초과했기 때문에 30 분에서 2 주간의 경우코스모스 어플리케이션 (특히 층수 함수)은 파열 및 예측 불가능한 수요에 직면하여 동일한 문제가 있습니다.stratum 관리기능 실행 대기 시간몇 가지 방법으로 :

  1. 자원 풀.최종 사용자는 자신의 비즈니스 유스 케이스에 대해 계층 컴퓨팅 리소스를 예약 할 수 있으며, 사용자 그룹이 리소스를 공유 할 수 있도록 클립 풀이 계층 적입니다.
  2. 따뜻한 용량…에최종 사용자는 계층에서 시동 대기 시간을 줄이기 위해 수요가 발생하기 위해 컴퓨팅 리소스 (예 : 컨테이너)를 요청할 수 있습니다.
  3. 마이크로 배치…에Stratum은 또한 시동 대기 시간을 줄이기 위해 Apache Spark와 같은 플랫폼에서 발견되는 트릭 인 마이크로 배치를 사용합니다.아이디어는 많은 기능 호출에 대한 시작 비용을 전파하는 것입니다.기능을 10,000 번 입력하면 10,000 개의 컨테이너에서 한 번 실행되거나 1000 개의 컨테이너에서 각각 10 배로 실행될 수 있습니다.
  4. 우선 순위.대기 시간 저 대기 시간에 대한 욕구로 비용을 균형을 조정할 때, 보통 중간 어딘가에 착륙하는 것이 일반적으로 전형적인 버스트를 다루는 충분한 자원이지만 가장 낮은 대기 시간으로 가장 큰 버스트를 처리하기에 충분하지 않습니다.업무의 우선 순위를 지정함으로써 응용 프로그램은 자원이 부족한 경우에도 가장 중요한 작업이 낮은 대기 시간으로 가장 중요한 작업을 처리 할 수 있습니다.Cosmos 서비스 소유자는 최종 사용자가 우선 순위를 설정하거나 API 계층 또는 워크 플로에서 스스로 설정할 수 있습니다.

처리 민감한 응용 프로그램

Tapas와 같은 서비스는 많은 양의 컴퓨팅 리소스 (예 : 하루 당 수백만의 CPU 시간)를 소비하고 개별 작업을 완료하는 데 시간이 아닌 시간 또는 며칠 동안 작업 완료와 관련하여 더 관련이 있습니다….에즉, 서비스 수준 목표 (SLO)는하루에 작업작업 당 비용대신초당 작업…에

처리량에 민감한 작업 부하의 경우 가장 중요한 SLO는 Stratum Serverless Layer에서 제공하는 것입니다.Stratum, 그 꼭대기에 지어졌습니다Titus 컨테이너 플랫폼이를 위해 민감한 작업 부하가 유연한 자원 스케줄링을 통해 “기회 주의적”계산 리소스를 사용할 수 있습니다.예를 들어, 서버가없는 함수 호출 비용은 최대 1 시간까지 기다릴 수있는 경우가 낮아질 수 있습니다.

strangler 그림

우리는 레거시 시스템을 재 장전하는 것처럼 크고 복잡한 것처럼 유산 시스템을 움직이는 것으로 알고 있었지만, 실패한 재 공학 프로젝트의 파편이 흩어져있는 위험한 틈에 큰 도약이 될 것이라는 것을 알고 있었지만, 우리가 뛰어 내려야하는 질문은 없었습니다.위험을 줄이려면 우리는 그를 채택했습니다strangler 무화과 패턴새로운 시스템이 오래된 시스템을 돌아서 결국 완전히 대체 할 수 있습니다.

아직도 배우는 것

우리는 2018 년에 코스모스를 건설하기 시작했으며 2019 년 초부터 생산 중이 었습니다. 오늘날 약 40 개의 코스모스 서비스가 있으며 더 많은 성장이 올 것으로 예상됩니다.우리는 여전히 중간 여정에 있지만 지금까지 우리가 배웠던 것의 몇 가지 주요 조명을 공유 할 수 있습니다.

그만큼Netflix 문화핵심 역할을 수행했습니다

Netflix 엔지니어링 문화는 유명하게 하향식 제어가 아닌 개인적인 판단을 유의합니다.소프트웨어 개발자는 위험을 감수하고 의사 결정을 내리는 자유와 책임을 모두 가지고 있습니다.우리 중 누구도 소프트웨어 설계자의 제목이 없습니다.우리 모두는 그 역할을합니다.이러한 맥락에서 우주가 적합하게 등장하고 현지 최적화 시점에서의 다른 시도에서 시작합니다.Optimus, Plato 및 Stratum은 독립적으로 잉태하여 결국 단일 플랫폼의 비전으로 합쳐졌습니다.팀의 응용 프로그램 개발자는 사용자 친화적 인 API 및 개발자 생산성에 중점을 둡니다.인프라와 미디어 알고리즘 개발자 간의 강력한 파트너십을 현실로 전환시킵니다.우리는 하향식 엔지니어링 환경에서 그것을 할 수 없었습니다.

microservice + workflow + serverless

우리는 “프로그래밍 모델”서버가없는 기능을 조정하는 워크 플로를 트리거하는 MicroServices“강력한 패러다임이 될 것입니다.대부분의 사용 사례에서 잘 작동하지만 일부 응용 프로그램은 추가 된 복잡성이 이점의 가치가없는 것으로 간단합니다.

플랫폼 사고 방식

대형 분산 응용 프로그램에서 “플랫폼 플러스 응용 프로그램”으로 이동하는 것은 주요 패러다임 변화였습니다.모두가 그들의 사고 방식을 바꾸어야했습니다.응용 프로그램 개발자는 일관성, 신뢰성 등을 대가로 일정량의 유연성을 포기해야했습니다. 플랫폼 개발자는 더 많은 공감을 개발하고 고객 서비스, 사용자 생산성 및 서비스 수준을 우선 순위를 지정해야했습니다.애플리케이션 개발자가 플랫폼 팀이 자신의 필요에 따라 적절하게 집중하지 않고 플랫폼 팀이 사용자 요구에 의해 지나치게 느껴지는 기타 시간을 느꼈던 순간이있었습니다.우리는 서로 열려 있고 정직하게함으로써 이러한 어려운 반점을 겪었습니다.예를 들어 최근의 회고전 이후, 우리는 개발자 경험, 신뢰성, 관찰 가능성 및 보안과 같은 크로스 커팅 시스템 특성에 대한 개발 트랙을 강화했습니다.

플랫폼이 승리합니다

우리는 개발자가 비즈니스 문제에 더 많은 시간을 보내고 인프라를 다루는 데 더 많은 시간을 보내고 개발자가 더 효과적이고 더 빠르고 더 빨리 일할 수 있도록하는 목표로 코스모스를 시작했습니다.때때로 목표는 어려운 것처럼 보였지만 우리는 우리가 희망 한 이득을보기 시작했습니다.개발자가 코스모스에서 가장 좋아하는 시스템 특성 중 일부는 전달, 모듈성 및 관찰 가능성 및 개발자 지원을 관리합니다.우리는 이러한 자질을 더 잘 만들기 위해 노력하고 있으며 현지 개발, 탄력성 및 테스트 가능성과 같은 약한 영역에서 일하고 있습니다.

미래의 계획

2021은 대다수의 일을 우주로 재로드 한 것으로, 더 많은 개발자와 훨씬 더 높은 부하로 옮겨가는 것처럼 Cosmos의 큰 해가 될 것입니다.우리는 새로운 유스 케이스를 수용하기 위해 프로그래밍 모델을 발전시킬 계획입니다.우리의 목표는 코스모스를 사용하기 쉽고,보다 탄력적이며 더 효율적이고 효율적으로 더욱 쉽게 사용할 수있는 것입니다.Cosmos가 작동하는 방법과 우리가 어떻게 사용하는 방법에 대한 자세한 내용은 자세한 내용을 알아보십시오.

Leave a Comment