クラウドネイティブから見たクラウドの小史
Linux Foundation傘下に、クラウドネイティブを定義したりそれに関連するプロジェクトをホスティングする、CNCF(Cloud Native Conputing Foudation)という団体があります。ここで2020年までエグゼクティブディレクターを務めたDan Kohn氏による「A Brief History of the Cloud」というスライドを見つけたので、内容をまとめてみます。
クラウドの小史
仮想化されていないサーバー:Sun(2000)。アプリケーションを起動したければ、サーバー、ないしサーバーラックを買ってくる。アプリケーションのビルディングブロックは物理サーバー。
仮想化:VMware(2001)。2001年にサーバー市場に向けてリリースされ、仮想マシン(VM)を一般的にした。多数のVMを一台の物理サーバーで実行、つまりサーバー購入台数を削減できるようにした。アーキテクチャのビルディングブロックがVMになった。
IaaS:AWS(2006)。Amazon Web Services(AWS)は2006年にElastic Compute Cloud(EC2)を提供開始し、Infrastructure-as-a-Service市場を生み出した。サーバーは時間単位に借りるものになり、サーバー費用を設備投資(CapEx)からランニングコスト(Opex)に変えた。アーキテクチャのビルディングブロックは引続きVMであり、になった。Amazon Machine Image(AMI)と呼ばれた。
PaaS:Heroku(2009)。Herokuは2009年に提供開始され、Platform-as-a-Service(PaaS)を一般的にした。ビルディングブロックは、コンテナ化された12-factor appを実現するbuildpackになった。どのようにコンテナ化されるのかははっきりしないが、新しいアプリケーションをデプロイするには「git push heroku」とするだけでいい。
Open Source IaaS:OpenStack(2010)。OpenStackは、非常に多様な提供者グループを結集し、オープンソースのInfrastructure-as-a-Service (IaaS)を生み出した。AWSやVMwareの競合と言える。ビルディングブロックは、VMのままだった。
Open Source PaaS:Cloud Foundry(2011)。PivotalはHerokuのPaaSに代わるオープンソースプロダクトを作り上げ、2014年後半にはCloud Foundry Foundationを開始させた。ビルディングブロックはGardenコンテナで、これはHerokuのbiliudpack、Dockerコンテナ、そしてLinux以外のOSも保持することができた。
コンテナ:Docker(2013)。DockerはLXC、Union File System、cgroupsを組合わせて、世界中の何百万もの開発者に採用されているコンテナ化の標準を作成した。かつてないほど早く開発者テクノロジーを取り込んだ。分離(isolation)、再利用(reuse)、不変性(immutability)を可能にした。
クラウドネイティブ:CNCF(2015)。クラウドネイティブコンピューティングは、オープンソースソフトウェアスタックを使用して、以下を行う:アプリケーションをマイクロサービスに分割し、その各パートをコンテナにパッケージングし、それらのコンテナの動的なオーケストレーションによりリソース使用率を最適化する。
私たちがこれまでに学んできたことは?
コアビルディングブロック:サーバーから仮想マシン、Buildpack、コンテナへ。
分離単位:スピンアップ時間とサイズにおいて、重量級から軽量級へ。
不変性:ペットから家畜へ。
提供者:シングルベンダーのクローズドソースから、クロスベンダーのオープンソースへ。
PaaSについては?
OpenShift、Huawei CCE、Deis、Apprendaは、クラウドネイティブプラットフォーム上に構築されたPaaSの例。
新しいアプリケーションの多くは、PaaS上にデプロイ可能な12-factor appsとして始まります。やがてPaaS を超えて成長することもありますし、また、一部のアプリは PaaS モデルに適合しません。
クラウド ネイティブ上のPaaSは両方をサポートします。
クラウドネイティブの提案価値
分離。コンテナパッケージアプリケーションは、開発/製品の同等性を実現し、コードとコンポーネントの再利用を促進し、運用を簡素化する。
ロックインなし。 オープンソースソフトウェアスタックにより、あらゆるパブリッククラウドまたはプライベートクラウド(またはその組み合わせ)への展開が可能になる。
無制限の拡張性。数万の自己修復マルチテナントノードに拡張できる最新の分散システム環境向けに最適化されている(例: Google は 1 週間に 20 億個のコンテナを開始している)。
機敏性と保守性。依存関係を明示的に記述したマイクロサービスにアプリケーションを分割することで、これらが増加する。
効率とリソース利用率の向上。集中的なオーケストレーションプロセスによる、マイクロサービスの動的な管理とスケジュールにより、メンテナンスと運用に関連するコストが削減される。
回復力。 個々のコンテナ、マシン、さらにはデータセンターの障害や、さまざまなレベルの需要に対応する。
終わりに
Dan Kohn氏による「A Brief History of the Cloud」から、「クラウドの小史」と「クラウドネイティブの提案価値」をまとめてみました。
私のノートにも「“クラウドコンピューティング”の定義の小史」という、NISTによるクラウドコンピューティングの定義が発行された2011年をゴールとして、クラウドのサービスとその利用にフォーカスしてまとめた小史があります。Kohn氏のものはCNCFの発足する2015年をゴールとしたより長いもので、クラウドを支える技術にフォーカスしたものになっていました。別々の、あるいは相互に補完的な小史としてお読みいただけるかと思います。
スライドはこのあとに「プロジェクトをCNCFでホストする理由」「CNCFへの参加」と続きますが、この辺りは最新の組織情報を現在のサイトで確認してもらう方がよいと思い、省略しました。このスライドがいつどこで発表されたものか分からないのですが、最後の方の「CNCF Events」という1枚を見た感じ、2016年頃かなと思います(ご存じの方、ぜひ教えてください)。