Pyohwan / english-study

0 stars 0 forks source link

Re-Architecting the Video Gatekeeper #12

Open Pyohwan opened 5 years ago

Pyohwan commented 5 years ago

https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00

Content Setup 엔지니어링 팀이 Netfilix OSS 기술인 Hollow 를 사용하여, 컨텐츠 파이프 라인의 필수 구성 요소를 다시 설계하고 단순화한 방법에 대한 이야기 - 그 과정에서 많은 비지니스 가치를 제공합니다.

The Context

Netflix 서비스의 각 영화 및 프로그램은 최적의 시청환경을 보장하기 위해 신중하게 관리(큐레이터)합니다. 이 큐레이터 담당 팀은 Title Operations 입니다. Title Operations 는 다음 사항을 확인 합니다.

타이틀이 위 최소 요구사항을 모두 충족하면 서비스 가능하다. Gatekeeper 는 비디오의 활력(liveness)를 평가하는 넥플릭스 시스템이다. 타이틀은 Gatekeeper 가 승인하기 전까지 회원에게 표시되지 않는다 - 만약 설정 검증이 불가능하면, Title Operations 에서 어떤 부분이 빠졌는지 지적한다.

Gatekeeper는 여러 업스트림 시스템의 데이터를 모아서 비지니스 로직에 적용하고 각 국가별 상태를 상세하게 뽑아내는 등의 지정된 작업을 수행한다.

The Tech

Hollow 는 몇년전에 릴리즈한 OSS 기술인데, total high-density near cache 를 잘 표현했다.

이 기술 전체 성격에 대한 흥미로운 것 하나 - 우리는 들쭉날쭉한 메모리 레코드를 교환 하는것에 대해 걱정을 안하기 때문에, 추정하기가 가능하고 dataset 의 인메모리를 미리 계산할 수 있다. 결과적으로 많은 datasets 에서 RAM을 훨씬 효율적으로 사용할 수 있다. 기존 partial-cache 솔루션은 dateset 의 5% 만 캐싱하거나 혹은 hit/miss 비율을 얻기 위해 10% 의 공간을 비축해야 했다 - 동일한 양의 메모리로 Hollow 는 dataset 의 100% 를 사용가능하고 100% hit 를 달성할 수 있다.

그리고 분명히 100% 히트율을 얻으면, 데이터 접근에 필요한 모든 I/O가 없어진다.

The Status-Quo (현재상황)

최근까지 Gatekeeper 는 이벤트 중심의 시스템이었다. 어떤 업스트림 시스템에서 비디오 변경이 발생하면, 시스템은 Gatekeeper 로 이벤트를 전송한다. Gatekeeper 는 각 업스트림 서비스에 닿고, 비디오 및 관련 정보의 liveness 를 평가하기 위해 입력데이터를 수집한다. 그러면 단일 비디오의 상태를 설명하는 아웃풋을 생성한다. image Old Gatekeeper Architecture

이 모델에는 몇가지 문제점이 있다:

이러한 이슈의 "sweep(쓸다)" 함으로써 완화시켰다. (다음주 점심으로 미룸) 불행하게도, 이런 완화 조치는 큐에 더 많은 이벤트를 추가함으로써 문제를 더 악화 시켰다.

명백하게, 방향 변경이 필요했다.

The Idea

우리는 I/O 병목을 해결하기 위해 total high-density near cache (i.e., Hollow) 를 쓰기로 결정했다. 각 업스트림 시스템에, 우리는 Gatekeeper 가 평가를 수행하는데 필요한 모든 데이터를 포함하는 Hollow dataset 을 만들었다. 각 업스트림 시스템은 캐시를 최신 상태로 유지할 책임이 있다. image New Gatekeeper Architecture

이 모델에서 liveness 평가는 업스트림의 데이터 검색과 개념상 분리되어 있다. 이벤트에 반응하는 대신 Gatekeeper 는 모든 국가의 비디오 자산의 liveness 를 지속적으로(continuous) 처리합니다. 싸이클이 모든 비디오를 반복해서 세부적인 liveness 를 계산한다. 각 사이클이 끝나면, 모든 국가의 비디오 liveness 상태를 나타내는 아웃풋(Hollow dataset 포함)을 생성한다.

continuous processing 모델이 I/O 병목을 완전하게 없애려면 효율적으로 주문을 처리할 수 있다고 예상했다. 또한 우리는 이 모델로 바꿈으로 인해서 많은 긍적적인 비지니스 효과가 있을것이라고 예상했다.

