2/27/2021

넷플릭스의 확장 가능한 플랫폼 만들기

본 글은 Netflix Tech 블로그의 을 의역하여 작성한 글입니다.

배경

Netflix는 지난 10년 간 주문형 스트리밍 비디오 서비스를 제공하고 있습니다. 서비스를 제공하는 기간동아 Netflix는 전 세계 고객 확보를 위해 30일간 무료 평가판과 결합된 3가지 요금제(기본, 표준, 프리미엄)에 의존했습니다. 하지만 지금 세상은 과거에 비해 많이 변했습니다. 사람들의 여가 시간을 채울 경쟁이 증가하고 있고 디바이스 생태계가 경이적으로 성장했으며 소비자는 언제 어디서나 원하는 디바이스로 콘텐츠를 시청하기를 원하고 있습니다.

Netflix의 Growth 엔지니어링 팀은 이런 변화를 예상하고 적응하는데 도움이 되는 Growth Initiatives를 실행하는 역할을 담당합니다. 전 세계 고객에게 가장 적합한 요금제 플랜과 인센티브로 Netflix에 가입 할 수 있도록 하는 시스템과 프로토콜을 설계하고 구축하는 것이 Growth 엔지니어링 팀의 역할입니다.


사용자 가입 경로

Netflix의 가입 경로는 3단계가 있습니다. Netflix에서는 “Signup Flow”라고 부릅니다.

1. 소개 및 계정 생성

Netflix의 가치를 소개하고, 고객이 가입을 할 수 있도록 유도합니다.

2. Plans & offers

다양한 유형의 Netflix 요금제를 offering 합니다.

3. Payment

고객이 자신의 요구에 가장 잘 맞는 것을 선택할 수 있도록 다양한 결제 옵션을 제공합니다.

서비스 소개 및 계정 생성 부분은 어느 서비스나 비슷하기에 2,3번에 대해 Netflix가 시장에 어떻게 대응하고 있는지 설명을 하려 합니다.

Plans & offers

Definitions

Netflix에서 Plan과 Offer가 무엇인지 정의 해 보겠습니다. Plan은 기본적으로 가격이 있는 기능 세트입니다.


Offer는 제한된 시간 동안 요금 할인 또는 우수한 기능을 포함하는 Incentive입니다. 일반적으로 Offer는 하나 이상의 Incentive와 속성 세트로 구성됩니다.

제안은 일반적으로 제한된 시간 동안 금전적 할인 또는 우수한 제품 기능을 포함하는 인센티브입니다. 일반적으로 오퍼는 하나 이상의 인센티브와 속성 세트로 구성됩니다.


Plan과 Offer를 병합하여 고객에게 제시하면 Plan 선택 페이지에 표시됩니다. 여기서는 선택한 Plan에 관계없이 3개의 Plan과 30일 무료 평가판이 있음을 확인할 수 있습니다.

지금까지 Netflix의 요금제 관련한 비즈니스적인 설명을 하였고, 이제 연관된 아키텍처, 프로토콜 및 시스템에 대해서 살펴 보도록 하겠습니다. 일반적으로 사람들은 비즈니스와 기술을 분리하는 경향이 있는데., 모든 기술은 비즈니스를 위해 고려되어야 하며, 이를 근간으로 아키텍처가 확립 됩니다.

Legacy 아키텍처

위에서 설명했듯이 Netflix는 스트리밍 서비스를 시작한 후 정적인 Plan과 Offer를 가지고 있었습니다. 따라서 아키텍처 또한 매우 간단했습니다. 기술적으로는 런타임에 로드되고 로컬 메모리에 저장된 작은 XML 파일 세트로 구성했습니다. 수년 동안에는 완벽하게 최적화된 디자인이었습니다. 그러나 Netflix가 계속 성장하고 서비스가 발전함에 따라 몇 가지 문제점이 생겼습니다.

  • XML 파일 업데이트는 본질적으로 오류가 발생하기 쉽고 수동적이다.
  • XML 파일이 업데이트 될 때마다 서비스 전체 배포가 필요하다.
  • XML 파일을 업데이트하려면 이 파일을 소유한 Backend 엔지니어팀의 참여가 필요하다. 타 팀의 지원을 받아야 하기에 독립적으로 업무를 수행하기가 어렵다.
  • UI를 렌더링하기 위한 클라이언트 로직이 필요하다. (아래는 30일 무료 평가판에 대한 데이터 구조입니다.)

{
“offerId”: 123,
“planId”: 111,
“price”: “$ 8.99”,
“hasSD”: true,
“hasHD”: false,
“hasFreeTrial”: true
…
}

  • 전 세계 고객에게 서비스가 제공됨에 따라 위의 모든 문제가 더욱 악화된다.

