ヒント
このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
別の日、オフィスで「次の大きな事」に取り組んでいます。
携帯電話が鳴ります。 それはあなたのフレンドリーな採用担当者です - エキサイティングな新しい機会で毎日呼び出す人です。
しかし、今回は異なります:スタートアップ、株式、そして多くの資金。
クラウド、マイクロサービス、最先端技術の話題によって、あなたは限界を超えてしまいます。
数週間早送りし、あなたは今、主要なeコマースアプリケーションを設計する設計セッションの新入社員です。 あなたは主要なeコマースサイトと競争するつもりです。
どのように構築しますか?
過去 15 年間のガイダンスに従うと、図 1.1 に示されているシステムを構築する可能性が最も高くなります。
図 1-1 従来のモノリシック設計
すべてのドメイン ロジックを含む大規模なコア アプリケーションを構築します。 これには、ID、カタログ、注文などのモジュールが含まれます。 これらは、1 つのサーバー プロセス内で相互に直接通信します。 モジュールは、大規模なリレーショナル データベースを共有します。 コアは、HTML インターフェイスとモバイル アプリを介して機能を公開します。
おめでとうございます! これでモノリシック アプリケーションの完成です。
すべてが悪いわけではありません。 モノリスには、いくつかの異なる利点があります。 たとえば、以下のことが簡単です。
- 構築
- テスト
- 展開する
- 問題解決 (トラブルシューティング)
- 垂直方向にスケーリングする
今日存在する多くの成功したアプリは、モノリスとして作成されました。 アプリはヒットし、繰り返しのイテレーションを重ねながら、さらなる機能を追加し続けています。
しかし、ある時点で、あなたは不快に感じ始めます。 アプリケーションの制御が失われます。 時間が経つにつれて、感情はより激しくなり、最終的に Fear Cycle
と呼ばれる状態に入ります。
- アプリは圧倒的に複雑になったので、誰もそれを理解していません。
- あなたは変更を行うことを恐れている - 各変更は意図しない、高価な副作用を持っています。
- 新機能/修正は、複雑で時間がかかり、実装にコストがかかります。
- 各リリースは可能な限り小さくなり、アプリケーション全体を完全にデプロイする必要があります。
- 不安定なコンポーネントが 1 つあると、システム全体がクラッシュする可能性があります。
- 新しいテクノロジとフレームワークはオプションではありません。
- アジャイル配信手法を実装することは困難です。
- コード ベースが劣化し、終わりのない "クイック修正" によってアーキテクチャの浸食が始まる。
- 最後に、 コンサルタント が入ってきて、書き直すように指示します。
聞き覚えがありますか?
多くの組織は、システムの構築にクラウドネイティブアプローチを採用することで、このモノリシック恐怖サイクルに対処してきました。 図 1-2 は、クラウドネイティブの手法とプラクティスを適用して構築された同じシステムを示しています。
図 1-2 クラウドネイティブ設計
小規模な分離マイクロサービスのセット全体でアプリケーションがどのように分解されるかに注意してください。 各サービスは自己完結型であり、独自のコード、データ、依存関係をカプセル化します。 それぞれがソフトウェア コンテナーにデプロイされ、コンテナー オーケストレーターによって管理されます。 大規模なリレーショナル データベースの代わりに、各サービスがデータストアを所有します。その種類は、データのニーズに応じて異なります。 一部のサービスはリレーショナル データベースに依存していますが、他のサービスは NoSQL データベースに依存している点に注意してください。 1 つのサービスは、その状態を分散キャッシュに格納します。 すべてのトラフィックが、コア バックエンド サービスにトラフィックをルーティングし、多くの横断的な問題を強制する API ゲートウェイ サービスを経由する方法に注意してください。 最も重要なのは、最新のクラウド プラットフォームで見つかったスケーラビリティ、可用性、回復性の機能を最大限に活用することです。
クラウドネイティブ コンピューティング
んん。。。ここでは、 クラウド ネイティブという用語を使用しました。 あなたは最初に、「それは正確に何を意味するのでしょうか?」と思うかもしれません。ソフトウェアベンダーがより多くの商品を売り込むために作ったもう一つの業界の流行語でしょうか?
幸いなことに、それははるかに異なっており、うまくいけば、この本はあなたを納得させるのに役立ちます。
短期間で、クラウド ネイティブはソフトウェア業界の推進傾向となっています。 これは、大規模で複雑なシステムを構築するための新しい方法です。 このアプローチでは、最新のソフトウェア開発プラクティス、テクノロジ、クラウド インフラストラクチャを最大限に活用します。 クラウド ネイティブは、システムの設計、実装、デプロイ、運用化の方法を変更します。
業界を推進する継続的な誇大宣伝とは異なり、クラウドネイティブは 本物です。 400 を超える大企業のコンソーシアムである Cloud Native Computing Foundation (CNCF) について考えてみましょう。 そのチャーターは、テクノロジとクラウド スタック全体でクラウドネイティブ コンピューティングをユビキタスにすることです。 最も影響力のあるオープンソース グループの 1 つとして、GitHub で最も急速に成長しているオープンソース プロジェクトの多くがホストされています。 これらのプロジェクトには、 Kubernetes、 Prometheus、 Helm、 Envoy、 gRPC が含まれます。
CNCF は、オープンソースとベンダー中立性のエコシステムを促進します。 その後、この本では、テクノロジに依存しないクラウドネイティブの原則、パターン、ベスト プラクティスについて説明します。 同時に、クラウドネイティブ システムを構築するために Microsoft Azure クラウドで利用できるサービスとインフラストラクチャについても説明します。
では、クラウド ネイティブとは何でしょうか。 くつろいで座り、新しい世界を探索するのを私たちがサポートします。
.NET