クラウドネイティブ(Cloud Native)

クラウドネイティブとは?
広い意味で定義すると、クラウドの利点を最大限に活用できるようにアプリケーションを構築し、実行する方式を指す。
従来システムのアプリケーションがクラウドの利点を100%活用できていなかったとすれば、マイクロサービスアーキテクチャを採用し、コンテナ、Kubernetesのような技術とツール、DevOps、アジャイル方法論などを導入することで、開発者の生産性、ビジネスの俊敏性、拡張性、可用性、コスト削減効果を大きく高めることができる。
そのためには、アプリケーション、アーキテクチャ、インフラ、開発プロセスなど、あらゆる面で変化が必要になる。その変化の方向性とは何か、クラウドをネイティブに使うとはどういう意味なのかを見ていく。
サービスサーバーの変化
- 2000年まで: 物理サーバー
- モノリスアプリケーションを運用
- 物理サーバーの台数は多くなく、サーバーを1対1で管理
- 2001年から2009年: 仮想化技術第1世代
- 実システムを仮想マシンに置き換え
- 統合率を上げて効率化することが目的であり、サーバーのマルチコア化と仮想化技術が普及
- 仮想化技術の代替としてコンテナ技術が登場
- 2010年から2015年: 仮想化技術第2世代、Cloud時代
- クラウドが大規模サービスに適しており、拡張可能であることを証明
- 大規模インフラを安定的に管理するための技術も普及
- 2010年から2015年: Cloud Native世代
- 2016年1月に正式発足したCloud Native Computing Foundation(以下CNCF)は、本物のクラウド技術をオープンソースで解決することを目標とした
- アプリケーションを実行するために必要な最適なインフラを提供
- 開発したものを「即時」に「安定的」に提供
CNCFとは?
2015年に初めてCloud Nativeという用語を使ったLinuxは、CNCF(Cloud Native Computing Foundation)を設立し、クラウドネイティブへ移行するためのオープンソース技術を推進・管理している。この財団には550を超えるクラウドプロバイダーや技術企業が参加して運営されており、クラウドネイティブを次のように定義している。
- パブリック、プライベート、ハイブリッドクラウド環境で、拡張性のあるアプリケーションを作成し運用できる。
- コンテナ、サービスメッシュ、マイクロサービス、不変インフラストラクチャ、宣言的APIが典型的なアプローチである。
- 回復性があり、管理しやすく、可観測性を備えた疎結合システムを利用できる。
- 強力な自動化と組み合わせることで、エンジニアは最小限の労力で影響力が大きく予測可能な変更を行える。
CNCFクラウドネイティブ定義の参考: https://github.com/cncf/toc/blob/master/DEFINITION.md
クラウドネイティブのための主な4要素
上記の定義を整理すると、クラウドネイティブへ進むための主な要素は、次の4つに要約できる。

図の参考: Chirag Jog’s Blog
-
DevOps
アプリケーションの開発と運用の協業プロセスを自動化することを指し、結果としてアプリケーションの開発と改善の速度を高める。 -
CI/CD
継続的インテグレーション(Continuous Integration)は、開発者が作業したコードを自動でテストし、テストに通過するとコードを統合して保存する。
継続的デプロイ(Continuous Deployment)は、作業したコードや変更内容をテストし、リポジトリへアップロードして、実サービスへのリリースまで自動化することを指す。 -
コンテナベースのインフラ
仮想化技術の一つであり、システムそのものを仮想化するのではなく、アプリケーションを実行するためのコンピューティング作業をパッケージ化して仮想化するものである。 -
Microservices
アプリケーションを構成するサービスを独立した小さな単位に分解して構築し、各構成要素をネットワークで通信させるアーキテクチャであり、サービスの安定性と拡張性を支援する。
クラウドネイティブアプリケーションの価値
-
速い反復
クラウドネイティブアプリケーション開発を活用するということは、Kubernetesに代表されるコンテナのような俊敏で拡張可能な構成要素を使用し、マルチクラウドのような技術的境界を越えて、よく定義された方式で統合される個別かつ再利用可能な機能を提供することを意味する。反復的な自動化とオーケストレーションによって、すばやく反復する。 -
自動デプロイ クラウドネイティブアプローチは、ソフトウェア提供プロセスにおいて、開発環境とは異なる異質な環境を構築するために相当な労力が必要な従来の仮想化志向のビジネスプロセスよりも優れている。一方、クラウドネイティブアーキテクチャは自動化と構成を特徴とし、信頼でき、検証され、監査された既知の良好なプロセスを基盤として、反復的な人手の介入なしに俊敏な提供を可能にする。
-
独立的で効率的 クラウドネイティブはマイクロサービスベースのアーキテクチャをもたらす。マイクロサービスは基本的に独立してリリースできるアプリケーションサービスであるため、アップグレード、グレーリリース、独立コンポーネントとしての再利用が可能であり、大規模アプリケーション全体への影響が小さい。入力ポートと出力ポートが決まっていれば、信頼関係にある当事者は十分に発展でき、チーム全体の組織構造もより簡素化され、通信コストが低く効率が高くなる。
参考
- Cloud Native Applications — The Why, The What & The How. | Chirag Jog’s Blog
- クラウドネイティブとは? | CLOUDMATE
- openmaru