クラウドネイティブとは、クラウド上での利用を前提して設計されたシステムやサービスのことである。
歴史
クラウドサービスが登場した当初は、自社のサーバーを使用する(オンプレミス)方式で用いられていたシステムをクラウドに移設して利用する方法が用いられた。
クラウドが普及・浸透したことで、はじめからクラウドで利用する想定で設計されたシステムが登場しはじめ、従来のシステムと区別する際にクラウドネイティブと呼ばれるようになっている。
定義
CNCF(Cloud Native Computing Foundation)クラウドネイティブなアプリケーションのためのオープンソースソフトウェアの開発を進めている団体ではクラウドネイティブのことを以下のように定義しています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミューダブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
(引用:https://github.com/cncf/toc/blob/master/DEFINITION.md)
つまり、ソフトウェアの開発にあたっては、クラウドネイティブのほうが効率が良く、サービスの提供規模が拡大した際にも柔軟に対応できる的な感じ!
じゃーよく聞く、クラウドファーストとクラウドのネイティブの違いは?
コンテナをしようする事が前提?かつ、アプリケーションの細分化しての開発の度合いか?
とすれば、コンテナと仮想マシンの違いは?
つまり、複数のOS上で稼働するのか?一つのOSで稼働するのか?
逆に言えば、OSがタスクをCPUへの割り当てを任意で変更することはできない?そういう状況を必要とするかはわからないが...
設計段階の違いは?
オンプレミスの構築
システムが稼働キャパシティプランニングとしてシステムに必要な処理能力をあらかじめ予想し、その能力をある程度上回るサーバーやストレージを最初から用意する必要があります。そのうえでハードウェアを調達して構築するといったコストと手間が構築時に必要となる。
クラウドファーストでの構築
稼働したあとでも、インフラ環境を追加したりといったことが柔軟に行える。そのため、比較的小さめのインスタンスやストレージを調達してクラウド上でシステムを稼働させたあとで、性能が必要になる場面で適切な大きさのインスタンスや高性能なストレージへ切り替えればよい、ということになります。つまり、初期コストを抑えて徐々に追加できる!!!
クラウドネイティブでの構築
コンテナを利用することを前提としているため、開発段階でアプリケーションを機能ごとうに分解して設計し、それぞれの機能をコンテナに載せるイメージか。以降、状況によってコンテナを増設したり、追加の機能を拡張したりできる。かつそれぞれが独立していることによりリスク分散がされる。
クラウドネイティブたる技術的要素
- マイクロサービス
- マイクロサービスとは、アプリケーションの構成要素ごとに細分化して開発を行うアーキテクチャ(構築思想)です。
- 機能ごとに細分化されているため、アプリケーション開発の効率が上がるだけではなく、障害等が発生した際にもその影響を最小限に留めることができます。
- コンテナ
- マイクロサービスを利用したクラウドネイティブ実現のために利用するのが「コンテナ」です。コンテナはマイクロサービスそれぞれのプログラムの実行環境として機能します。
- コンテナはアプリケーション層での仮想環境で動作するため、ひとつのOS上で実行できます。そのため、仮想マシンで複数のOS上で実行した場合に比べるとCPUやメモリのリソースも抑えられるメリットがあります。
- オーケストレーション
- オーケストレーションは、コンテナを効率よく管理するために使われる技術です。
- マルチホストでコンテナを稼働させる場合、ネットワーク接続や起動するホストの管理、動作状況の確認などが必要になります。これを司るのがオーケストレーションツールとよばれるもの。
- サービスメッシュ
- サービスメッシュはマイクロサービス間の通信を担います。負荷分散や通信トラフィックの最適化、さらには安全な通信を実現するためのセキュア化などの役割も担っており、これらの機能をソフトウェアのレイヤーで実行します。
スッキリはしないが、イメージだけはなんとなく。。。。