다음은 Plan & Offer 데이터 검색과 관련된 다양한 시스템을 표현한 그림입니다.


새로운 아키텍처

Growth 엔지니어링팀은 거의 모든 플랫폼에 대해 가볍고 유연한 애플리케이션을 구축 할 수 있는 비즈니스 로직과 프로토콜을 담당하고 있습니다. 이는 Presentation Layer에 비즈니스 로직이 없어야 하며 전달되는 데이터를 렌더링하는 책임을 지니고 있음을 의미합니다. 이를 달성하기 위해 Netflix는 우려 사항 및 분리 설계 원칙을 강조하는 마이크로 서비스 아키텍처를 채택하고 설계했습니다. 아래는 Legacy 아키텍처에서 업데이트된 신규 아키텍처입니다.


위 아키텍처를 보면 두 가지 변경 사항이 있습니다.

첫째, SKU Domain Services입니다. 이 서비스에는 오케스트레이션 서비스의 일부였던 특수 비즈니스 로직이 포함되어 있습니다. 이 로직을 새로운 마이크로 서비스로 마이그레이션함으로써 오케스트레이션 서비스를 단순화하고, 도메인에 대한 소유권을 명확히합니다. 이렇게 함으로써 다른 서비스도 SKU 데이터를 사용할 수 있습니다.

둘째, SKU 서비스가 이제는 Rule Engine과 SKU Catalog DB를 활용하는 플랫폼으로 확장 되었습니다. 이 플랫폼은 Growth 엔지니어링팀이 코드 변경 겅의 없이 전 세계 고객을 위해 다양한 서비스 제공을 실험할 수 있기 때문에 엄청난 비즈니스 가치를 제공합니다. 이는 엔지니어가 지루한 작업을 수행하는데 소요되는 시간을 줄이고 미래의 요구에 잘 대응할 수 있는 조금더 창의적인 작업에 더 많은 시간을 할애 할 수 있음을 의미합니다.

1단계: 디바이스가 Plan 선택 페이지에 대한 요청을 보냅니다.

과거에는 클라이언트 UI와 중간 계층 오케스트레이션 서비스간에 사용자 지정 JSON 프로토콜을 사용했었습니다. Plan 선택 페이지를 검색하기 위한 브라우저 요청에 대한 프로토콜의 예는 아래와 같습니다.


GET /plans
{
“flow”: “browser”,
“mode”: “planSelection”
}

이 요청에는 두 가지 중요한 정보가 존재합니다.

  • flow: flow는 플랫폼을 식별하는 정보입니다. 이를 통해 오케스트레이션 서비스는 해당 요청을 적절한 플랫폼에 라우팅 할 수 있습니다.
  • mode: 요청되는 페이지의 이름입니다.

flow와 mode 정보에 의해 오케스트레이션 서비스가 요청을 처리하게 됩니다.

2단계: 요청 처리를 위해 오케스트레이션 서비스로 라우팅합니다.

오케스트레이션 서비스는 upstream 요청의 유효성을 검사하고, downstream 서비스에 대한 호출을 오케스트레이션하고, JSON 응답을 작성합니다. 특정 요청의 경우 오케스트레이션 서비스를 SKU Eligibility 서비스에서 SKU 데이터를 검색하고 UI 레이어에서 사용할 수 있는 JSON 응답을 빌드합니다.

해당 요청에 대한 JSON 응답은 아래와 같습니다. 아래의 응답은 재사용률을 높이고 30일 무료 평가판 이외의 제안을 잠재적으로 지원할 수 있도록 합니다.


{
“flow”: “browser”,
“mode”: “planSelection”,
“fields”: {
“skus”: [
{
“id”: 123,
“incentives”: [“FREE_TRIAL”],
“plan”: {
“name”: “Basic”,
“quality”: “SD”,
“price” : “$8.99”,
…
}
…
},
{
“id”: 456,
“incentives”: [“FREE_TRIAL”],
“plan”: {
“name”: “Standard”,
“quality”: “HD”,
“price” : “$13.99”,
…
}
…
},
{
“id”: 789,
“incentives”: [“FREE_TRIAL”],
“plan”: {
“name”: “Premium”,
“quality”: “UHD”,
“price” : “$17.99”,
…
}
…
}
],
“selectedSku”: {
“type”: “Numeric”,
“value”: 789
}
“nextAction”: {
“type”: “Action”
“withFields”: [
“selectedSku”
]
}
}
}

위의 응답에는 SKU 목록, 선택한 SKU 정보가 포함됩니다.

