Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

マイクロサービスを実現するプラットフォーム

マイクロサービスを実現させるプラットフォームは多種多様ですが、一般的には(現時点で)Kubernetesをはじめとするクラウドネイティブアプリケーションです。

Kubernetesは非常に多彩、かつ強力なマイクロサービス基盤ですが、Kubernetesというアプリケーション自体は様々な形で提供されています。

今回はKubernetesを中心にどのような利用方法があるかまとめてみました。

フルマネージド型Kubernetesを提供しているパブリッククラウド

Kubernetes環境を全て自分たちで構築、運用するのは非常に難しい。いやいや、自分たちでやっているよという方もいらっしゃいますが、一般的に考えてかなり技術力が必要だと感じています。

パブリッククラウドではそのような課題に対してもちゃんと対応しています。フルマネージド型のKubernetesを利用すれば構築は非常に簡単、運用もある程度パブリッククラウド側が吸収するので非常にコストメリットがあります。そんなフルマネージド型のKubernetesをまとめてみました。

いわゆるBig4と言われるパブリッククラウド、AWS、Azure、GCP、IBM Cloudでは既にフルマネージド型Kubernetesが提供されています。

それぞれ略称があり、その略称でサービスを特定することが多いです。

各社Kubernetesで提供されるサービスは網羅しています。

今後は各社のサービスの安定化が進み、Kubernetesを実行する上で必須になっていくと予想されています。

仮想サーバー上で実現するKubernetes

大型のシステムになると、外部との連携やネットワーク接続などの考慮が必要となります。パブリッククラウドでは”今のところ”提供していない機能を必要とする場合もあります。

そこでIaaS上にKubernetesを構築し運用するという従来の考え方に基づいた提供方法があります。

単純にIaaSの上にKubernetes構築すればそれで終わりじゃない?という意見もありますが、自分でKubernetesを構築するのは非常に大変です。(だからフルマネージドにしましょうという話なのですが)

そこで構築を支援する仕組みを取り入れ、その中でKubernetesを運用するという新しい動きが出てきました。

Rancher

https://rancher.com/

Rancherは米国Rancher Labs社が提供するコンテナオーケストレーションツールです。Rancherを利用することでKubernetesの導入ハードルが格段に下がります。

例えばGKEやAKSも使いつつ、自分たちのプラットフォームも活かしたいなんて言う場合はRancherがおすすめですね。

Rancherの便利なところはGKE、AKS、EKSなどのフルマネージド型Kubernetesにも対応しているし、Rancherから仮想サーバーへKubernetesをデプロイ出来るし、すごいのはRKE(Rancher Kubernetes Engine)を使うとオンプレ上に構築することも可能です。またデプロイパイプラインも用意してあるのでマイクロサービス開発やるための環境は全てRancherだけで整ってしまいます。

一方でRancherはまだまだ過渡期であり、サポート体制や1系と2系の差分管理など問題もあります。しかし大手の企業が採用していることもあり非常に注目しています。

Red Hat OpenShift

Red Hatが提供するコンテナオーケストレーションです。こちらもRancher同様に非常に多彩なサービスを展開していますね。OpenShiftは大きく3つのデプロイモデルを提供しています。

上記のサービス詳細については公式サイトを参照してください。
https://www.redhat.com/ja/technologies/cloud-computing/openshift
OpenShiftの特徴としては、Container as a Serviceとして様々なプラットフォームにKubernetesを提供することが可能です。もちろんオンプレでも可能。

Rancherとは違いRed Hat OSという強力なディストリビューションがあるのでエンタープライズシステムでの導入が見込まれます。

マイクロサービス特化アプリケーションフレームワーク

Kubernetes実行環境は非常に多彩で各パブリッククラウドでも提供しているので導入ハードルは大分低くなります。

一方でマイクロサービスアーキテクチャーを実現するアプリケーション開発は現状非常にハードルが高いです。

そんなハードルを少しでも下げるためには既存のMVCではなくマイクロサービスに特化したMVCを選択するという手もあります。

SpringBoot

