[번역] 넷플릭스에서의 파이썬

2019. 12. 9. 16:04Data Analysis/Python

넷플릭스 테크 블로그 포스팅 중  'Python at Netflix' 직접 번역했습니다. 한국어로 어색하지 않으면서도 추가되거나 빠지는 내용이 없도록 번역하다 보니 문장이 매끄럽지 않습니다. 오탈자가 있다면 댓글로 알려주시기 바랍니다.

 

넷플릭스의 Pythonistas로부터 쓰여졌고, Amjith Ramanujam에 의해 조정되고 Ellen Livengood에 의해 편집 됨

우리 중 많은 사람들이 PyCon에 갈 준비를 하기 때문에, 우리는 넷플릭스에서 파이썬이 어떻게 쓰이는지에 대해 공유하고자 한다. 우리는 파이썬을 전체 콘텐츠의 생태주기를 통해 사용하는데, 어떤 콘텐츠를 펀딩할 것인지부터 최종 비디오를 제공하는 CDN을 운영하는 것까지, 1억 4천 8백만 명의 회원들을 대상으로 한다. 우리는 많은 파이썬 패키지 관련 오픈소스를 사용하고 기여한다. 몇가지는 아래에서 언급하겠다. 만약 이 내용들 중 당신에게 흥미로운 것이 있다면, 넷플릭스 job site를 체크하거나 PyCon에서 우리를 찾아주길 바란다. 우리는 PyLadies Auction에 몇 장의 넷플릭스 오리지날 포스터를 기증했고, 그곳에서 여러분들을 만나기를 고대하고 있다.

 

Open Connect

Open Connect는 넷플릭스의 콘텐츠 딜리버리 네트워크다 (CDN). 넷플릭스 인프라에 대해 쉽게 생각할 수 있는 방법은(조금 애매할지라도) 다음과 같다. 당신이 리모콘을 누르기 전에 발생하는 모든 일들 (예를들어, 로그인 했습니까? 뭘 할 계획이죠? 당신은 지금까지 어떤 것들을 봐 왔고, 그것을 통해 우리가 어떤 새로운 것을 추천해줄까요? 무엇을 보고싶으세요?) 이런 것들은 아마존 웹 서비스에서 발생하는 반면(AWS), 그 이후에 일어나는 모든 일 (예를 들어 비디오 스트리밍) 들은 Open Connect Network에서 발생한다. 콘텐츠는 가능한 최종 사용자에 가까운 Open Connect CDN의 서버 네트워크에 배치되어, 고객의 스트리밍 경험을 개선하고 넷플릭스와 ISP(인터넷 서비스 공급자) 파트너 모두의 비용을 절감한다.

 

이 CDN 인프라를 디자인(설계), 빌드(구축), 운용하기 위해서는 다양한 소프트웨어 시스템을 필요로 하고, 소프트웨어 시스템의 상당수는 파이썬으로 작성되었다. CDN의 많은 부분을 밑바탕 하는 네트워크 디바이스는 대부분 파이썬 어플리케이션에 의해 관리된다. 이러한 어플리케이션은 우리 네트워크 기어의 인벤토리를 추적하는데, 어떤 디바이스, 어떤 모델, 어떤 하드웨어 컴포넌트 그리고 어떤 사이트에 위치하는지 추적한다. 이러한 장치의 구성은 진실의 출처(source of truth), 디바이스 구성요소들의 적용 그리고 백업을 포함하는 몇몇 다른 시스템으로부터 통제된다. 상태 및 기타 다른 운영적인 요소의 데이터들을 모으기 위한 장치 상호작용은 아직 다른 파이썬 응용프로그램을 활용하고 있다. 파이썬은 네트워킹 장소에서 인기있는 프로그래밍 언어로 자리잡은지 오래 됐는데, 그 이유는 엔지니어가 네트워킹 문제를 빠르게 해결하도록 해주는 직관적 언어이기 때문이다. 결과적으로, 개발되고 있는 많은 유용한 라이브러리들은 언어를 더 배우고 사용하기에 유용하게 해준다.

 

Demand Engineering

