BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Mantisを使用したNetflixの運用データストリームとバッチ処理

Mantisを使用したNetflixの運用データストリームとバッチ処理

原文(投稿日:■)へのリンク

Netflixは先月,運用メトリックスを処理するプラットフォームのMantisを取り上げた過去の記事について,そのいくつかをフォローアップした。このプラットフォームは,デバイスレベルのきめ細かいイベントの発行や,運用上のメトリックス取得を可能にするもので,オペレーションダッシュボードを提供し,タイトル単位で計測されたSPSに関する警告など,NetflixのエンドユーザデバイスとAWSサービスとのインタラクションを可視化する,詳細かつリアルタイムな監視アプリケーションの構築を実現する。

 

Netflixの既存のサービスレベル監視システムは,個々のユーザやデバイス,エンターティメントタイトルといったコンテキストで発生する,デバイスレベルの動作に関する問題の理解や診断には適していない。このような種類の問題は,データの受信や変換,レポート,警告などを実行する,それぞれの設備のユニークな組み合わせによって発生するものからだ。Mantisの実施する異常検出は,このような設備単位で発生するユニークなイベントを,スクロール画面で追跡し,確認することが可能である。これによって,プロダクトの問題に素早く対応することができるだけでなく,大容量で高密度なリアルタイムストリーミングとバッチデータ環境において,影響を受けた対象を特定することも可能になる。

Mantisは,開発者およびそのアプリケーションに対して,Zuul API,パーソナライゼーションとプレイバックサービス,デバイスのログデータなど,およそ20の異なるソースからのイベントを生成,処理,問合せするジョブのサブミットを可能にすることで,Netfixの既存のインフラストラクチャに統合される。プロデューサとコンシューマを分離することにより,運用時に発生する問題を検出し,対処する上での分離性と柔軟性を実現している。

 

アーキテクチャとしてはApache Mesosをベースとしており,アプリケーション開発者とEC2サーバクラスタの間に,ストリーム処理ジョブで使用するコンピュータリソースの共有プールとしての抽象層を提供する。アプリケーション開発者は,APIセットあるいはGUIを通じてジョブの構成定義や編集,その時点でのメトリックの参照などを行なうことができる。これらのデータ上にアプリケーションの開発を行なうことが可能だが,Mantisの実装の詳細からの独立性は維持される。

 

メッセージの保証レベルはMantisのジョブ単位で,例えば最大1回(at-most-once)のデリバリ保証から最小1回(at-least-once)のデリバリ保証まで,Kafkaのセマンティクスを通じてさまざまな設定を行なうことができる。Spark Streamingなど他にもアーキテクチャが存在する中で,特にKafkaベースの実装を選んだ理由について,MantisのエンジニアであるNeeraj Joshi氏は次のように説明している。

リソースのスケジュールをより細かくコントロール可能であることから,ビンパッキング(bin packing)などのスマートなアロケーションが実現できるためです(同時にこれは,ジョブのスケーリングも可能にします)。

Mantisでは,Fenzoによるマスタとエージェントのクラスタモデルを採用する。Fenzoはリソースマネージャで,先日にはJavaスケジューラライブラリの形式でオープンソースプロジェクトとなっている。インスタンスの追加と削除によるMesosワーカクラスタの自動スケールを実施する。Mantisのスケーリングは,リソース使用率やジョブスケジュールタイムライン,リソース使用状況ダッシュボードを通じた人の操作に基づいて実施される。その中でFenzoは,ジョブスケジュールタイムラインとアクティブなリソース使用率をベースとして,EC2リソースの動的なアサインを支援している。ジョブマネージャは,メタデータの保持,SLA,アーティファクトのロケーション,ジョブトポロジやライフタイムなどを行なう。

Mantisは,バックプレッシャ対応のデータ転送と処理結果の非同期格納を備えた,非ブロック型のストリームジョブを行なう能力を備える。ジョブは単一ステージのベーシックな変換ないしアグリゲーションとしても,あるいは複数ステージの大容量で高密度なイベントストリームのシャーディングおよびプロセッシングとしても,定義することが可能だ。

Mantisジョブのカスタマイズやユーザ定義ジョブ,内部実装の詳細に関する質問に対して,NetflixのエンジニアであるNick Mahilani氏は次のように記している。

さまざまなパラメータを設定してサブミットすることのできる,再利用可能なジョブがいくつかあります。パラメータ指定による異なるソースへの接続,さまざまなキーによってグループ化された処理の実行,あるいはパラメータのしきい値に基づいた特異点の検出,といった操作が可能です。テンプレートジョブに動的にコンパイルされるジョブでも,パラメータを指定することができます。…

ジョブとしてサブミットされるアプリケーションを新たに開発することも可能で,スケーリングやリソースプロビジョニングを気にせず,ジョブを書くことに専念できます。Mantisのジョブは,MantisランタイムライブラリのJavaインターフェースを実装し,ライブラリ自体を同梱することで実装されています。ジョブの作成者は,Rxオペレータを使用してジョブをObservable<MantisEvent>に変換した上で,それをRxJavaに渡します。処理の結果は次のステージに送られるか,あるいは変換されたストリームとして,それを使用する他のジョブにシンクされます。デプロイするジョブは,.zipアーティファクトにパッケージすることで,Mantisクラスタに配布されます。

Mantisは,CPU使用率の極端に低いユースケースにおいて,サーバ上のネットワークインターフェースカードを飽和させる問題が報告されている。

 
 

この記事を評価

関連性
形式
 
 

この記事に星をつける

おすすめ度
スタイル

BT