3단계 및 4단계: SKU Eligibility Service에서 적격성 결정 및 SKU 검색

Netflix는 글로벌 기업이기에 지역마다 다른 SKU가 존재합니다. 즉, SKU 가용성과 SKU 적격성을 구분해야 합니다. 가용성은 국가 수준에서 적용이되며 적격은 사용자 수준에서 적용이 됩니다. SKU 플랫폼에는 글로벌 SKU 세트가 포함되어 있기에 SKU의 가용성을 제어할 수 있습니다. 그리고 SKU 적격성은 SKU Eligibility Service에 의해 결정됩니다. 이렇게 구분함으로써 명확한 경계를 만들고 Growth 엔지니어링팀이 방문자를 위해 올바른 SKU를 표현하는데 집중 할 수 있습니다.

SKU Eligibility 서비스는 Netflix 서비스의 여러 부분에서 혁신을 가능하게 합니다. 이제 다양한 서비스가 SKU 데이터를 검색하기 위해 SKU Eligibility 서비스와 직접 통신을 할 수 있습니다.

5단계: SKU 플랫폼에서 적격 SKU 검색

SKU 플랫폼은 Rule Engine, 데이터베이스 및 애플리케이션 로직으로 구성됩니다. 데이터 베이스에는 Plan, Pricing 및 Offer가 포함되어 있습니다. Rule Engine은 규칙내 특정 조건이 일치 할 때 사용 가능한 Plan 및 Offer를 추출할 수 있도록 합니다. 미국에서 Offer를 검색하는 아래의 예제를 참고하세요.


SKU 플랫폼에는 이제 단 하나의 책임만 존재합니다. 즉, 모든 Netflix의 SKU를 관리합니다. 고객 컨텍스트를 가져와 SKU Rule 세트와 일치 시킵니다. SKU 자격은 Upstream으로 계산되며 SKU Rule 세트에 있는 다른 조건과 같은 방식으로 처리됩니다. 자격 및 가용성 개념을 단일 서비스에 결합하지 않음으로써 각 팀이 핵심 역량에 집중할 수 있고 자격 변경이 SKU 플랫폼에 영향을 미치지 않기에 개발자 생산성을 높일 수 있습니다. Netflix의 다음 단계는 SKU UI를 통해 셀프 서비스 및 Rule 변경에 대해 더 많이 지원하는 것입니다.

결론

SKU에 대한 아키텍처 변경 작업을 통해 Netflix는 모호했던 SKU 가용성 및 자격에 대한 경계를 명확하게 정의했습니다.

새 아키텍처가 기존 아키텍처에 비해 갖는 장점은 아래와 같습니다.

  • 재사용 및 확장 가능한 “Shape”을 가진 도메인 객체 (이 형태는 서비스 계층 뿐만 아니라 UI 계층에서도 코드 재사용을 용이하게 합니다.)
  • 최소한의 엔지니어링 개입으로 제품 혁신을 가능하게 하는 SKU 플랫폼 (이는 엔지니어가 다른 문제에 대해 더 도전적이고 창의적인 작업에 집중할 수 있음을 의미합니다.)
  • SKU 데이터 업데이트를 위한 코드 변경 대신 구성을 통해 혁신 속도를 높입니다.
  • 더 적은 서비스 호출로 인해 지연 시간이 줄어들어 방문자의 오류가 줄어 듭니다.

지금 이 세상은 끊임없이 변화하고 있고, 디바이스의 기능은 계속해서 향상되고 있습니다. 사람들이 즐거움을 원하는 방법, 시기, 장소는 계속해서 진화하고 있습니다. 이러한 유형에 대해 Netflix의 Growth 엔지니어링팀은 지속적으로 견고한 기반을 구축할 수 있도록 노력하고 있습니다.

Netflix가 SKU에 대해 이정도로 고민하는지 몰랐네요. 혁신적인 기업이라고 생각됩니다.^^/

“flow”: “browser”,




1/31/2021

C3.ai 비즈니스 모델

 

C3 AI?

C3 AI는 클라우드기반 엔터프라이즈 AI 서비스를 제공하는 SaaS 회사이다. 고객에게 빠른 배포와 Overhead없는 Digital Transformation 애플리케이션을 개발하고 통합 할 수 있는 기능을 제공하는 환경을 구축하여 제공한다. C3 AI는 주로 Subscription 서비스와 전문 기술 지원을 통해 수익을 창출 한다.

C3 AI의 기원

C3.ai의 설립자인 Thomas M. Siebel은 투자자들에게 아래처럼 설명했다.

