0%

Micro Services with Docker or OSv - Part1: DockerとOSvとSpring Cloudを考える

Dockerコンテナを細かく機能で分割するデザインをしていると、以前Dropwizardvert.xで実装を試していたMicro Servicesと似ている気がしてきました。

Chris RichardsonのMicroervices: Decomposing Applications for Deployability and Scalabilityは懐かしい名前です。

OSv

OSvというクラウドのために設計されたハイパバイザ-上で動作する専用OSがあります。
Library OSとも言えるJVMと機能を削りライブラリに近いOSを、ホストOSのハイパバイザー上で直接動かすというかなり思い切った実装です。

OSvはZero OS Managementが可能で、クラウド上のゲストOSの構成管理や設定が不要になるのは、CoreOSやProjectAtomicとコンセプトは似ています。
OSvはステートレスなライブラリに近く、DockerコンテナでなくJVMを動かすことに特化しているので、より軽量でOSの存在を意識させません。
そもそもJVMはチューニングの時に存在を意識するくらいなので、プログラマがアプリだけに集中できます。PaaSとかDevOpsとか急速に過去のものに感じてしまいます。

The bloated legacy UNIX configurations are gone. We’re stateless! No need for administration, template management, configuration and tuning

JVM言語のアプリを仮想マシンで動かすと、ゲストOSの存在が無駄な気がしていて、VMwareがJVMを統合したハイパーバイザーを出してくれないかなと思っていたくらいです。

One-JARのプログラムを動かすためのDockerfileはJDKをインストールしてJARをADDするだけなので非常に簡単です。
OSvでもDockerfileに似た概念で記述できる、Goで書かれたCapstanというOSv上のVM用のビルドツールがあります。
JVM言語とネイティブアプリですべてシステムを構成できるなら、Dockerでなくてもいいかもと思い始めました。

OSvは1VM=1プロセス=1アプリなのですが、1アプリの粒度をどう設計するのか、複数アプリのディスカバリとオーケストレーションはどうするのかといった問題はDockerコンテナと同様の課題になります。

Spring BootとSpring Cloud

Spirng Frameworkはいまどうなったのか気になってしらべていると、Spring BootやSpring Cloudと言ったフレームワークが出ていました。
Spring Bootは軽量なMVCフレームワークとして単独でも使えます。

Spring CloudはMicro ServicesのJVMをDockerコンテナと比較した場合にfleetやKubernetesに相当する、JVMアプリ管理ツールといった感じです。

Featuresや、Cloud Native NetflixOSS Services on Dockerのスライドを読むと、Kubernetes+fleetで実現できることとほとんど同じですがLinuxOSとコンテナの組み合わせよりも、JVMのアプリだけに集中できるため、よりプログラマブルにデザインと開発ができそうです。

  • Distributed/versioned configuration
  • Service registration and discovery
  • Routing
  • Service-to-service calls
  • Load balancing
  • Circuit Breakers
  • Global locks
  • Leadership election and cluster state
  • Distributed messaging

まとめ

OSvとSpring Cloud、DockerとNetflixOSSとSpring Cloudの組み合わせは、Micro Servicesを継続的に開発、運用していく上で重要なフレームワークになりそうです。本番環境使えそうなSpring BootでWebアプリを作るところから初めて、OSvも実際に動かしてみようと思います。