アプリケーションモダナイゼーションの2大トレンド「コンテナ」と「サーバーレス」
「コンテナとサーバーレスはアプリケーションモダナイゼーションの2大トレンドとして注目が集まっているが、技術的なメリット・デメリットについて整理できていない人も多い。今日はその辺りを整理できるようにしたい」
冒頭でこう語り、川崎氏のセッションは始まった。川崎氏は2017年より、Global Black Belt(黒帯)というグローバル組織に所属し、クラウド開発分野におけるプリセールスの技術支援、イベント・セミナーの登壇を通じてクラウド技術の普及に従事している。
なぜ、今コンテナ(CaaS)が注目を集めているのか。CaaSは、サービス責任モデルの観点から捉えると、IaaSとPaaSの間に位置するという。なぜならCaaSは、コンテナ技術によりIaaSとは違った仮想化レベルが提供されており、ベンダーごとの言語やフレームワークには比較的自由度があるからだ。
「マイクロサービスアーキテクチャでは、アプリが比較的小規模の独立したサービスから構成され、複数のコンテナを連携させる必要がある。そのため、複数コンテナを管理するオーケストレーション機能が重要な役割を担う」と川崎氏は説明する。
Dockerの登場以後、さまざまなオーケストレーションテクノロジーが登場したが、普及が加速したのは2015年7月。Kubernetesが1.0に到達したのと同時期に、CNCF(Cloud Native Computing Foundation)という、主にクラウドネイティブなアプリケーション開発・運用環境に関する技術において標準化を推進する団体が設立、標準化が進められたことがきっかけだ。そして2017年2月頃にCoreOS社が「Kubernetesが標準」だと宣言したことで、「Kubernetes標準時代がきた」と川崎氏は説明を続ける。CNCFだけではない。OCI(Open Container Initiative)では、CNI(Container Networking Interface)やCSI(Container Storage Interface)といった、コンテナランタイムやコンテナイメージ、ネットワーク周りやストレージ周りの標準化を進めていることも、今の状況を後押しした。
IDC Japanが行った、Docker導入状況に関するユーザー調査によると、調査対象総数に対して22.9%の企業がDockerを導入しており、それらの企業の内41.1%がKubernetesを利用しているという。「これは日本の状況だが、海外ではさらにモメンタムがきている」と川崎氏は話す。
コンテナのメリットは3つある。1つめは可搬性と再利用性の高さである。「必要なものはすべてイメージ化することで、クラウド、オンプレミスをまたがってコンテナを移動でき、再利用も可能だ」と川崎氏。2つめは自由度・柔軟性の高さ。「言語やフレームワークの制限はほとんどない。基本的にコードを変更することなくアプリケーションの実行できる」(川崎氏)。3つめは標準化が進んでいること。「OCIやCNCFにより標準化が進んでおり、例えば会社やサービスによって異なるフレームワークを使ったとしても、ベースの部分が標準化されているので、お互いが有効活用できる。コンテナの普及の背景には標準化が進んでいることが大きく影響している」と川崎氏は語る。
デメリットもある。「サーバーレスの部分と比べると、抽象度は高くないこと」と川崎氏は指摘する。抽象度が高くないため、管理者が対応しなければならない範囲が広いのだ。「コンテナは仕組みであってインフラ。オーケストレータがある程度カバーしてくれるが、まだまだ管理者の責任範囲は広く、経験やスキルが要求される。特にKubernetesは、宣言的アプローチを採用しているので、正しく、賢く宣言するには経験とスキルが必要となる」と川崎氏。というのも、Kubernetesは複雑だからだ。これはKubernetesのファウンダーの1人であるJoe Beda氏も語っているという。
もう1つのトレンドであるサーバーレスは、2014年11月にAmazonがAWS Lambdaを発表したのを皮切りに、2016年2月にGoogleがGoogle Cloud Functionsを、同年3月にはマイクロソフトがAzure Functionsを、同年12月にはIBMがOpenWhiskを、そして2017年10月にはOracleがFn Projectというオープンソースのサービスをリリースしている。このように各クラウドベンダーがさまざまなサービスを出しているが、2018年2月にCNCFが発表したServerless Whitepaperにも書かれている通り、サーバーレスは「コンテナとは異なり、標準化が十分されておらず、相互運用性がない状態だ」と川崎氏は語る。
サーバーレスはサービスの責任モデルの観点から見ると、PaaSとSaaSの間に位置する。「面白いのが、アプリケーションの責任。トリガーやバインディング、バックエンドの部分はベンダーにあるが、ファンクション(コード)の責任範囲ユーザーにある。このような形になっているので、ユーザーがコントロールできる部分は多いわけではない」と川崎氏は説明する。
サーバーレスのメリットは大きく4つ。1つめは使った分だけ課金。「これはうれしい」と川崎氏。使っていないアイドル時間のコストが不要となり、経済的なメリットがあるからだ。2つめは高度な抽象化によりインフラ管理が省力化されること。3つめはインスタンスの自動スケール。「必要なコンピューティングリソースを管理する必要はなく、インスタンスは自動でスケールされる」と言う。4つめは開発リソースの省力化。「プログラミングインターフェースやモデルが用意されているので、開発者はロジックに集中することができる」と川崎氏は話す。
デメリットとしては、自由度や柔軟性が低いことが挙げられる。また、コールドスタートの問題もある。「一定時間使わないアイドル後のインスタンスで、ウォームアップが必要となる」と川崎氏は言う。さらに、実行時間や消費可能リソースの制約があるため長時間処理には向かないという。そして最後がベンダーロックインの問題だ。「基本的は標準化されていないため、ベンダーが提供している仕組みに依存してしまう。今後標準化、デファクトの登場に期待したい」(川崎氏)
使いどころや考え方を理解し、適材適所で選択する
一長一短あるコンテナとサーバーレス。これらをどのように選択していくとよいのか。その際に最も重要なのが、「まずは提供したい価値と優先順位の明確化をすることだ」と川崎氏は指摘する。ビジネスニーズを理解し、コンテナ、サーバーレスの利用を通じて実現したい姿、提供したい価値を明確にする。そして非機能要件を洗い出し、優先順位を付けていくのである。
「非機能条件の洗い出しはできるだけ具体的にすることが大事」と川崎氏。例えばアプリケーションはコンテキストに依存しているか(ステートフル、ステートレスなのか)、依存ライブラリ、言語の自由度はどうか、稼働パターン、性能・拡張性、回復性、運用保守性などの観点で使いどころを考えるのである。
次に考えなければならないのは、開発運用体制の充実度やスキルレベル・経験、納期までの時間、既存システム資産などといった、与えられた条件や制約である。これによって、戦略や最適解は変わるからだ。「このようにアプリの特性と非機能要件に与えられた条件・制約を加えて総合的に評価し、適材適所な選択を行うこと。必要に応じて併用することが重要になる」(川崎氏)
最終的には、アプリ・モダナイゼーションをどこまで目指すかについても考えることが重要だ。「まずは短期的、長期的な観点で考えること」と川崎氏は指摘する。短期的だとコンテナでリフト&シフトでよいが、アプリ構造やアーキテクチャのクラウドへの最適化が伴わない場合は、移行前よりもコストがかかることがある。一方、長期的な観点であれば、時間とコストはかかるが、コンテナとサーバーレスを適材適所に使い、クラウドに最適化されたアプリケーションにすることが得策となる。クラウドが持っている能力を最大限生かすことができるからだ。
次にサポータビリティ(サービス継続のためにサポートしていく能力)についても考える。商用サポートやSLAがどうなっているのか、新しいアーキテクチャをメンテナンスし続ける専門チームを持てるのか、考慮することも重要だとした。
そして、やりすぎになっていないかについても検討することがポイントだ。やりすぎると運用保守の複雑化をもたらす可能性があるからだ。「本当にマイクロサービス化をする必要があるのか、本当にKubernetesが必要なのか、もっとシンプルな方法はないのかなど、やりすぎについて今一度確認することをお勧めする」(川崎氏)
これからもプラットフォームは進化していくが、「自動化、抽象化という方向性は変わらないと思う」と川崎氏は力強く語る。そしてコンテナにおいてはOCI、CNCFという2つの標準化団体により、さらに標準化は進んでいくという。一方、サーバーレスの標準化も進んでいく。「道のりは長いと思われるが、CNCFの中のServerless Working Groupにおいて、イベントやワークフロー、イベントオーケストレーションなどの標準化が進められているので期待したい」と語る。
その一例がCloudEventsだ。これはイベントスキーマ標準化のための共通仕様で、異なるシステム間における、イベントの相互運用性確保を目的としている。これによりさまざまなプロトコルで配送可能になるという。またさまざまなサーバーレスプラットフォームに対応できるよう、CloudEventsをサポートするイベントミドルウェアも登場している。
もう1つ、今後の流れとして期待されるのが、マルチクラウドやマルチモデルである。「特定クラウドに依存したくない、ベンダーロックインを避けたいというエネルギーが高まっていることから、活発化している」と川崎氏。またこういったものをサポートするフレームワークやサービスが登場しており、市場で一定の人気を集めているという。マルチクラウドコンテナの世界でも、Kubernetesはデファクトとなっている。GKE(Google Kubernetes Engine)、AKS(Azure Kubernetes Service)、Amazon EKS、VKE(VMware Kubernetes Engine)などのマネージドKubernetesサービス、共通コンソールでマルチクラウド+オンプレKubernetesをすべて一元管理できるRancher 2.0、Docker Enterprise Edition 2.0などがある。
サーバーレスもマルチクラウド化が進んでおり、それをサポートする仕組みが出てきている。また、新しいハイブリッドモデルとして、サーバーレスコンテナサービスも登場している。同サービスはオンデマンドで実行可能なコンテナで、VM、クラスタが不要、コンピュート実行時間課金といった特徴を持つ。
最後に川崎氏は次のように語り、セッションを締めた。
「コンテナやサーバーレスは使いどころや考え方を理解して、適材適所で選択すること。そうするとプラットフォームの能力を最大限生かしたアプリケーションを構築できる」
お問い合わせ
日本マイクロソフト株式会社