アプリケーションモダナイゼーションの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つめは開発リソースの省力化。「プログラミングインターフェースやモデルが用意されているので、開発者はロジックに集中することができる」と川崎氏は話す。
デメリットとしては、自由度や柔軟性が低いことが挙げられる。また、コールドスタートの問題もある。「一定時間使わないアイドル後のインスタンスで、ウォームアップが必要となる」と川崎氏は言う。さらに、実行時間や消費可能リソースの制約があるため長時間処理には向かないという。そして最後がベンダーロックインの問題だ。「基本的は標準化されていないため、ベンダーが提供している仕組みに依存してしまう。今後標準化、デファクトの登場に期待したい」(川崎氏)