The Problem

Hollow 는 타임머신처럼 생각할 수 있다. 시간이 지남에 따라 dataset 이 변경되면, 타임라인을 일련의 개별 data states 로 분해하여 소비자에게 전달한다. 각 데이터 state 는 전체 dataset 의 특정 시간 스냅샷을 나타낸다. image Hollow is like a time machine

일반적으로, Hollow dataset 컨슈머는 최신 데이터 상태를 읽고 새로운 상태가 생성될때까지 캐시를 최신으로 유지한다. 그런데, 이전 상태를 가리킬 수도 있다 - 전체 dataset 의 시각을 과거로 되돌린다.

data states 를 프로듀싱하는 전통적인 방법은 반복적으로 _사이클_을 실행하는 싱글 프로듀서를 유지하는것이다. 싸이클 동안 프로듀서는 source of truth 에서 모든 기록에 대해 반복한다. 반복할때 Hollow 라이브러리에 각 레코드를 추가한다. 그런 다음 Hollow 는 추가된 사이클에서의 데이터와 마지막 사이클에서의 데이터의 차이를 계산한 다음, 퍼블리셔에게 이 location 을 컨슈머에게 알려준다. image Traditional Hollow usage

total-source-of-truth 반복 모델의 문제점은 오랜시간이 걸릴수 있다는 것이다. 일부 업스트림 시스템에서는 몇시간이 걸릴 수 있다. data-propagation latency 는 용납할 수 없다 - 예를들어 타이틀 운영자가 라이브에 임박한 영화에 등급을 추가해야 하는데, 몇시간을 기다릴수는 없다.

The Improvement

우리가 필요한것은 더 빠른 타임머신이다 - 더 많은 주기를 가진 state 를 생성하면, 컨슈머가 더 빨리 변화를 실현할 수 있다. image Incremental Hollow is like a faster time machine

이것을 달성하기 위해 Hollow 인프라를 새로 만들고, 이전 Hollow 라이브러리에서 수행된 작업을 활용하고, Target(지금은 public non-beta API) 의 Streaming Platform Team 에서 사용하도록 개척했다.

이 인프라를 사용하면 소스 애플리케이션에서 변경 사항이 감지 될때마다 엡데이트 된 코드가 Kafka 로 emit 된다. 새 콤프넌트인 Hollow Incremental Producer 서비스는 소스 애플리케이션 일부가 아니며, 사전 정의된 반복 사이클을 수행한다. 각 사이클 동안, 마지막 사이클 이래로 토픽에 저장된 모든 메시지를 읽고, 업데이트 된 레코드의 새 상태를 Hollow 엔진에 반영한다.

만약 Kafka 토픽의 메시지에 Hollow dataset 의 비교해서 데이터가 같으면 아무 작업도 안한다. image Hollow Incremental Producer Service

누락된 이벤트에서 발생하는 이슈를 완화하기 위해, 주기적으로 전체 소스 dataset 에서 sweep 메카니즘을 하는 것을 구현했다. 반복하는 동안, 각 레코드를 카프카 토픽으로 emit 한다. 이렇게 하면 누락된 업데이트가 결국 Hollow dataset 에 반영된다. 추가적으로, 이것은 Hollow dataset 으로 전파하는 기본 메카니즘이 아니라서, 기존 Hollow 사용하던 소스 반복 사이클을 실행하지 않아도 된다.

Hollow Incremental Producer 는 카프카 토픽에서 많은 메시지를 읽고 내부적으로 빠르게 Hollow 상태를 바꿀 수 있다 - 따라서 우리는 사이클 시간을 매우 짧게 할 수 있다 (default 는 30초)

이것이 우리가 더 빠른 타임 머신을 구축한 방법이다. 이제 타이틀 운영자가 영화에 만기 비율을 추가하면, 30초 이내에 Hollow dataset 에서 해당 데이터를 사용할 수 있다.

The Tangible(유형) Result

데이터 전파 지연 이슈가 해결되었고, 모든 I/O 바운더리를 제거하기 위해 Gatekeeper 를 다시 구현할 수 있었다. 이전의 Gatekeeper는 모든 국가의 비디오에 대한 자산 평가는 생각할 수 없었을것이다 - 한주 이상 컨텐츠 파이프 라인을 묶을것이다 (그리고 그동안에는 다른 처리를 할 수 없다) 이제 약 30초 후에 모든것을 다시 평가한다 - 우리는 매분마다 그렇게 한다.