컴퓨터 과학, 특히 관계형 데이터베이스 이론에서 대학원 과정을 마친 후 저는 Oracle에 취업했습니다. 관계형 데이터베이스 시장은 1983년에 시작되었습니다. 정보 기술에 대한 글로벌 시장은 2,240억 달러였고, RDBMS 시장은 2천만 달러 미만이었습니다. 애플리케이션 개발 및 정보 처리의 기본 경제학이 RDBMS의 상승을 보장한다는 점에 만족했습니다. 10년 후 Oracle의 매출은 10억 달러를 넘어 섰습니다.

그 후 Siebel은 그의 이름을 따서 Siebel Systems를 설립했다. 6년 후 Siebel Systems는 20억 달러의 매출을 올렸고 2006년에 Oracle에 매각되었다.

Thomas M. Siebel은 전체 인프라(IaaS), 플랫폼(PaaS), 애플리케이션(SaaS)를 통해 고객/사용자의 요구에 적응 할 수 있는 클라우드 컴퓨팅인 Elastic Cloud로 발전했다. 더 빠른 배포, 실험 및 지속적인 개선을 통해 시장의 요구에 대응했다.

그후 C3.ai는 새로운 산업 혁명, 데이터 및 서버와 결합된 알고리즘에 의해 주도되는 “디지털 산업 혁명”에 자리 잡은 디지털 혁신을 주도하는 엔터프라이즈 AI를 제공하게 되었다.

주요 비즈니스 모델

  • C3.ai는 클라우드 기반의 엔터프라이즈 AI 회사이다. 주요 목표는 대규모 혹은 중간 규모의 조직 및 회사의 비즈니스에서 AI를 이용한 사용 사례를 구현하도록 돕는 것이다.
  • C3.ai의 무기는 C3 AI Suite라는 부르는 모델 기반의 아키텍처이다. 이것은 클라우드 위에 구축된 개발 프레임워크 세트로, 조직 내에서 애플리케이션을 빠르게 배포하기 위한 도구를 제공하는 동시에 새로운 애플리케이션을 개발하기 위한 개발 프레임 워크 스택을 제공한다.
  • C3.ai는 주로 엔터프라이즈 구독을 기반으로 수익을 창출하는 SaaS 회사이다. 수익의 일부는 전문가 서비스에 기인한다.

차별화 전략

C3.ai 플랫폼은 오픈 소스 소프트웨어를 기반으로 구축되었지만 모듈형태로 되어 있기에 고객이 선호하는 구성 요소를 사용할 수 있도록 되어있다.


C3.ai는 인기있는 통합 개발 환경, 프레임워크, 제품군, 도구 및 DevOps 옵션에 대한 커넥터 및 Integration을 제공한다.

C3.ai 플랫폼의 핵심적인 차별화 요소는 개발 속도, 반복성 및 확장성을 보장하는 “Type System” 아키텍처이다. Type System은 메타 데이터를 사용하여 모든 데이터 및 데이터 소스, 기본 스토리지 기술, 데이터 과학 모델, 데이터 처리 서비스, 애플리케이션 및 애플리케이션 서비스와 같은 종단 간 개발 그리고 배치 프로세스의 모든 것을 나타낸다. 이런 부분들은 상당히 복잡하기 때문에 단순, 일관, 추상적인 방법으로 표현한다.

C3.ai는 MS Azure에서 실행되는 서비스로써 플랫폼을 제공하지만 사설 클라우드 또는 기타 공용 클라우드에서도 실행이 가능하다. On-premise 및 다양한 환경에서도 가능하다.

파트너쉽

C3.ai의 민첩성과 확장성, 타사 도구에 대한 유연성 및 개방성 조합이 주목을 받고 있는 상황이다.


C3.ai의 창업자이자 CEO인 Tom Siebel은 Transform C3.ai의 최신 파트너십에서 IBM Services와의 전략적 제휴를 통해 시장에서 가장 선호하는 글로벌 시스템 통합 업체가 될 것이라고 발표했다. 두 회사는 이번 거래가 “엔터프라이즈 규모의 산업 및 특정 도메인 영역의 AI 애플리케이션 제공을 가속화 할 것”이라고 말했다.

IBM과의 계약으로 C3.ai는 AI 플랫폼 및 애플리케이션과 결합 된 산업 및 기술 전문 지식을 석유 및 가스 산업에 공동으로 제공하게 되었다. 그리고 2018년에 Azure를 선호하는 퍼블릭 클라우드 플랫폼으로 제공되기 위해 MS와 전략적 파트너쉽도 발표했다. (그해 Amazon Web Services 및 Google Cloud Platform과 별도의 파트너쉽을 발표했음에도 불구하고… 사업을 위해 앞만 보고 달린다라는 건가?)

