日鉄ソリューションズ株式会社のシステム研究開発センター(シス研)に所属する原です。普段はクラウドネイティブにおける開発・運用技術の研究開発をしています。今回から複数回にわたり、クラウドネイティブの基礎や、クラウドネイティブを推進する上で重要な機能であるオブザーバビリティという概念について幅広く発信していきたいと思います。まずは初心者向けの内容からスタートしていきますので、これを機会に徐々に理解を深めてもらえると嬉しいです。
さて、第1回目はクラウドネイティブが生まれた背景およびクラウドネイティブとは何か?について解説をしていきます
まずは、クラウドコンピューティングの誕生から歴史を振り返ってみましょう。諸説ありますが、商業的にクラウドコンピューティングという言葉が初めて登場したのは、2006年に当時GoogleのCEOであったエリック・シュミットがとある会議の中で発言したことが由来とされています。以来クラウドがバズワード化し、2011年米国国立標準技術研究所(NIST)がクラウドコンピューティングの定義※1を発表して以降、日本でも同年AWSが東京リージョンを開設し、クラウドコンピューティングが利用されるようになりました。2018年には日本政府がクラウド・バイ・デフォルト原則※2という方針を打ち出すなど、現在ではシステム構築の第一選択肢として考えられるほど広く普及が進んでいます。
一方、コンテナ技術というものが2013年のDockerの登場によって本格的に普及しはじめ、アプリケーション開発に革命をもたらします。コンテナとは、アプリケーションを実行するための環境をパッケージ化した技術で、可搬性やスケーラビリティに優れた特徴を持っています。ちなみに、可搬性とは他の環境に移植して動作させることが容易なことを示す指標です。2015年にはGoogleにより長らく社内で使ってきたBorg※3というツールをもとに開発されてきたコンテナオーケストレーターであるKubernetesが発表されます。同時にLinux Foundation傘下のプロジェクトとしてCloud Native Computing Foundation(CNCF)の設立が発表され、Kubernetesの開発がGoogleからCNCFへ寄贈されました。その後2年ほど複数のコンテナオーケストレーターツールが乱立していましたが、2017年頃にはKubernetesが事実上のデファクトスタンダードになってきたと記憶しています。
クラウドネイティブはこのようにクラウドコンピューティングとコンテナ技術の発展の中で、それらを活用したアプリケーション開発を推進する動きのもと誕生してきた概念であることを覚えておきましょう。
クラウドネイティブが誕生した当初、しばらくの間は明確な定義が存在しておらず、各ベンダーが各々の定義を市場に発信していました。しかし2018年にCNCFがクラウドネイティブの定義※4を発表して以降、今日に至るまで以下の内容(一部抜粋)が引用されることが多いです。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。 これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。
これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
一読するとややわかりづらく感じますが、大きく以下の4つのポイントに集約できます。
つまり、クラウドネイティブとは、単にクラウドを利用するだけではなく、コンテナやサービスメッシュなどの技術を活用することで信頼性とアジリティを両立させ、結果としてスケーラブルなアプリケーションを実現しようとするシステム構築手法、もしくはそのアーキテクチャ、考え方を意味すると言えるでしょう。別の言い方をするとクラウドの持つメリットを最大化するための考え方とも言えることができます。
今回はクラウドネイティブの歴史とその定義に関して解説しました。クラウドネイティブは信頼性とアジリティを両立する革命的なシステム構築手法であることがわかったと思います。NSSOLでは、2014年頃からDockerコンテナに注目し、2016年からはKubernetesを実業務において活用しています。クラウドネイティブを語るうえでは、クラウドコンピューティングと、このコンテナ技術を組み合わせて使うところが最初のポイントになります。
しかし、クラウドネイティブなシステムは簡単に構築できるのでしょうか?次回はクラウドネイティブ化を実装する上で、難しいポイントについて解説しますので、実務に活かせるヒントをお探しの方は、ぜひ楽しみにしていてください。