クラウドネイティブなアプリケーションの概要
ヒント
このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
ある日、オフィスで "次の大きな仕事" に取り組んでいました。
携帯電話が鳴ります。 それは、親しい採用担当者からでした。面白そうな新しい案件について毎日電話を掛けてくる人です。
ただし、今回は違います。スタートアップ、株式、多額の資金提供についてです。
クラウド、マイクロサービス、最先端テクノロジの話を聞いて、あなたはいても立ってもいられなくなりました。
その数週間後、あなたは新入社員になり、大規模な e コマース アプリケーションを設計する設計セッションに参加しています。 大手の e コマース サイトと競合することになります。
どのように構築すればよいでしょうか。
過去 15 年間のガイダンスに従うと、おそらく図 1.1 のようなシステムを構築することになるでしょう。
(図 1-1) 。 従来のモノリシック設計
すべてのドメイン ロジックを含む大規模なコア アプリケーションを構築します。 これには、ID、カタログ、注文などのモジュールが含まれています。 1 つのサーバー プロセス内で相互に直接通信します。 モジュールは、大規模なリレーショナル データベースを共有します。 コアの機能は、HTML インターフェイスとモバイル アプリを介して公開されます。
お疲れさまでした。 これでモノリシック アプリケーションの完成です。
すべてが悪いわけではありません。 モノリスにはいくつかの明確な利点があります。 たとえば、以下のことが簡単です。
- build
- テスト
- 配置 (deploy)
- トラブルシューティング
- 垂直方向にスケーリングする
現存する多くの成功したアプリは、モノリスとして作成されました。 このアプリはヒットし、機能を追加しながら、反復に次ぐ反復で進化し続けています。
ただし、ある時点で違和感を覚えるようになります。 自分がアプリケーションを制御できていないことに気づくのです。 時間が経つにつれ、その感覚はさらに強くなり、最終的には Fear Cycle
と呼ばれる状態になります。
- アプリは非常に複雑になり、誰も理解できません。
- 変更を加えるのが怖くなります。変更するたびに、意図しない、そしてコストのかかる副作用が生じます。
- 新しい機能や修正を実装するのは、厄介で時間がかかり、コストもかかります。
- 各リリースは可能な限り小さくなります。また、アプリケーション全体を配置する必要があります。
- 1 つの不安定なコンポーネントが原因で、システム全体がクラッシュする可能性があります。
- 新しいテクノロジやフレームワークは選択肢に入りません。
- アジャイル配信手法を実装することは困難です。
- 終わりのない "クイック修正" によってコード ベースが劣化すると、アーキテクチャの侵食が始まります。
- 最終的には、"コンサルタント" が登場し、作り直しを命じます。
聞き覚えがありませんか?
多くの企業は、システム構築にクラウドネイティブ アプローチを採用することで、モノリシックの恐怖のサイクルに取り組んでいます。 図 1-2 は、クラウドネイティブのテクノロジと手法を適用して構築した同じシステムを示しています。
図 1-2. クラウドネイティブ設計
このアプリケーションが、孤立した小さな一連のマイクロサービスにどのように分解されているかに注目してください。 各サービスは自己完結型であり、独自のコード、データ、依存関係がカプセル化されています。 それぞれがソフトウェア コンテナーにデプロイされ、コンテナー オーケストレーターによって管理されます。 大規模な 1 つのリレーショナル データベースではなく、各サービスは独自のデータ ストアを所有し、その種類はデータのニーズに応じて異なります。 依存先がリレーショナル データベースのサービスもあれば、NoSQL データベースのものもあります。 分散キャッシュに状態を格納しているサービスもあります。 すべてのトラフィックが API ゲートウェイ サービスを経由していることに注目してください。これには、コア バックエンド サービスへとトラフィックをルーティングし、多くの横断的な懸念事項に対処する役割があります。 最も重要な点は、最新のクラウド プラットフォームに備わっているスケーラビリティ、可用性、回復性の機能をこのアプリケーションから最大限に活用できることです。
クラウドネイティブ コンピューティング
うーん...今、クラウド ネイティブという用語を使いました。 最初に考えることは、"これは何を意味するのか"、"ソフトウェア ベンダーがより多くの製品を販売するために作り出した新しい業界の流行語なのでは" などです。
ただし、それはまったく違います。本書を読んで納得していただければ幸いです。
クラウド ネイティブは、短期間のうちにソフトウェア業界をけん引するトレンドとなりました。 これは、大規模で複雑なシステムを構築する新しい方法です。 このアプローチでは最新のソフトウェア開発の手法、テクノロジ、クラウド インフラストラクチャをフル活用します。 クラウド ネイティブにより、システムの設計、実装、配置、運用の方法が変わります。
クラウド ネイティブは、業界をけん引する継続的な誇大広告ではなく、"現実的なもの" です。 Cloud Native Computing Foundation (CNCF) は、400 社を超える主要企業から構成されるコンソーシアムです。 その目的は、テクノロジとクラウド スタック全体でクラウドネイティブ コンピューティングをユビキタスにすることです。 最も影響力のあるオープンソース グループの 1 つであり、GitHub で最も急成長しているオープンソース プロジェクトの多くをホストしています。 このプロジェクトには、Kubernetes、Prometheus、Helm、Envoy、gRPC が含まれています。
CNCF は、オープンソースとベンダー中立のエコシステムを促進しています。 本書はそれに従い、テクノロジにとらわれないクラウドネイティブの原則、パターン、ベスト プラクティスを提示します。 同時に、クラウドネイティブ システムを構築するために、Microsoft Azure クラウドで使用できるサービスやインフラストラクチャについても説明します。
さて、クラウド ネイティブとは一体何でしょうか。 ゆったりくつろいでいてください。この新しい世界の探索をお手伝いします。
.NET