사용 사례

Shell의 데이터 과학 총괄 관리자인 Daniel Jeavons는 C3.ai를 기반으로 구축한 후 회사의 데이터 기반 예측 유기 관리 및 최적화 앱에 대해 설명한다.

  • 수천 개의 밸브 및 압축기의 예기치 않은 고장을 예측하고 방지하는 예측 유지 보수 IoT 애플리케이션으로 C3.ai를 사용하기 시작했고 현재 모니터링 되고 있는 자산은 전 세계 20개 이상의 석유 및 가스 생산 시설에서 사용되고 있다. 이렇게 사용함으로써 2백만 달러를 절약 할 수 있었다라고 한다. 그리고 지금은 재사용 가능한 구성 요소를 사용하여 전자 수중 펌프용 전력 최적화 애플리케이션을 개발하고 있다고 한다.
  • 제조 및 공급망 분석 구현 리더인 3M임원 Jennifer Austin은 지난 2년간 개발한 가격 분석, 재고 최적화, 공급망 위험 관리 애플리케이션에 대한 진행 상황을 언급했다. Austin은 3M이 특정 영역에서 변경 관리 사용자 채택 문제를 해결하기 위해 노력하고 있고 재고 최적화 애플리케이션만으로도 연간 2억달러를 절감하는 동시에 서비스 수준을 개선했다고 언급했다.
  • Bank of America의 데이터 및 혁신 그룹 공동 책임자인 Brice Rosenzweig는 사용자가 보다 쉽게 접근할 수 있는 데이터 플랫폼 구축 및 현금 관리 그리고 대출 최적화에 대한 애플리케이션 개발 진행 상황에 대해서 얘기한다. (아직 개발중)

결론

C3.ai의 주요 강점은 복잡성을 추상화하고 데이터를 분석하기 위해 Type System 아키텍처에 의존하면서 X or Y용으로 선호하는 도구를 교체하여 사용할 수 있는 개방성이다.

C3.ai의 플랫폼 영역은 광범위하기 때문에 자사의 기술만 강요하지 않고 클라우드 네이티브 서비스에 대한 실용적인 개방성을 수용한 점이 매우 현명하고 현실적이라고 보여지며, 고객이 추구하는 Needs와 조화를 이룬다고 생각한다.

C3.ai의 경영층은 로드맵은 고객 중심적으로 수립되어 있다고 강조하고 있고, 예시로 2019년에는 고객이 요청한 커넥터 및 통합, 코드 개발 옵션 및 사용자 인터페이스 개선을 추가하는데 중점을 두었다. 2020년에는 C3.ai의 Ex Machina 데이터 과학 스튜디오의 데이터 탐색 및 하이퍼 파라미터 최적화 기능을 개선했다. 또한 Serverless Computing, 자가 치유 기능 및 1초 미만의 배포 속도를 지원하는 개선 사항과 함께 개발자 경험에 중점을 두고 있다. 즉, 고객과 Tight하게 일을 하면서 그들의 Needs를 플랫폼에 빠르게 반영하므로써 의미있고 필요한 기능으로 더욱 탄탄하게 만드는 전략이다. 고객과의 신뢰가 없다면 불가능한 일일 것이다.

플랫폼을 기반으로 이렇게 쌓인 그들의 알고리즘을 이용해 고객의 문제를 해결하는 애플리케이션을 함께 만들어가는 그들의 사업 모델은 이미 시장에서 가치가 있는 것으로 평가를 받고 있다. 하지만 그 가치는 그 속에 속한 “사람, 기술, 비즈니스 모델”에 기반한 것이라 생각한다.


12/15/2020

Mantis- 비용 효율적, 실시간, 운영 중심의 애플리케이션 구축을 위한 플랫폼

본 글은 Netflix Tech 블로그에 작성된 을 기반으로 재가공 되었습니다.


Netflix는 스트림 처리 애플리케이션을 구축하기 위한 플랫폼을 오픈 소스로 제공했습니다.

실시간 애플리케이션을 개발할 때 기반으로 사용하며 신속하게 문제를 식별하고 Alert을 Trigger하며 수정 사항을 바로 적용할 수 있는 강점이 있습니다.

Netflix는 점점 더 복잡해지는 시스템의 운영 상태를 개선하면서 Metric을 정확하게 처리하는데 오랜 시간이 걸리는 문제를 가지고 있었습니다.

Mantis는 엔지니어에게 운영에 대한 통찰력을 손상 시키지 않고 복잡한 분산 시스템(e.g. 마이크로서비스)을 관찰하고 운영하는 비용을 최소화 할 수 있는 기능을 제공합니다.

