NetflixがPranaをリリースした。JVMベースのプラットフォームサポートライブラリであるNetflixOSSを,異種マイクロサービスアプリケーションで使用するために同社が開発した,オープンソースの“サイドカー”アプリケーションだ。
Pranaは各サービスインスタンス上にデプロイされて,“親”となるサービスに概念的にアタッチする。サイドカーがオートバイに取り付けられるのと同じ方法だ。アタッチしたPranaは第2のプロセスとして,サービスと並行して動作し,サービスディスカバリや動的コンフィギュレーション,レジリエントなサービス間通信といった,HTTP APIを介して公開されるプラットフォームのインフラ機能を提供する役割をする。
Netflixのブログでは,マイクロサービスへの依存度の高いエコシステムの操作や管理において,サイドカーアプリケーションの使用は同社の内外でポピュラーになりつつある,としている。Pranaのようなサイドカーアプリケーションは,実装および展開技術の面で異機種化のますます進むサービスのプラットフォームインフラストラクチャに対して,均質なインターフェースを提供することが可能なのだ。
PranaとHTTP経由でプロセス間通信することで,PythonやNode.jsなど異なる言語で記述されたアプリケーション,あるいはMemcached, Spark, Hadoopといったサービスが,NetflixOSSライブラリの提供する機能を利用できるようになる。ターゲットとしる言語やプラットフォーム毎に,ライブラリを書き直す必要はない。
サイドカーアプリケーションとしてアタッチした親サービスに対して,Pranaは次のような機能を提供する。
- Eurekaサービスを介した,サービスの登録と検出。追加的なNetflixOSSベースのコンポーネントによって,親サービスを"発見可能"にすると同時に,HTTPエンドポイントの状態チェックも実行する。
- Atchaiusによる動的コンフィギュレーション。これによって親サービスは,動的プロパティの更新を受信できるようになる。
- レジリエントなサービス間通信。PranaサイドカープロキシがHystrix/Ribbonを使って他のマイクロサービスにリクエストを送ることで,親サービスが他のサービスを呼び出して,それらのライブラリが提供するサーキットブレーカやバルクヘッド,フォールバック機能を利用できるようになる。
- サービスインスタンスとその対応する環境の,実行時の情報と診断が,Admin Consoleを通じて可能である。
Pranaはまた,カスタムプラグインを追加することで,機能拡張が可能なように設計されている。ただし現時点でこの機能は,プロジェクトのGithubページでは未解決の問題に分類されている。Pranaのコアアプリケーションは,Netflixのマイクロサービス用テンプレートであるKaryon,同じくNetflixの非同期イベント駆動ネットワークアプリケーション用のアプリケーションフレームワークNettyのリアクティブエクステンション(Rx)アダプタであるRxNettyをベースに構築されている。
Pranaのアーキテクチャダイアグラム,Netflix Blogより
サイドカーアプリケーションを利用するこの方法は,Netflix以外の場所,例えばAndrew Spyker氏によるNetflixOSSベースの動的コンフィギュレーションデモアプリであるAcme Airや,Dockerのクロスコンテナリンク,AirBnBのサービスディスカバリ用アプリケーションスイートSmartStackなどにおいては,“アンバサダ”アプリケーションとも呼ばれている。
Pranaサイドカーアプリケーションは,プロジェクトのGithub “Getting Started” ページの指示に従うことで,サービスへの組込みも可能だ。