더이상 liveness 평가의 지연 및 누락이 없고, 이전 Gatekeeper 시스템을 비활성화 하여 업스트림 시스템의 부하를 줄였다 - 경우에 따라 최대 80% 까지 image Load reduction on one upstream system 이러한 성능상의 이점 이외에도, 탄력전인 혜택이 있다. 이전 Gatekeeper 시스템은 업스트림 서비스 중 하나가 다운 된 경우, 데이터 검색을 할 수 없어 모든 liveness 평가를 전혀 할 수 없었다. 새로운 구현에서는 업스트림 시스템 중 하나가 다운되면 게시를 중단한다 - 하지만 다른 dataset 는 여전히 부실(stale) data 를 처리 한다. 예를 들어 번역된 시놉시스 시스템이 다운 되더라도, 여전히 특정 region 현지의 영화를 가져온다.(올바른 자막도)

The Intangible(무형) Result

아마도 성능 향상보다 훨씬 더 유리한 점은 시스템의 개발 속도가 향상 된것이다. 이전에는 며칠 또는 몇주가 걸리던 개발, 검증, 릴리즈 변경 사항을 몇분 안에 가능해다 - 우리는 상당히 향상된 품질의 릴리즈를 했다

Hollow 의 타임머신 측면은, 독점적인 입력 데이터로 모든 결정을. 수행함을 100% 재현 가능하다는 것이다. Gatekeeper 는 모든 입력 상태를 시간 X 로 되 돌리고 모든것을 다시 평가함으로써, 시간 X 에 일어난 일을 정확하게 재연할수 있음을 의미한다.

이 사실을 이용하여 Gatekeeper 비지니스 로직의 변경 사항을 신속하게 반복한다. PROD Gatekeeper 인스턴스를 "follows" 하는 PREPROD Gatekeeper 인스턴스를 유지한다. PREPROD 는 전체 카탈로그에 대해 지속적으로 liveness 를 평가하지만 다른 Hollow dataset 으로 아웃풋을 퍼블리싱한다. 각 사이클이 시작될때 PREPROD 환경은 PROD 에서 최신으로 생성된 상태를 수집하고, 각 입력 datasets 를 PROD 아웃풋 생성에 사용된 동일한 버전으로 설정한다. image The PREPROD Gatekeeper instance “follows” the PROD instance

Gatekeeper 비지니스 로직을 변경하고자 할때 PREPROD 클러스터에 퍼블리스 한다. PREPROD 의 후속 아웃풋 상태는 PROD 의 해당 아웃풋 상태와 비교(diffed)하여 로직 변경이 야기할것을 정확히 볼 수 있다. 이러한 방식으로, 우리는 한눈에 우리의 변화가 정밀한 예정된 효과와 의도하지 않은 결과가 전혀 _없음_을 검증할 수 있다. image A Hollow diff shows exactly what changes

배포 프로세스의 일부 반복과 함께 사용하면, 우리팀 코드, 검증, 배포에서 강렬하게 Gatekeeper의 변경점을 몇분안에 결과를 얻는다 - 이전 시스템 보다 적어도 1배 빠른 속도 - 그리고 이전 아키텍쳐에서 가능했던 것보다 더 높은 수준의 안정성을 제공한다.

Conclusion

새로운 Gatekeeper 시스템은 향후 추가적인 비지니스 가치를 포착하는 기회를 주고, 다음 분기 까지 계속 추진할 예정이다. 추가적으로 이것은 Content Engineering 공간과 어떤 넷플릭스에서 다른 시스템으로 복제할 수 있는 패턴이다 - 이미 n-hollow-input, one-hollow-output 이점을 공식화 하고 활용하기 위한 후속 프로젝트가 시작되었다.

Content Setup Engineering 은 지금 흥미 진진한 곳이다. 특히 각 분기를 지날때마다 더 많은 컨텐츠를 생산하기 위해 파이프라인을 확장할때가 그렇다. 우리는 실제 문제를 해결하고 비지니스에 막대한 가치를 제공할수 있는 많은 기회를 갖고 있다 - 컴퓨터 과학에 중점을 두고 최첨단 기술을 사용. 이런 종류의 일이 당신에게 매력있따면, Ivan 에게 공을 굴려라.