Netflix 엔지니어들은 Mantis 위에서 비용 효율적인 애플리케이션을 구축하여 문제를 신속하게 식별하고, Alert을 Trigger하고, 변경 사항을 적용하여 Netflix 서비스의 Downtime을 최소화하거나 발생하지 않게 했다고 합니다.

기존 시스템이 Metric을 처리하는데 10분이상 걸린다면, Mantis의 경우에는 몇 초로 시간을 줄였다고 합니다. 서비스가 중단 되었을 경우에는 매 초가 중요하기 때문에 이 점은 매우 매력적입니다.

서비스가 성장함에 따라 시스템의 운영 상태에 대해 비용 효율적이며 신속한 통찰력을 갖는 것이 매우 중요하게 됩니다.

Mantis란 무엇인가?

Mantis는 실시간 스트림 처리를 위한 애플리케이션을 구축할 수 있는 플랫폼입니다.

클라우드에 배포 된 마이크로 서비스와 비슷하게 Mantis 애플리케이션은 Mantis 플랫폼에 배포됩니다.

Mantis 플랫폼은 작업의 수명주기(e.g 배포, 업데이트 및 종료)를 관리하는 API를 제공하고, Pool을 컨테이너화하여 리소스를 관리하며, 클라우드 기반의 마이크로 서비스와 유사하게 Job을 검색 할 수 있습니다.

Stream 프로세싱 관련 As-a-Service를 제공함으로써 Mantis는 개발자가 비즈니스 로직에 집중할 수 있도록 강력하고 비용 효율적인 스트리밍 애플리케이션을 구축할 수 있도록 도와 줍니다.

Mantis를 만든 이유는?

Mantis는 빠르게 성장하는 복잡한 마이크로 서비스 생태계에서 더 나은 운영 통찰력을 얻기 위해 Netflix에서 만들었습니다.


시스템의 복잡성이 증가함에 따라 이해도는 급격히 감소합니다. 이러한 복잡성에 대응을 하려면 운영 통찰력이 필요하고 새로운 접근 방식이 필요합니다.

즉, 운영 데이터를 생성하고 수집하는 기존의 방식을 변경해야 합니다.

  • Raw event에 Access할 수 있어야 합니다. 애플리케이션은 모든 단일 이벤트를 게시 할 수 있어야 합니다. 일반적으로 필터링 혹은 샘플링을 통해 통찰력을 얻으려고 하지만 이 경우 Raw data가 손실되었기 때문에 쉽지 않습니다.
  • 해당 데이터에 실시간으로 Access할 수 있어야 합니다. 일반적으로 서비스 운영 시 시간에 매우 민감합니다.
  • 애플리케이션에 새로운 작업 없이 해당 데이터에 대해 새로운 질의를 할 수 있어야 합니다. 문제가 발생하는 경우 해당 데이터를 통해 통찰력을 도출 하는 것이 매우 중요합니다.

그리고 새로운 타입의 실행 환경이 필요합니다.

  • 짧은 대기 시간으로 대용량 데이터 처리가 가능해야 합니다.
  • 운영 부담이 낮아야 합니다. 대부분의 운영 작업을 자동으로 처리하는 관리형 플랫폼이 필요합니다. 모니터링 시스템을 운영하는데 추가되는 오버 헤드가 필요하지 않습니다.
  • 탄력적이어야 합니다. 노드 장애시 자동으로 복구하고 데이터 볼륨에 따라 동적으로 리소스를 확장 할 수 있는 안정적인 시스템이 필요합니다.
  • 스트리밍 서비스 생태계가 필요합니다. Netflix의 사용 사례를 보면 종종 동일한 데이터가 필요하다고 합니다. 데이터와 결과를 공유하여 공동 작업을 할 수 있도록 함으로써 코드 및 데이터 재사용을 극대화해야 합니다. 이렇게 함으로써 비용 효율적인 Job을 만들 수 있습니다.

위의 모든 작업에 대해서 비용 효율적으로 수행 할 수 있어야 합니다. 비즈니스적으로 크리티컬한 시스템이 확장됨에 따라 이 시스템을 지원하는 시스템은 크리티컬한 시스템보다 더 적은 비용이 사용되어야 합니다.

Mantis는 위의 요구 사항을 충족하도록 제작되었고, Netflix에서 설계하였습니다.

Mantis를 사용하는 방법

Mantis는 이상 감지 및 Alarm과 같은 High volume, Low latency에 적합한 플랫폼을 제공합니다.