Demand Engineering은 넷플릭스 클라우드의 Regional Failovers, 트래픽 분산, 용량 운용, 플릿 효율성을 담당한다. 우리는 우리팀의 도구가 주로 파이썬으로 이루어졌다는 것을 말하는 것이 자랑스럽다. 페일 오버(failover)를 조정하는 서비스는 수치 분석을 위해 numpy와 scipy를 사용하고, 우리의 AWS 인프라를 변경하기 위해 boto3을 사용하며, 비동기 워크로드를 실행하기 위해 rq를 사용한다. 그리고 우리는 이것들을 Flast API의 얇은 계층으로 묶었다. bpython shell에 떨어뜨려 즉흥적으로 만드는 능력은 여러 날을 세이브하게 했다.

 

우리는 Jupyter Notebook과 nteract의 해비 유저인데, 이것들은 운영 데이터 분석과 시각화툴(이것은 회귀 탐지를 돕는다)의 프로토타이핑에 쓰인다. 

 

CORE

CORE팀은 우리의 알람 기능과 통계 분석 일에서 Python을 사용한다. 우리는 우리의 경보 시스템이 문제를 나타낼 때 관련 신호의 1000s 분석의 자동화를 돕기위해 많은 통계적 그리고 수학적 라이브러리들을(numpy, scipy, ruptures, pandas) 배운다. 우리는 결과를 빠르게 전달하기 위해, 팀의 내부와 외부 뿐만 아니라 방대한 양의 분석 업무를 병렬 처리할 분산 워커 시스템을 사용해 시계열 상관관계 시스템을 개발했다.

 

또한 파이썬은 우리가 자동화 태스크, 데이터 탐색과 전처리, 편리한 시각화 소스를 만드는 데 전형적으로 사용하는 툴이다.

 

Monitoring, alerting and auto-remediation

Insight Engineering 팀은 운영 통찰력, 경고, 진단 및 자동 수정을 위한 툴을 구축하고 운영할 책임이 있다. 파이썬의 인기가 올라가면서, 팀은 지금 그들의 대부분의 서비스를 위해서 파이썬 클라이언트를 지원하고 있다. 하나 예를 들어보자면, Spectator라는 파이썬 클라이언트 라이브러리다. 이 라이브러리는 치수 시계열 지표를 기록하는 코드를 계측할 수 있게 해준다. 우리는 다른 넷플릭스 플랫폼 수준의 서비스와 상호작용 하기 위해 파이썬 라이브러리를 구축했다. 라이브러리에 대해 추가로 말하자면, WinstonBolt 제품 또한 파이썬 프레임워크를 활용해 구축됐다. (Gunicorn + Flask + Flask-RESTPlus)

 

Information Security

information security팀은 보안 자동화, 위험성 분류, 자동 치유 그리고 몇 가지 이름에 대한 취약점 식별과 같은 몇몇 높은 넷플릭스의 목표를 성취하기 위해 파이썬을 사용한다. 우리는 Security Monkey를 포함한 몇 가지 성공적인 파이썬 오픈소스를 이미 가지고 있다. (우리 팀의 가장 활동적인 오픈소스 프로젝트다.) 우리는 파이썬을 사용하여 우리의 SSH 자원을 보호한다 (Bless). 우리 Infrastructure Security 팀은 Python을 활용하여 Repokid를 사용한 IAM 권한 조정을 돕는다. 우리는 Lemur를 사용하여 TLS 인증서를 생성하는 것을 돕기 위해 Python을 사용한다.

 

우리의 몇 가지 최근 프로젝트는 Prism을 포함하는데, Prism이란: 시큐리티 엔지니어가 포장된 도로 채택(paved road adoption라고 돼 있는데 더 이상 번역하기가 애매하네요), 위험 요소 및 소스 코드의 취약성을 측정하는 데 도움이 되는 배치 프레임워크다. 우리는 현재 파이썬 라이브러리와 루비 라이브러리를 Prism에 제공한다. Diffy라고 하는 포렌식 트라이지 도구(forensics triage tool)은 완전히 파이썬으로 작성되었다. 우리는 또한 Lanius를 사용해 민감 데이터를 탐색하는데도 파이썬을 쓴다.

 

Personalization Algorithms

