BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Keystone - Netflixのリアルタイムストリーム処理プラットフォーム

Keystone - Netflixのリアルタイムストリーム処理プラットフォーム

ブックマーク

原文(投稿日:2018/09/30)へのリンク

Netflixは先日、自社のエンジニアリングブログで、同社のリアルタイムストリーム処理プラットフォームであるKeystoneについて、その設計思想と洞察を論じた記事を公開した。

Keystoneは2015年12月から運用されている。Netflixの加入者数が2015年第2四半期の6,500万件から、本記事執筆時点の13,000万件へと増えるのに従い、Keynoteも年を追って成長してきた。KeynoteはApacheのChukwaパイプラインから始まり、その後、時間とともに、kafkaを前面に置いたパイプラインへと進化を遂げた。ブログ記事にもあるように、2016年時点では、36のkafkaクラスタによって毎日7,000億以上のメッセージを処理している。

Netflixのアーキテクチャは、2つの独立したリアルタイムストリーム処理プラットフォームで構成されており、Keystoneはデータ分析に、Mantisは運用に重点を置いている。Keystoneはデータパイプライン機能と、“サービスとしてのストリーム処理(Stream Processing as Service)”を提供する。データパイプラインは、Netflixがほぼリアルタイムで運用するさまざまなマイクロサービスすべてからのデータを生成し、処理し、分析する。Stream Processing as Serviceによって、社内ユーザは、独自のストリーム処理アプリケーションの開発や運用にあたって、ビジネスアプリケーションのロジックに集中することができる。

プラットフォームの構築と拡張を行うにあたってNetflixが解決しなければならなかった大きな課題は、大規模な分散システムを開発する際にエンジニアが直面する問題と同じものだった。同社のルーティングサービスは、レイテンシとメッセージデリバリのトレードオフを伴った、チューニング可能な、高々一回の配信セマンティクスをサポートしている。

KeystoneはApache Flinkを活用することにより、ステートレスとステートフルのジョブ、バーストおよび一定のトラフィック、秒単位から時間単位までのウィンドウサイズ、必要な場合は順序付けや保証の構成が可能なメッセージ配信をサポートする。さまざまなジョブがCPUやメモリ、I/O、ネットワーク帯域を取り合う可能性があるため、システム設計においてはリソースの競合も問題になる。システムのユーザは、ソフトウェアエンジニアからビジネスアナリストまで幅広い。これらすべての課題が、ユーザがほとんどのジョブを運用担当の同僚に頼らず、自身で定義および実行できるような簡便性を備えたマルチテナントのクラウドベースシステムを実装する、という同社の目標と相まって、極めて興味深い設計要件を作り出している。

Keystoneにおけるプラットフォームの考え方は、ユーザがジョブを完結可能である、ということに要約される。チューニング可能なトレードオフに加えて、’ファーストクラスの市民としての障害’と表現される、ユーザの目的と起こり得る問題としてのサブシステム障害との分離が、システムの重要な基礎となっている。

Netflixのエンジニアリングチームのkeystone設計でのアプローチでは、宣言的な調定プロトコル(reconciliation protocol)を使用している。ユーザの宣言した目標状態はすべてAWS RDSに格納され、唯一の真実(single source of truth)として機能する。例えばKafkaクラスタが消失した場合には、AWS RDSのデータのみに基づいて再構築することが可能だ。

デプロイのオーケストレーションは、継続的デリバリツールであるSpinnakerを使用して、ジョブ毎に独立したFlinkクラスタを使って実装されている。コンポーネント間で共有されるコンポーネントは、コンセンサス調整のためのZooKeeperと、チェックポイント状態を格納するS3のみである。ジョブをルーティングするユーザインターフェースや、サービスとしてのストリームを操作するCLIインターフェースでは、セルフサービスツールがジョブ定義に活用されている。

KafkaやElasticSearch、Hiveなどのために社内開発されたマネージドコネクタのセットは、開発者がプラットフォームやメッセージ解析の詳細を気にすることなく、短期間でKeystoneを開発に活用する上で役立っている。フィルタやプロジェクティングといった、一般的にデータ変換に使用されるタスクの抽象化には、独自のドメイン固有言語(DSL)ライブラリが使用されている。またプラットフォームでは、AWS RDSの調定メカニズムを使用した自己修復機能が提供されており、障害発生時にはユーザインターフェースを介して、必要なデータのバックフィルやリワインドを行うことができる。監視やアラート機能も組み込まれている。

今後のKeystoneプラットフォームの開発予定には、サービス層、ストリーミングSQLのサポート、マシンラーニング機能などが含まれている。これらはすべて、今後のNetflixエンジニアリングブログの記事で詳しく説明される。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT