より具体的な内容について見てみましょう。2015年、クラウドネイティブを推し進める団体「 Cloud Native Computing Foundation ( CNCF )」が設立されました。彼らは、クラウドネイティブを以下の通り定義付けています。
「クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミューダブルインフラストラクチャ、および宣言型 API があります」
実際に、クラウドネイティブな技術を社内の基幹システム運用に適用するだけでなく、 IT 企業が自社サービスを提供するために利用していることも珍しくありません。また、障害時の影響範囲を最小限にすることや、サービスのリリース後の機能の追加・修正を簡単に行うことを目的にクラウドネイティブの考え方を取り入れる事例もあります。
CNCF で定義されている通り、クラウドネイティブのアプローチの代表例は、コンテナ、マイクロサービス、サービスメッシュ、イミューダブルインフラストラクチャ、宣言型 API です。それぞれについて、どのような技術なのか具体的に見てみましょう。
コンテナ
コンテナとは、 OS 上に複数の環境を作り出すことができる仮想化技術です。ひとつの OS 上でのプロセスを独立した空間に隔離できる点が従来の仮想化技術と異なり、ゲスト OS を介さずに軽量な環境を作ることが可能です。
コンテナは、従来の仮想化技術よりも軽量で必要とする起動時間が短いため、サービスのリリースや障害時の復旧にかかる時間を短縮できます。また、少ないリソースで動作可能なため、1つのサーバーでよりたくさんのアプリケーションを実行できます。加えて、動作に必要となるものを最低限のみパッケージングするため、 OS への依存度が低く、移行も比較的気軽に行えます。
具体的には、アプリケーションの構成要素に変更が発生した場合、本番環境で変更するのではなく、変更したソフトウェア一式を置き換える方法を取ります。従来のオンプレミス環境では、アプリケーションに変更があるたびにパッケージ追加やパッチ適用が必要でした。そのため、 OS のアップデートや設定変更のたびにインフラが複雑化し、アプリケーションの動作に影響が出るリスクがありました。それを避けるため、古いバージョンのまま使われ続けらたり、セキュリティ上の問題が放置されたりというケースも見られます。
一方で、クラウドネイティブでは、一度構築した本番環境には変更を入れません。更新が必要な場合は、変更作業を実行するのではなく、変更済みの OS を用いた環境を新規に立ち上げ、本番環境の切り替えを行います。インフラに対する変更が最小限に抑えられ、アプリケーションの更新がより気軽に行えます。
説明した通り、クラウドネイティブでは、アプリケーションが小さなサービスの集合として設計されます。そのため、ひとつのサービスに障害や変更が生じても、アプリケーション全体に影響を及ぼすことはありません。また、宣言型 API を取るため、システムの実行状態も自動的に管理され、問題が生じても自動的に回復されます。このようなことから、変更や障害に柔軟に対応できるのです。