クラウドネイティブとは何ですか?ソフトウェアを開発するための現代的な方法

「クラウドネイティブ」という用語は、特にクラウドプロバイダーによって頻繁に使用されます。それだけでなく、独自の基盤もあります。それは、LinuxFoundationによって2015年に立ち上げられたCloudNative Computing Foundation(CNCF)です。

「クラウドネイティブ」の定義

一般的な使用法では、「クラウドネイティブ」は、クラウドコンピューティング配信モデルの利点を活用するアプリケーションを構築および実行するためのアプローチです。「クラウドネイティブ」とは、アプリケーションの作成方法と展開方法であり、場所ではありません。これは、アプリがオンプレミスのデータセンターではなく、パブリッククラウドに存在することを意味します。

CNCFは、「クラウドネイティブ」をもう少し狭く定義します。つまり、オープンソースソフトウェアスタックを使用してコンテナー化することを意味します。アプリの各部分は独自のコンテナーにパッケージ化され、動的に調整されるため、各部分はアクティブにスケジュールされ、リソースを最適化するように管理されます。使用率、およびアプリケーションの全体的な俊敏性と保守性を向上させるためのマイクロサービス指向。

「クラウドネイティブアプリは、最新のクラウドコンピューティングプラットフォームに必要な弾力性のある分散型の性質で実行するように特別に設計されています」と、コンサルティング会社DeloitteのマネージングディレクターであるMikeKavis氏は述べています。 「これらのアプリは疎結合です。つまり、コードはインフラストラクチャコンポーネントにハードワイヤードされていないため、アプリはオンデマンドでスケールアップおよびスケールダウンでき、不変のインフラストラクチャの概念を採用できます。通常、これらのアーキテクチャはマイクロサービスを使用して構築されますが、これは必須の要件ではありません。」

クラウドネイティブアプリケーションの場合、大きな違いは、実際にはアプリケーションの構築、配信、運用の方法です、とクラウドサービスプロバイダーであるSplunkの最高技術責任者であるAndiMannは言います。「クラウドサービスを活用するということは、コンテナなどのアジャイルでスケーラブルなコンポーネントを使用して、マルチクラウドなどのテクノロジーの境界を越えても、明確に統合された個別の再利用可能な機能を提供することを意味します。これにより、配信チームは繰り返し可能な自動化とオーケストレーションを使用して迅速に反復できます。」

クラウドネイティブのアプリ開発には、通常、DevOps、アジャイル手法、マイクロサービス、クラウドプラットフォーム、KubernetesやDockerなどのコンテナー、継続的デリバリーが含まれます。つまり、すべての新しい最新のアプリケーションデプロイ方法です。

このため、PaaS(Platform-as-a-Service)モデルが本当に必要です。PaaSは必須ではありませんが、作業がはるかに簡単になります。クラウドの顧客の大多数は、基盤となるハードウェアからアプリを抽象化するのに役立つサービスとしてのインフラストラクチャ(IaaS)から始めます。ただし、PaaSは、基盤となるOSを抽象化するための追加のレイヤーを追加するため、OS呼び出しを行うことを心配せずに、アプリのビジネスロジックに完全に集中できます。

関連ビデオ:クラウドネイティブアプローチとは何ですか?

この60秒のビデオでは、Heptioの創設者兼CEOであり、オープンソースのKubernetesの発明者の1人であるCraig McLuckieから、クラウドネイティブアプローチが企業のテクノロジー構造をどのように変えているかを学びます。

クラウドネイティブアプリケーションとオンプレミスアプリケーションの違い

クラウドネイティブのアプリケーション開発には、従来のエンタープライズアプリケーションとは非常に異なるアーキテクチャが必要です。

言語

会社のサーバーで実行するように作成されたオンプレミスアプリは、C / C ++、C#、またはWindowsServerプラットフォームに展開されている場合は別のVisualStudio言語、エンタープライズJavaなどの従来の言語で作成される傾向があります。また、メインフレーム上にある場合は、Cobolにある可能性があります。

クラウドネイティブアプリは、HTML、CSS、Java、JavaScript、.Net、Go、Node.js、PHP、Python、Rubyを意味するWeb中心の言語で記述される可能性が高くなります。

更新可能性

クラウドネイティブアプリは常に最新で最新です。クラウドネイティブアプリはいつでも利用できます。

オンプレミスアプリは更新が必要であり、通常はベンダーによってサブスクリプションベースで配信され、更新のインストール中にダウンタイムが必要になります。

弾性

クラウドネイティブアプリは、使用量の急増時に増加したリソースを使用することで、クラウドの弾力性を利用します。クラウドベースのeコマースアプリの使用が急増した場合は、急増が収まるまで追加のコンピューティングリソースを使用するように設定してから、それらのリソースをオフにすることができます。クラウドネイティブアプリは、増加したリソースに適応し、必要に応じて拡張できます。

オンプレミスアプリは動的に拡張できません。

マルチテナンシー