SpringBootはSpring Frameworkでアプリケーションを簡単に作れる仕組みで、特にマイクロサービスに特化しているわけではありません。SpringBootが何故マイクロサービス開発に向いているかというか、以下の特徴があるからです。

  • 依存するライブラリを同梱すると自動で設定などが組み込まれる
  • 最初からアプリケーションサーバーを同梱しているのですぐにレビューすることが出来る
  • ユーザーが実現したいものをフレームワークとして提供している

これらの話はMVCであれば当たり前ではあるのですが、まあわかりやすく言えばJavaなんで採用実績が多いんですよね。(と思っている)
あとSpringBootがマイクロサービス開発の第一歩として非常にわかり易い例とすると、Netflixですね。Netflixは自身のサービス基盤をマイクロサービスで組んでいることは有名です。さらにNetflix自身が自社開発のライブラリやアプリケーションをOSSとして公開しています。このようにNetflixが提供するOSS群はマイクロサービス開発にとってとても有効なものが多い。SpringBootアプリケーションと連携させればマイクロサービスへのハードルは低くなるかもしれません。そこで生まれたのがSpring Cloudです。
http://projects.spring.io/spring-cloud/

Spring Cloudは簡単にいうとSpring BootとNetflixなどが提供するOSS群を連携させマイクロサービスとして実行出来るプラットフォームです。SpringBootはマイクロサービスに特化していませんが、SpringBootで開発したアプリケーションをSpring Cloudを活用しNetflixが提供するOSSと連携してマイクロサービスすることが出来ます。僕的には非常に面白いのでおすすめしています。

Service Fabric

Service Fabricはマイクロソフトが開発したマイクロサービス基盤です。ベースはASP.NETです。AzureのPaaSはService Fabricの上で実行されていたりします。このService FabricはOSSとして公開されており、自前で作ったシステムにも導入が可能です。
https://github.com/Microsoft/service-fabric
リリース当初はWindowsベースであったので、ASP.NET以外の選択肢はありませんでしたが、現在はLinux上で可動するためService Fabricの上にコンテナ環境を構築することでJavaなどのアプリケーションも開発することが可能です。
マイクロソフトが提供するチュートリアルやドキュメントもわかりやすく書いてあります。
https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-overview

Hanami

Rubyをベースとしたマイクロサービスフレームワークです。ちょっとマイナーですがRubyでマイクロサービスを実現したい場合の選択肢としてアリかもしれません。
http://hanamirb.org/
残念ながら僕は使ったことがないので詳細はわかりませんが、MVCとしての基本は変わらず、多くのマイクロライブラリーがあるので開発しやすそうです。

Micro

Goベースのマイクロサービスフレームワークです。
https://micro.mu/

Colossus

Scalaベースのマイクロサービスフレームワークです。
http://tumblr.github.io/colossus/0.11.0/
最近はあまり僕も知らないのですがTumblrが使っているみたいです。

Flask

Pythonベースですね。こちらは今結構人気が出てきました。WerkzeugとJinja 2がベースです。
http://flask.pocoo.org/
僕の感覚では他のフレームワークに比べライブラリや依存機能はかなり少なめ。なので軽量アプリケーション開発に向いています。単独で使うには心もとないなーと感じながらも軽量というのは魅力的です。マイクロサービスというと語弊があるかもしれませんが、API開発という意味ではとても有効なのではないかなと思います。マイクロサービスはAPIを単位として取り扱うということも多くあり、その場合ViewなしMVCを使うわけですが無駄なライブラリが多いですよね。Flaskであればその点軽量なのでAPI開発はしやすいかなと。(とはいえこれは私の感覚です)

まとめ

マイクロサービスはKubernetesだけでは実現出来ません。マイクロサービスと聞くと開発ハードルが非常に高いと感じる方も多くいますよね。そのハードルを少しでも下げるためには、フルマネージドを利用したり、マイクロサービスに特化したフレームワークを使ったりするわけです。
今回ご紹介したのはほんの一部です。是非自分でも色々試して見ると面白いです。

ちなみに弊社では一般的なMVCからどのようにModelを分割していくか、なども研究しています。そのような技術Tipsも掲載していきます。