우리는 Personalization Machine Learning Infrastructure내에서 몇 가지 머신러닝 모델을 학습시키기 위해 파이썬을 광범위하게 사용한다. 이 모델들은 넷플릭스 경험의 주요 측면이고, 추천 알고리즘부터 아트 개인화, 마케팅 알고리즘등이 있다. 예를들어, 몇몇 알고리즘은 Deep Neural Networks, XGBoost를 학습시키기 위해 TensorFlow, Keras 그리고 PyTorch를 사용하고, Gradient Boosted Decision Trees나 파이썬의 더 넓은 과학적 스택을 학습시키기 위해 LightGBM을 사용한다 (예시: numpy, scipy, sklearn, matplotlib, pandas, cvxpy). 우리는 지속적으로 새로운 접근을 시도하기 때문에, 우리의 다양한 실험들을 진행하기 위해 주피터 노트북을 사용한다. 우리는 또한 우리의 생태계를 활용해 몇 가지의 high-level 라이브러리를 개발해왔다 (예시: data access, fact logging and feature extraction, model evaluation and publishing).

 

Machine Learning Infrastructure

개인화 이외에도 넷플릭스는 사내의 수백가지 사례에 머신러닝을 적용하고 있다. 이러한 응용의 대부분은 Metaflow로부터 지원을 받는데(powerd by), Metaflow란 프로토타입 단계인 ML프로젝트를 쉽게 실행할 수 있게 해주는 파이썬 프레임워크다.

 

메타플로우(metaflow)가 Python의 한계를 돌파한다. 즉, 우리는 잘 병렬화되고 최적화된 파이썬 코드를 활용하여 10Gbps의 속도로 데이터를 가져오고, 수억 개의 메모리 데이터 포인트를 처리하며, 수만 개의 CPU 코어에 대한 계산을 조정한다.

 

Notebooks

우리는 주피터 노트북의 열성적인 유저고, 우리는  reasons and nature of this investment에 대해서 글을 쓴 적이 있다.

 

그러나 파이썬은 우리가 그 서비스들을 제공하는 방법에 있어 아주 큰 역할을 한다. 파이썬은 우리가 개발하고, 디버깅하고, 탐험하고, 시제품을 만들어야 할 때 기본 언어이며, 주피터 생태계와는 서로 다른 상호작용을 한다. 우리는 Python을 사용하여 사용자를 대신하여 노트북 로그, 보관, 게시 및 복제와 같은 작업을 관리할 수 있는 사용자 정의 확장을 주피터 서버에 구축한다.

우리는 다양한 주피터 커널을 통해 사용자들에게 다양한 파이썬 기능을 제공하고, 파이썬을 이용하여 그 커널 사양의 배치를 관리한다.

 

Orchestration

Big Data Orchestration팀은 ETL과 Adhoc 파이프라인을 스케줄링하고 실행할 수 있는 모든 서비스와 툴링을 제공할 책임이 있다.

 

오케스트레이션 서비스의 많은 구성 요소들이 파이썬으로 쓰여져 있다. Jupyter Notebookspapermill과 함께 사용하여 임시화된 작업 유형(Spark, Presto 등)을 제공하는 스케줄러부터 시작한다. 이를 통해 사용자들이 실행해야 할 작업을 표준화하고 쉽게 표현할 수 있다. 여기서 그 주제에 대해 좀 더 자세히 볼 수 있다. 우리는 예를 들어, 지난 한 시간 동안 실패한 모든 것을 다시 시작하기 위해 인간의 개입이 필요한 상황을 위한 실제 실행 지침서로 주피터 노트북을 사용해 왔다.

 

내부적으로는 파이썬으로 완전히 쓰여진 이벤트 기반 플랫폼을 구축하기도 했다. 우리는 단일 툴로 통합되는 여러 시스템에서 다양한 이벤트 흐름을 생성했다. 이를 통해 이벤트를 필터링할 조건과 이벤트를 대응하거나 라우팅할 액션을 정의할 수 있다. 그 결과 마이크로서비스를 분리하고 데이터 플랫폼에서 발생하는 모든 일에 대한 가시성을 확보할 수 있었다.

 

우리 팀은 또한 연합 일자리 실행 서비스인 Genie와 접속하는 pygenie 클라이언트를 만들었다. 내부적으로는 이 라이브러리에 비즈니스 규칙을 적용하고 Netflix 플랫폼과 통합하는 추가 확장 기능을 가지고 있다. 이러한 라이브러리는 사용자가 빅 데이터 플랫폼에서의 작업과 프로그래밍 방식으로 인터페이스하는 주요 방법이다.

 

