クラウドネイティブ (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 Foundation は、CNCF (Cloud Native Computing Foundation) 財団を作り、クラウドネイティブへ移行できるオープンソース技術を推進・管理している。この財団には 550 を超えるクラウドプロバイダーと技術企業が参加しており、クラウドネイティブを次のように定義している。

  • パブリック、プライベート、ハイブリッドクラウド環境で拡張性のあるアプリケーションを作成し運用できる。
  • コンテナ、サービスメッシュ、マイクロサービス、不変インフラストラクチャ、宣言的 API が典型的なアプローチである。
  • 回復性があり、管理しやすく、可視性を持つ疎結合システムを利用できる。
  • 強力な自動化とともに使用すれば、エンジニアは最小限の労力で影響力が大きく予測可能な変更を行える。

CNCF クラウドネイティブ定義参考: https://github.com/cncf/toc/blob/master/DEFINITION.md

クラウドネイティブのための主要 4 要素は、次の 4 つに要約できる。

Cloud Native

図の参考: Chirag Jog’s Blog

  • DevOps
    アプリケーション開発と運用の協業プロセスを自動化することをいい、結果としてアプリケーションの開発と改善の速度を速める。

  • CI/CD
    継続的インテグレーション (Continuous Integration) は、開発者が作業したコードを自動でテストし、テストに合格すればコードを統合して保存する。
    継続的デプロイ (Continuous Deployment) は、作業したコードや変更内容がテストを経てリポジトリへアップロードされ、実サービスのデプロイからリリースまで自動化することをいう。

  • Containers ベースのインフラ
    仮想化技術の 1 つで、システム全体を仮想化するのではなく、アプリケーションを実行できるコンピューティング作業をパッケージ化して仮想化したものである。

  • Microservices
    アプリケーションを構成するサービスを独立した小さな単位に分解して構築し、各構成要素がネットワークで通信するアーキテクチャで、サービスの安定性と拡張性を支援する。

クラウドネイティブのアプリケーション価値

  1. 速い反復
    クラウドネイティブアプリケーション開発を活用することは、Kubernetes に代表されるコンテナのような俊敏で拡張可能な構成要素を使用し、マルチクラウドのような技術境界を越えて、よく説明された方式で統合される個別かつ再利用可能な機能を提供することを意味する。反復的な自動化とオーケストレーションによって素早く反復する。

  2. 自動デプロイ
    クラウドネイティブアプローチは、ソフトウェア提供プロセスにおいて、開発環境とは異なる異質な環境を構築するために多大な努力が必要な従来の仮想化指向ビジネスプロセスよりはるかに優れている。一方、クラウドネイティブアーキテクチャは自動化と構成を特徴とし、信頼でき、検証され、監査された既知の良好なプロセスの基盤に依存して、反復的な人間の介入なしに俊敏な提供を実現する。

  3. 独立的で効率的
    クラウドネイティブはマイクロサービスベースのアーキテクチャをもたらす。マイクロサービスは基本的に独立してリリースできるアプリケーションサービスであるため、アップグレード、段階的リリース、独立コンポーネントとしての再利用が可能であり、大規模アプリケーション全体への影響が少ない。入力ポートと出力ポートが決まれば、信頼当事者が十分に発展でき、チーム全体の組織構造もさらに簡素化され、通信コストが低く効率性が高い。

参考