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

 

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

image

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에서 만들었습니다.

image

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

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

  • 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

image

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/

잠깐, 글이 유익했나요?

Donate!