마지막으로, 우리 팀은 papermillscrapbook 오픈 소스 프로젝트에 기여하기로 약속했다. 그 곳에서 우리의 일은 우리 자신의 경우와 외부적인 사용 사례 모두를 위한 것이었다. 이러한 노력은 오픈 소스 커뮤니티에서 많은 관심을 받아왔고 우리는 이러한 공유 프로젝트에 기여할 수 있게 되어 기쁘다.

 

Experimentation Platform

scientific computing팀은 과학자들과 엔지니어들이 AB 테스트와 다른 실험들을 분석할 수 있는 플랫폼을 만들고 있다. 과학자들과 엔지니어들은 세 가지 측면에서 새로운 혁신들을 제공할 수 있다.

 

Metrics Repo는 PyPika에 기반한 Python 프레임워크로, 기여자가 재사용 가능한 매개변수화된 SQL 쿼리를 쓸 수 있도록 한다. 그것은 새로운 분석의 시작점 역할을 한다.

 

Causal Models 라이브러리는 과학자들이 인과관계를 추론하기 위해 새로운 모델을 기여하는 Python & R 프레임워크다. 그것은 PyArrow(링크 작동 안 됨)와 RPy2를 활용하여 통계가 어느 언어로도 원활하게 계산될 수 있도록 한다.

 

시각화 라이브러리는 Plotly을 기반으로 한다. Plotply는 널리 채택된 시각화 규격이기 때문에, 기여자들이 플랫폼에서 소비할 수 있는 출력을 만들 수 있는 다양한 도구가 있다.

 

Partner Ecosystem

파트너 에코시스템 그룹은 기기에서 Netflix 응용 프로그램을 테스트하기 위해 Python의 사용을 확대하고 있다. Python은 조정 서버 제어, Spinnaker 제어, 테스트 사례 쿼리 및 필터링, 장치 및 컨테이너에서 테스트 실행 스케줄 지정 등 새로운 CI 인프라의 핵심이 되고 있다. TensorFlow를 사용하여 Python에서 추가 실행 후 분석을 수행하여 어떤 테스트가 어떤 장치의 문제를 나타낼 가능성이 가장 높은지 결정한다.

 

Video Encoding and Media Cloud Engineering

우리 팀은 넷플릭스 카탈로그 인코딩(및 재인코딩)과 그 카탈로그에 대한 통찰력을 얻기 위해 기계 학습을 활용한다. 우리는 vmafmezzfs 같은 50개 프로젝트에 Python을 사용하고, Archer라는 미디어 맵-리듀스 플랫폼을 사용하여 computer vision solutions을 구축하며, 많은 내부 프로젝트에 Python을 사용한다. 우리는 또한 Setupmeta와 Pickley와 같은 파이썬 프로젝트의 개발/분배를 용이하게 하기 위한 몇 가지 도구를 제공했다.

 

Neflix Animation and NVFX

Python은 애니메이션과 VFX 콘텐츠를 만들기 위해 우리가 사용하는 모든 주요 애플리케이션의 산업 표준이기 때문에, 우리가 그것을 매우 많이 사용하고 있다는 것은 말할 필요도 없다. Maya와 Nuke와의 모든 통합은 Python에 있으며, 대부분의 Shotgun 툴도 Python에 있다. 이제 막 클라우드에서 툴링을 시작하고 있으며, 많은 맞춤형 Python AMI/컨테이너를 구축할 수 있을 것으로 예상된다.

 

Content Machine Learning, Science & Analytics

Content Machine Learning 팀은 모든 콘텐츠에 대한 예측 관객 크기, 시청률 및 기타 수요 측정 지표의 핵심인 기계 학습 모델을 개발하기 위해 Python을 광범위하게 사용한다.

 

 

[출처] https://medium.com/netflix-techblog/python-at-netflix-bba45dae649e

'Data Analysis > Python' 카테고리의 다른 글

Codility: PermCheck  (0) 2018.11.11
Codility: OddOccurrencesInArray  (0) 2018.11.11
Codililty: CyclicRotation  (0) 2018.11.10