はじめに

Photon Controller の Devbox をビルドし、ESXi と連携させるまでには結構長い道のりになります。現状 Beta かつ、まだ始まったばかりの OSS ということもあり、ドキュメントが充実しているとは言いがたい状況です。このためその長い道程におけるトラブルシューティングの基本は、ログ解析と各種ソースコードとなってきます。

10 年ほど前に Java アプリケーション開発者からインフラに転身した身としては、昨今の Java 界隈には直ぐに馴染めないという難点があります。このエントリでは、Photon Controller で使われているライブラリのいくつかを紹介しつつ、概要を知るためのポインタを列挙していきます。

すでに以下に列挙するライブラリは掌握している場合には読み飛ばして頂ければと思います。

この記事は PROMOTED-3809 を元に執筆しています。
ソースコードと実際の動作から得られた情報をまとめているため、誤っている可能性もありますのでご容赦下さい。

Photon Controller の依存ライブラリ

上の図が Photon Controller の主だった依存ライブラリの一覧です。以下に Photon Controller のソースコードを読む際に、予め知っておいた方が良いライブラリ/フレームワークを挙げます。

Dropwizard

http://www.dropwizard.io/

Web サービスを構築するためのフレームワークになります。最終的な成果物は、Web アプリケーション サーバーの Jetty を同梱した単一 jar ファイルにパッケージされ、配布物は Jar ファイルだけで済むというシンプルなフレームワークです。Jetty 以外にも、RESTful API を実装するための Jersey、JSON シリアライゼーションのための Jackson も同梱されています。

Photon Controller では API Front End にて利用されています。

Swagger

http://swagger.io/

RESTful API のドキュメンテーション フレームワーク。/api にブラウザにアクセスし、RESTful API のドキュメントを参照することや、API を実行することも出来ます。

Photon Controller では API Front End にて利用されています。

Google Guice

https://github.com/google/guice

Dependency Injection コンテナの実装の一つになります。JDK 1.4 で止まっていた私にとって最大のハードルでもあります。全モジュールにおいて、インスタンス生成時に利用されています。

Apache Thrift

https://thrift.apache.org/

軽量の RPC フレームワークになります。Thrift 用の IDL から各言語の Stub を自動生成し、言語間を跨いだ RPC を実現しています。Photon Controller では、Agent、Leaf/Intermediate Scheduler、Root Scheduler、HouseKeeper、Chairman、Deployer、API Front End 間での通信に用いられます。

同様のフレームワークに Google Protocol Buffer、MessagePack、Apache Avro などがあります。

ただし、CloudStore や Deployer の中に紛れている Cluster Manager は Project Xenon ベースになっているので、注意深く追っていった方がよいでしょう。Agent、Leaf/Intermediate Scheduler は ESXi 上の Python で実装されているので Project Xenon ベースになるとは考えづらく、ここは Apache Thrift が残ると思われます。

Project Xenon

https://github.com/vmware/xenon

VMware が開発している次世代コントロール プレーンを構築するためのフレームワーク。Decentralized Control Plane Framework とあるように、単一のデータストアや RDB も無い完全に分散されスケーラブルなコントロール プレーンを構築するためにプロジェクトが進められています。Photon Controller と同じく Github 上で開発が進められており、その開発はかなり活発に行われています。

以下の要件を満たすよう実装が進められています。

  • Isolation of execution context
  • Isolation of data
  • Portable across operating system
  • Naming and discovery
  • Managed state and concurrency
  • Asynchronous, Composable, Isolated Components
  • Standard framing and wire format
  • Clustering support
  • High Availability
  • Scale out with peer to peer forwarding
  • Full document indexing
    • Multi version state
  • Observable components
  • Built in analytics
  • Multi tenant/Sandboxed
  • Pluggable AuthZ / AuthN
  • Disk limited, not memory limited

Project Xenon では以下のライブラリを利用しています。

  • Netty (ネットワーク I/O ライブラリ)
  • Apache Lucene (永続データ保存)
  • Google gson (JSON シリアリゼーション)
  • Kryo (Apache Spark でも使われている高速なオブジェクト シリアリゼーション)
  • minlog (軽量ログライブラリ)

Photon Controller では、Java で実装されている API Front End、Deployer(Cluster Manager)、Chairman、Housekeeper、Root Scheduler で利用されています。

Xenon をベースに実装された CloudStore が Photon Controller の永続データの保存先となります。そのため、Devbox をまともに動作するように仕立て上げるためには、Xenon の JSON データ構造や Service の作成方法などを把握しておく必要があります。

おわりに

JDK 1.4 脳には、Generics、Annotation、Lambda、Dependency Injection と厳しい試練ではありましたが、今後の来たるべきクラウド時代に向けてのリハビリとしては良かったかも知れません。正直言語を学んでいると言うよりは、ライブラリ/フレームワークのお作法を学んでいる感が否めません。いずれも未だ未だエントリーレベルの理解ではありますが、Photon Controller のソースコードを追うには十分だと感じています。

次エントリでは、いよいよ Devbox をビルドしていきます。