Mantis는 2014년부터 Netflix에서 제작하였고, 매일 수 조개의 Event와 Peta byte의 데이터를 처리합니다.

스트리밍 마이크로 서비스 생태계인 Mantis 플랫폼은 엔지니어에게 운영에 대한 통찰력을 손상 시키지 않으면서 복잡한 분산 시스템을 관리/운영하는데에 드는 비용을 최소화 할 수 있는 기능을 제공합니다.

엔지니어는 Mantis를 기반으로 비용 효율적인 실시간 애플리케이션을 구축하여 문제를 신속하게 식별하고 수정을 적용하여 Netflix 서비스의 Downtime을 최소화 혹은 방지하는데 활용되고 있습니다.

Mantis 사용 사례

Netflix 스트리밍 상태에 대한 실시간 모니터링

Netflix SPS(Stream Starts per Second)는 Netflix 스트리밍 서비스의 상태를 추적하는데 사용되는 지표입니다. SPS는 스트리밍이 성공적으로 Hit한 사람들의 수를 추적합니다. 이 측정 항목의 추이가 비정상적으로 변경되면 사용자의 콘텐츠 시청에 부정적인 영향을 미칩니다.

Mantis는 수천 대의 Netflix 서버(mantis-publish 라이브러리)에서 직접 가져온 데이터를 실시간으로 처리하여 SPS 추세를 모니터링합니다. DES(Souble Exponential Smoothing)를 사용하면 비정상적인 편차를 몇 초 만에 감지하고 담당팀에 알릴 수 있습니다.

Contextual Alerting

Netflix가 성장함에 따라 마이크로 서비스의 개수도 증가했습니다. 엔지니어가 문제의 원인을 신속하게 파악하기 위해 문제 범위를 좁히려면 Downstream 및 Upstream 서비스에서 발생하는 상황을 이해해야 합니다.

Contextual alerting application은 예외를 식별하기 위해 실시간으로 Netflix 마이크로서비스간 수백만건의 Interaction을 분석합니다. Mantis를 사용함으로써 평균 감지 시간을 수십 분에서 몇 초로 줄일 수 있었습니다. Netflix의 큰 규모를 생각하면 대단한 것 같습니다.

Raven

대규모 분산 시스템에서는 가끔 사용자가 문제를 제기하지만 전반적으로 시스템의 상태가 문제 없는 경우가 있습니다. 이런 경우 사용자/디바이스/서비스와 관련된 Event를 실시간으로 탐색하여 원인을 찾을 필요가 있습니다. 더군다나 사용자의 요청이 수천 대의 서버를 경유하게 된다면? 문제가 되는 서버를 찾고 Log를 분석하는 것은 매우 힘든 작업일 것입니다.

Raven 애플리케이션은 mantis-publish 라이브러리를 이용하여 실시간 Stream 매칭 결과에서 특정 기준(e.g 사용자ID/디바이스ID)에 일치하는 Event를 파악 할 수 있도록 MQL 쿼리를 작성할 수 있는 UI를 제공합니다.

Cassandra 및 Elastic Search 상태 모니터링

Netflix는 현재 수백 개의 Cassandra 및 Elastic Search 클러스터를 이용하고 있습니다.

Cassandra 와 Elastic Search의 상태 체크 애플리케이션은 Netflix내의 모든 Cassandra/Elastic Search 클러스터의 상태를 체크하기 위해 실시간으로 Event를 분석합니다. 이 시스템이 가동된 이후 False page 수가 크게 감소했습니다.

Alerting on Log

Alerting on Logs 애플리케이션을 사용하면 애플리케이션 로그에서 특정 패턴이 감지 될 때 페이지를 표시하는 Alert을 생성할 수 있습니다. 이 애플리케이션은 실시간으로 수천 대의 서버에서 로그를 분석합니다.

Chaos 테스트에 대한 모니터링

Chaos 테스트는 Netflix의 Resilience(탄력성)중 하나입니다. 다양한 애플리케이션의 탄력성을 테스트하기 위해 매일 수십 건의 Chaos 테스트가 수행됩니다.

Chaos 테스트 애플리케이션은 테스트중에 클라이언트 및 서버측 Event를 실시간으로 분석하여 사용자 경험을 추적하고 문제가 발생할 경우 Chaos 테스트를 중단합니다.

실시간 개인 식별 정보(Personally Identifiable Information, PII) 감지

매일 수조 건의 Event가 Netflix 데이터 시스템을 통해 전달되기에 민감한 데이터가 섞이지 않도록 하는 것이 중요합니다.

이 애플리케이션은 모든 Streaming 데이터에 패턴 감지 알고리즘을 적용하여 이러한 데이터의 존재를 식별합니다.