クラウドネイティブアプリは、仮想化された空間での作業や他のアプリとのリソースの共有に問題はありません。

多くのオンプレミスアプリは、仮想環境ではうまく機能しないか、まったく機能せず、仮想化されていないスペースを必要とします。

接続されたリソース

オンプレミスアプリは、ネットワーク、セキュリティ、権限、ストレージなどのネットワークリソースへの接続がかなり厳格です。これらのリソースの多くはハードコーディングする必要があり、何かを移動または変更すると壊れます。

「ネットワークとストレージはクラウドでは完全に異なります。「リプラットフォーム」という用語を聞くと、これは通常、ネットワーク、ストレージ、さらにはデータベーステクノロジーの変更に対応して、アプリをクラウドで実行できるようにするための作業です」とデロイトのKavis氏は述べています。

ダウンタイム

クラウドにはオンプレミスよりも冗長性が高いため、クラウドプロバイダーが停止した場合、別のリージョンがその余裕を取り戻すことができます。

オンプレミスアプリではフェイルオーバーの準備ができている可能性がありますが、サーバーがダウンすると、アプリも一緒にダウンする可能性があります。

オートメーション

クラウドの大部分は自動化されており、これにはアプリの管理が含まれます。「クラウドネイティブ配信のメリット、特に速度と俊敏性は、手動による介入ではなく、自動化ツールとオーケストレーションツールによって必要に応じて繰り返し実行される、信頼性が高く、実績があり、監査された既知の良好なプロセスの基盤に大きく依存しています」とSplunkは述べています。マン。エンジニアは、再現性、セルフサービス、俊敏性、スケーラビリティ、および監査と制御を可能にするために、事実上すべてを複数回自動化することを検討する必要があります。

オンプレミスアプリは手動で管理する必要があります。

モジュール設計

オンプレミスアプリは、設計がモノリシックになる傾向があります。確かに、いくつかの作業をライブラリにオフロードしますが、最終的には、多数のサブルーチンを備えた1つの大きなアプリになります。クラウドネイティブアプリははるかにモジュール化されており、多くの機能がマイクロサービスに分割されています。これにより、不要なときにシャットオフし、アプリ全体ではなく、その1つのモジュールに更新をロールアウトできます。

無国籍

クラウドの疎結合の性質は、アプリがインフラストラクチャに関連付けられていないことを意味します。つまり、アプリはステートレスです。クラウドネイティブアプリは、その状態をデータベースまたはその他の外部エンティティに保存するため、インスタンスが出入りしても、アプリは作業単位のどこにアプリケーションがあるかを追跡できます。「これが疎結合の本質です。インフラストラクチャに縛られていないため、アプリは高度に分散された方法で実行され、基盤となるインフラストラクチャの弾力性に関係なくその状態を維持できます」とKavis氏は言います。

ほとんどのオンプレミスアプリはステートフルです。つまり、コードが実行されているインフラストラクチャにアプリの状態を保存します。このため、サーバーリソースを追加すると、アプリが破損する可能性があります。

クラウドネイティブコンピューティングの課題

マン氏によると、顧客が犯す大きな間違いの1つは、古いオンプレミスアプリを持ち上げてクラウドに移行しようとすることです。「既存のアプリケーション、特にモノリシックなレガシーアプリケーションを利用して、それらをクラウドインフラストラクチャに移動しようとしても、基本的なクラウドネイティブ機能を利用できません。」

代わりに、新しいクラウドネイティブアプリケーションを新しいクラウドインフラストラクチャに配置するか、既存のモノリスを分割してクラウドネイティブの原則を使用してゼロからリファクタリングすることにより、新しい方法で新しいことを行うことを検討する必要があります。

また、古い開発者の方法を省く必要があります。ウォーターフォールモデルは確かに機能せず、アジャイル開発でさえ十分ではないかもしれません。そのため、Minimum Viable Product(MVP)開発、多変量テスト、迅速な反復、devopsモデルの組織の境界を越えた緊密な連携などの新しいクラウドネイティブアプローチを採用する必要があります。

インフラストラクチャサービス、自動化/オーケストレーション、仮想化とコンテナ化、マイクロサービスアーキテクチャ、可観測性など、クラウドネイティブであることには多くの側面があります。これらはすべて、物事を行うための新しい方法を意味します。つまり、新しい方法を学ぶときに古い習慣を打ち破ることを意味します。だから、測定されたペースでそれを行います。

関連するクラウドネイティブテクノロジーの詳細

  • Platform-as-a-Service(PaaS)の説明
  • マルチクラウドの説明
  • アジャイル手法の説明
  • アジャイル開発のベストプラクティス
  • Devopsは説明しました
  • Devopsのベストプラクティス
  • マイクロサービスの説明
  • マイクロサービスチュートリアル
  • DockerとLinuxコンテナの説明
  • Kubernetesチュートリアル
  • CI / CD(継続的インテグレーションと継続的デリバリー)の説明
  • CI / CDのベストプラクティス