Netflix のデータパイプラインを読み解きたい
Netflix はマイクロサービスアーキテクチャ界においてプロダクションで成功例を積んでいる、いわば大先輩だと思われます。 彼らは数多くのイベント登壇や techblog の記事、 GitHub 上による OSS の公開を行っており、それらからアーキテクチャやその変遷を垣間見ることができると考えています。
本記事では筆者が最近悩んでいる、マイクロサービス前提の世界でのログ収集基盤において、 Netflix の様々な事例を調べた結果をつらつら書いていこうと思います。 あらかじめ本記事は正確性を担保しておらず、あくまで筆者個人が調べることができた範囲での記述に留まることをお断りさせていただきます。
Suro: 分散データパイプライン
2015 年くらいにメンテが止まってしまったのですが、分散データパイプラインをうたう Suro というソフトウェアが存在しました。
Suro に関しては解説記事も書かれていて、イベントログを集約し後続の S3 、 Kafka 、その他イベント処理システムに転送する役割を担っていたようです。 またバッチとリアルタイム、両方の性質を持つデータを受け付けていたようです。
Suro がメンテされなくなった経緯は筆者もよく分かっていませんが、後続のデータパイプラインの仕組みを見るにバッチとリアルタイムの両方の要望に答えるのが辛かったのか、あるいはデータの分析基盤の変更に合わせて作り直す決定をしたものかと推測しています。
Cassandra のデータ転送のバッチレイヤーと Ursula によるスピードレイヤー
Suro と入れ替える形かどうそうでないかは定かで無いですが、以下の資料によると Lambda Architecture に似たバッチレイヤーとスピードレイヤーの分離を行っているのが見て取れます。
https://qconsf.com/sf2016/system/files/presentation-slides/netflix-cloud_analytics.pdf
バッチレイヤーでは、 Netflix で広く使われている Cassandra をベースに SSTable をダンプして、それを aegisthus という Cassandra 向けバルクデータパイプラインソフトウェアを使って、 Netflix がデータウェアハウスに使っている S3 に転送していたようです。 また SSTable のダンプは上記資料では明示されていないのですが、 Priam というツールが公開されておりこれを使っているのではないかと推測しています。
ちなみにこの aegisthus も、 2017 年にメンテナンスモードに移行し今ではコミットされていないようです。 最後のコミットに対してされたコメント を見るに、 Cassandra のデータのデータウェアハウスへの転送は今後 Spark のジョブに移行することを検討しており、 2018 年 8 月時点ではまだ移行途中?でかつ新しいツールは OSS にはなっていないようです。
スピードレイヤーを支える Ursula というソフトウェアの存在も上記スライドでは触れられていますが、こちらは OSS になっている気配はありませんでした。
データパイプライン周辺技術
パイプライン以外にも、 Netflix はビッグデータ処理ジョブのオーケストレーションツールである genie や、 メタデータ管理ソフトウェアである metacat など多くの小道具を揃えているようです。
余談
上記のうち Suro や aegisthus については、 "マイクロサービスアーキテクチャ" にも記述があり参考になる部分があるかも知れません。
ここで挙げたツールは Netflix が Cassandra を広く採用していることや、大規模なデータを持つがゆえの様々な課題、背景などもあって作ったのだと考えられます。 これらがそのままマッチして利用できる企業は多いわけではないと思われますが、これらの変遷や構成などが読み解けるものがあるのかも、などと思いました(小並感)
追記
今は Kafka を結構活用しているのかも。
ちょっと前の記事だけど、調べ損ねてた netflix のデータパイプライン、投入部分は Java library (+ Non-java app 向けの proxy) でやってるのかなー? https://t.co/eCKkKf58KT
— しゅー くりーむ (@syu_cream) 2018年8月22日
2017 年の資料にも sharing jar の話出てくるし投入部分は今もあまり変わってないのかしら https://t.co/oTIeDhLJY2
— しゅー くりーむ (@syu_cream) 2018年8月22日