Mantis Architecture

Mantis는 공유 Pool을 생성하는데 사용되는 Apache Mesos와 Job에 리소스를 할당하는데 사용되는 Fenzo라는 오픈 소스를 사용하여 Stream 처리 작업을 실행하는 서버 클러스터를 관리합니다.

Mantis는 크게 두 개의 주요 클러스터가 존재합니다.

Master Cluster

마스터 클러스터는 모든 Job의 흐름을 관리합니다,

  • Resource Manager: Fenzo를 사용하여 Worker에게 리소스 할당
  • Job Manager: 메타 데이터, SLA, Artifact location, Job topology 및 수명 주기를 처리 및 관리합니다.

Agent Cluster

사용자가 Stream을 제출하면 에이전트 클러스터에서 하나 이상의 Job이 실행됩니다.

  • 인스턴스: 에이전트 클러스터는 Job을 실행하는 Pool을 여러 인스턴스로 구성합니다.

끝으로, 금일 발생한 구글 장애로 인해 많은 사용자들이 불편함을 겪었습니다.

Mantis를 적용하더라도 장애에 대해서 완벽하게 대응하기는 어렵지만, 원인을 빨리 찾아 Downtime을 최소화하여 서비스의 Quality를 높이려는 그들의 노력에 박수를 보내고 싶습니다.

시간이 되면, Mantis를 가지고 테스트를 해보고 조금 더 Deep-dive한 내용으로 포스팅 하도록 하겠습니다.

References:

  • https://netflixtechblog.com/open-sourcing-mantis-a-platform-for-building-cost-effective-realtime-operations-focused-5b8ff387813a
  • https://netflix.github.io/mantis/

12/13/2020

코로나(COVID-19)로 인해 더 가속화되는 코드 커팅


본 글은 어디까지나 개인적인 의견임을 서두에 밝힙니다.

COVID-19는 식료품, 게임, 스트리밍 서비스에 이르기까지 다양한 기술을 가속화했습니다. 그러나 혜택을 받지 못한 산업 중 하나는 전통적인 유료TV입니다.

오늘 TV로 유투브를 보다가, 몇 주 동안 셋탑박스의 전원을 켜지 않았다라는 사실을 알게 되었습니다. 몇 주 동안 케이블TV를 보지 않았음에도 콘텐츠를 소비하는데 전혀 문제가 없었다는 것입니다.

이런 상황에 처한 사람이 더 있지 않을까? 라는 생각이 들었습니다.


 eMarketer의 연구에 따르면 케이블, 위성 및 통신 TV 산업은 역대 가장 많은 구독자를 잃고 있다고 합니다. 올해 미국내 600만 가구 이상이 유료TV의 코드를 끊었고, 총 코드 커터 가구 수는 3120만 가구로 늘어났습니다.

2024년까지 더 증가할 것으로 예측하고 있으며, 미국내 유료TV를 구독하지 않는 가구가 1/3이상이 될 것이라고 언급했습니다.

무엇이 코드 커팅을 하게 만든 것일까요?


예상한대로 유료TV의 구독자 감소는 스트리밍 서비스 구독이 증가했기 때문입니다. eMarketer에 따르면

“소비자들이 유료TV 구독을 해지하는 것은 스트리밍에 비해 높은 가격 때문이라고 합니다.”

이런 이유중 하나는 COVID-19로 인해 스포츠 중계가 감소되었기 떄문입니다. 스포츠가 다시 활성화되더라도 이전의 케이블 또는 위성 TV로 돌아 가지 않을 것이라고 eMarketer는 예측 했습니다.

유료TV의 구독자 감소로 인해 TV 시청률도 감소하고 있고 이는 광고 산업에도 영향을 미치고 있습니다.

2020년에 TV광고 지출이 15% 감소하였고 이는 2011년 이후 업계 최저치입니다. COVID-19 문제가 해결된다고 해도 “정상수준”으로 돌아가기 어렵다고 분석가들은 언급합니다.

이 추세로 보면 향후 더 많은 광고 비용이 TV에서 디지털 미디어로 전환될 것으로 예상됩니다.

결국 케이블 또는 위성TV 제공업체는 소비자가 사용하는 서비스를 강화하는 것보다는 수익성이 있는 인터넷쪽으로 초점을 전환하여 손실을 완화할 가능성이 높습니다.

예전에 비디오가 라디오를 대체한 것처럼 COVID-19로 인해 케이블TV의 대체 가능성이 더 높아질 것으로 생각됩니다.

케이블 또는 위성TV 사업자들의 대응 전략은 무엇일까요?