クラりド ネむティブずは

ヒント

このコンテンツは、Azure 甚のクラりド ネむティブ .NET アプリケヌションの蚭蚈に関する電子ブックからの抜粋であり、.NET Docs たたはオフラむンで読み取るこずができる無料のダりンロヌド可胜な PDF ずしお入手できたす。

Azure eBook 甚の Cloud Native .NET アプリの衚玙サムネむル。

䜜業を停止し、同僚に "Cloud Native" ずいう甚語を定矩するよう䟝頌したす。 耇数の異なる回答が埗られる可胜性は十分にありたす。

単玔な定矩から始めたしょう。

クラりドネむティブのアヌキテクチャずテクノロゞは、クラりドに構築され、クラりド コンピュヌティング モデルを最倧限に掻甚するワヌクロヌドを蚭蚈、構築、運甚するためのアプロヌチです。

Cloud Native Computing Foundation には、公匏の定矩が甚意されおいたす。

クラりドネむティブ テクノロゞにより、組織は、パブリック、プラむベヌト、ハむブリッド クラりドなどの最新の動的環境でスケヌラブルなアプリケヌションを構築しお実行できたす。 コンテナヌ、サヌビス メッシュ、マむクロサヌビス、䞍倉むンフラストラクチャ、宣蚀型 API は、このアプロヌチを䟋瀺したす。

これらの手法により、回埩性、管理性、監芖性に優れた疎結合システムが可胜になりたす。 堅牢な自動化ず組み合わせるこずで、゚ンゞニアは最小限の手間で頻繁か぀予枬可胜に圱響の倧きい倉曎を行うこずができたす。

クラりド ネむティブは 、速床 ず 機敏性に関する情報です。 ビゞネス システムは、ビゞネス機胜の有効化から、ビゞネスの速床ず成長を加速させる戊略的倉革の歊噚ぞず進化しおいたす。 新しいアむデアをすぐに垂堎に投入するこずが䞍可欠です。

同時に、ビゞネス システムもたすたす耇雑になり、ナヌザヌはより倚くを芁求しおいたす。 迅速な応答性、革新的な機胜、ダりンタむムれロが期埅されたす。 パフォヌマンスの問題、繰り返し発生する゚ラヌ、高速に移動できない問題は蚱容されなくなりたした。 ナヌザヌは競合他瀟を蚪問したす。 クラりドネむティブ システムは、急速な倉化、倧芏暡、回埩性を受け入れるように蚭蚈されおいたす。

クラりドネむティブ手法を実装した䌁業をいく぀か玹介したす。 達成した速床、機敏性、スケヌラビリティに぀いお考えおください。

[䌚瀟] ゚クスペリ゚ンス
Netflix 運甚環境には 600 以䞊のサヌビスがありたす。 1 日あたり 100 回デプロむしたす。
Uber サヌビスが運甚䞭のものだけでも 1,000 を超えおいたす。 毎週数千回デプロむしたす。
りィヌチャット 3,000 を超えるサヌビスを運甚環境で提䟛しおいたす。 1 日に 1,000 回デプロむしたす。

ご芧のように、Netflix、Uber、WeChat では、倚数の独立したサヌビスで構成されるクラりドネむティブ システムが公開されおいたす。 このアヌキテクチャ スタむルにより、垂堎の状況に迅速に察応できたす。 完党に再デプロむするこずなく、ラむブで耇雑なアプリケヌションの小さな領域を瞬時に曎新したす。 必芁に応じおサヌビスを個別にスケヌリングしたす。

クラりド ネむティブの柱

クラりド ネむティブの速床ず機敏性は、倚くの芁因から生たれおいたす。 最も重芁なのは 、クラりド むンフラストラクチャです。 ただし、他にも、図 1-3 に瀺す 5 ぀の基本的な柱が、クラりドネむティブ システムの基盀ずなりたす。

クラりドネむティブの基本的な柱

図 1-3 クラりドネむティブの基本的な柱

各柱の重芁性をより深く理解するために少し時間を取りたしょう。

クラりド

クラりドネむティブ システムは、クラりド サヌビス モデルを最倧限に掻甚したす。

動的で仮想化されたクラりド環境で成功するように蚭蚈されたこれらのシステムは、 サヌビスずしおのプラットフォヌム (PaaS) コンピュヌティング むンフラストラクチャずマネヌゞド サヌビスを幅広く䜿甚したす。 基になるむンフラストラクチャは、自動化によっお、分単䜍でプロビゞョニングされ、必芁に応じおサむズ倉曎、スケヌリング、たたは砎棄される 砎棄可胜 なむンフラストラクチャずしお扱われたす。

ペットず商品の扱い方の違いを考えおみたしょう。 埓来のデヌタセンタヌでは、サヌバヌはペットのように扱われたす。物理的な機噚には意味のある名前が䞎えられ、䞁寧に管理されたす。 スケヌリングするには、同じマシンにリ゜ヌスを远加したす (スケヌルアップ)。 サヌバヌが病気になった堎合は、正垞性に戻したす。 サヌバヌが䜿甚できなくなった堎合は、党員が気付きたす。

コモディティ サヌビス モデルは異なりたす。 各むンスタンスは、仮想マシンたたはコンテナヌずしおプロビゞョニングしたす。 これらは同䞀であり、Service-01、Service-02 などのシステム識別子が割り圓おられたす。 より倚くのむンスタンスを䜜成しおスケヌリングしたす (スケヌルアりト)。 むンスタンスが䜿甚できなくなったずき、誰も気付かない。

コモディティ モデルには、䞍倉のむンフラストラクチャが採甚されおいたす。 サヌバヌは修埩たたは倉曎されたせん。 倱敗した堎合、たたは曎新が必芁な堎合は砎棄され、新しいものがプロビゞョニングされたす。すべお自動化によっお行われたす。

クラりドネむティブ システムでは、コモディティ サヌビス モデルが採甚されおいたす。 実行を続ける際に、むンフラストラクチャはスケヌルむンたたはスケヌルアりトしたすが、どのマシンで実行しおいるかは関係ありたせん。

Azure クラりド プラットフォヌムでは、自動スケヌリング、自己埩旧、監芖機胜を備えた、この皮の非垞に柔軟なむンフラストラクチャがサポヌトされおいたす。

モダン デザむン

クラりドネむティブ アプリをどのように蚭蚈したすか? アヌキテクチャはどのようなものですか? どのような原則、パタヌン、ベスト プラクティスに埓いたすか? どのようなむンフラストラクチャず運甚䞊の懞念事項が重芁でしょうか。

Twelve-Factor アプリケヌション

クラりドベヌスのアプリケヌションを構築するための広く受け入れられおいう手法は 、Twelve-Factor アプリケヌションです。 最新のクラりド環境向けに最適化されたアプリケヌションを構築するために開発者が埓う䞀連の原則ずプラクティスに぀いお説明したす。 環境党䜓の移怍性ず宣蚀型の自動化には特に泚意が必芁です。

Web ベヌスのアプリケヌションに適甚できる䞀方で、倚くの実務家 Twelve-Factor クラりド ネむティブ アプリを構築するための匷固な基盀であるず考えたす。 これらの原則に基づいお構築されたシステムは、迅速にデプロむおよびスケヌリングでき、垂堎の倉化に迅速に察応する機胜を远加できたす。

次の衚は、Twelve-Factor 手法を瀺しおいたす。

芁因 説明
1 - コヌド ベヌス マむクロサヌビスごずに 1 ぀のコヌド ベヌス。独自のリポゞトリに栌玍されたす。 バヌゞョン管理によっお远跡され、耇数の環境 (QA、ステヌゞング、運甚) にデプロむできたす。
2 - 䟝存関係 各マむクロサヌビスは独自の䟝存関係を分離しおパッケヌゞ化し、システム党䜓に圱響を䞎えずに倉曎を反映したす。
3 - 構成 構成情報はマむクロサヌビスから移動され、コヌドの倖郚にある構成管理ツヌルを䜿甚しお倖郚化されたす。 同じデプロむは、正しい構成が適甚された環境間で䌝達できたす。
バック゚ンド サヌビス 補助リ゜ヌス (デヌタ ストア、キャッシュ、メッセヌゞ ブロヌカヌ) は、アドレス指定可胜な URL を介しお公開する必芁がありたす。 これにより、リ゜ヌスがアプリケヌションから切り離され、亀換可胜になりたす。
5 - ビルド、リリヌス、実行 各リリヌスでは、ビルド、リリヌス、および実行の各ステヌゞで厳密な分離を適甚する必芁がありたす。 それぞれに䞀意の ID でタグ付けし、ロヌルバック機胜をサポヌトする必芁がありたす。 最新の CI/CD システムは、この原則を満たすのに圹立ちたす。
6 - プロセス 各マむクロサヌビスは、他の実行䞭のサヌビスから分離された独自のプロセスで実行する必芁がありたす。 必芁な状態を、分散キャッシュやデヌタ ストアなどのバッキング サヌビスに倖郚化したす。
7 - ポヌトのバむンド 各マむクロサヌビスは、独自のポヌトで公開されるむンタヌフェむスず機胜を備えた自己完結型にする必芁がありたす。 これにより、他のマむクロサヌビスからの分離が提䟛されたす。
8 - コンカレンシヌ 容量を増やす必芁がある堎合は、利甚可胜な最も匷力なマシン䞊の単䞀の倧芏暡なむンスタンスをスケヌルアップするのではなく、耇数の同䞀プロセス (コピヌ) にわたっおサヌビスを氎平方向にスケヌルアりトしたす。 クラりド環境でのスケヌルアりトをシヌムレスに同時に行えるようにアプリケヌションを開発したす。
9 - 砎棄可胜性 サヌビス むンスタンスは砎棄可胜である必芁がありたす。 高速スタヌトアップを優先しおスケヌラビリティの機䌚を増やし、正垞なシャットダりンを行っおシステムを正しい状態のたたにしたす。 Docker コンテナヌずオヌケストレヌタヌは、本質的にこの芁件を満たしおいる。
10 - 開発/運甚のパリティ アプリケヌションのラむフサむクル党䜓にわたっお環境を可胜な限り同様に保ち、コストのかかるショヌトカットを回避したす。 ここでは、コンテナヌの導入は、同じ実行環境を促進するこずによっお倧きく貢献できたす。
11 - ログ蚘録 マむクロサヌビスによっお生成されたログをむベント ストリヌムずしお扱いたす。 むベント アグリゲヌタヌを䜿甚しお凊理したす。 ログ デヌタを Azure Monitor や Splunk などのデヌタ マむニング/ログ管理ツヌルに䌝達し、最終的には長期的なアヌカむブに反映したす。
12 - 管理プロセス 1 回限りのプロセスずしお、デヌタのクリヌンアップやコンピュヌティング分析などの管理/管理タスクを実行したす。 独立したツヌルを䜿甚しお、運甚環境からこれらのタスクを呌び出したすが、アプリケヌションずは別に呌び出したす。

本では、 Twelve-Factor アプリを超えお、著者ケビン・ホフマンは、元の12の芁因(2011幎に曞かれた)のそれぞれに぀いお詳しく説明しおいたす。 さらに、今日の最新のクラりド アプリケヌション蚭蚈を反映する 3 ぀の远加芁因に぀いお説明したす。

新しい芁玠 説明
13 - API First すべおをサヌビスにしたす。 コヌドがフロント゚ンド クラむアント、ゲヌトりェむ、たたは別のサヌビスによっお䜿甚されるずしたす。
14 - テレメトリ ワヌクステヌションでは、アプリケヌションずその動䜜を詳现に把握できたす。 クラりドでは、そのようなこずはしたせん。 蚭蚈に、監芖、ドメむン固有、および正垞性/システム デヌタのコレクションが含たれおいるこずを確認したす。
15 - 認蚌/承認 最初から ID を実装したす。 パブリック クラりドで䜿甚できる RBAC (ロヌルベヌスのアクセス制埡) 機胜を怜蚎しおください。

この章ず本党䜓で、12 以䞊の芁因の倚くを参照したす。

Azure Well-Architected Frameworkアゞュヌル りェルアヌキテクテッド フレヌムワヌク

クラりドベヌスのワヌクロヌドの蚭蚈ずデプロむは、特にクラりドネむティブ アヌキテクチャを実装する堎合に困難な堎合がありたす。 Microsoft では、お客様ずチヌムが堅牢なクラりド ゜リュヌションを提䟛するのに圹立぀業界暙準のベスト プラクティスを提䟛しおいたす。

Microsoft Well-Architected Framework には、クラりドネむティブ ワヌクロヌドの品質を向䞊させるために䜿甚できる䞀連のガむドテネットが甚意されおいたす。 フレヌムワヌクは、アヌキテクチャの卓越性の 5 ぀の柱で構成されおいたす。

基本理念 説明
コスト管理 増分倀を早期に生成するこずに重点を眮く。 Build-Measure-Learn の原則を適甚しお、資本集玄型゜リュヌションを回避しながら垂堎投入たでの時間を短瞮したす。 埓量課金戊略を採甚し、事前に倚額の投資を行うのではなく、埐々に拡匵するに぀れお投資したす。
オペレヌショナル ゚クセレンス 環境ず運甚を自動化しお速床を䞊げ、人為的ミスを枛らしたす。 問題のアップデヌトを迅速にロヌルバックたたは前進させたす。 最初から監芖ず蚺断を実装したす。
パフォヌマンス効率 ワヌクロヌドに察する芁求を効率的に満たしたす。 氎平スケヌリング (スケヌルアりト) を優先し、システムに蚭蚈したす。 朜圚的なボトルネックを特定するために、パフォヌマンスずロヌド テストを継続的に実斜したす。
確実 回埩性ず䜿甚可胜な䞡方のワヌクロヌドを構築したす。 回埩性により、ワヌクロヌドは障害から埩旧し、機胜を継続できたす。 可甚性により、ナヌザヌは垞にワヌクロヌドにアクセスできたす。 障害を想定しお埩旧するようにアプリケヌションを蚭蚈したす。
セキュリティ 蚭蚈ず実装からデプロむず運甚たで、アプリケヌションのラむフサむクル党䜓にわたっおセキュリティを実装したす。 ID 管理、むンフラストラクチャ アクセス、アプリケヌション セキュリティ、デヌタ䞻暩ず暗号化に现心の泚意を払いたす。

たず、Microsoft では、適切に蚭蚈された 5 ぀の柱に察しお珟圚のクラりド ワヌクロヌドを評䟡するのに圹立぀䞀連の オンラむン評䟡 を提䟛しおいたす。

マむクロサヌビス

クラりドネむティブ システムには、最新のアプリケヌションを構築するための䞀般的なアヌキテクチャ スタむルであるマむクロサヌビスが採甚されおいたす。

共有ファブリックを介しお察話する小芏暡で独立したサヌビスの分散セットずしお構築されたマむクロサヌビスは、次の特性を共有したす。

  • それぞれが、より倧きなドメむン コンテキスト内に特定のビゞネス機胜を実装したす。

  • それぞれが自埋的に開発され、個別にデプロむできたす。

  • それぞれが、独自のデヌタ ストレヌゞ テクノロゞ、䟝存関係、プログラミング プラットフォヌムをカプセル化する自己完結型です。

  • それぞれが独自のプロセスで実行され、HTTP/HTTPS、gRPC、WebSocket、 AMQP などの暙準の通信プロトコルを䜿甚しお他のナヌザヌず通信したす。

  • これらは䞀緒に構成され、アプリケヌションを圢成したす。

図 1-4 は、モノリシック アプリケヌションアプロヌチずマむクロサヌビス アプロヌチを比范しおいたす。 モノリスが、1 ぀のプロセスで実行される階局型アヌキテクチャでどのように構成されおいるかに泚意しおください。 通垞、リレヌショナル デヌタベヌスが䜿甚されたす。 ただし、マむクロサヌビスアプロヌチでは、独自のロゞック、状態、デヌタを持぀独立したサヌビスに機胜を分離したす。 各マむクロサヌビスは、独自のデヌタストアをホストしたす。

モノリシックデプロむずマむクロサヌビス

図 1-4. モノリシックアヌキテクチャずマむクロサヌビスアヌキテクチャ

マむクロサヌビスが、前の章で説明した Twelve-Factor アプリケヌションからプロセスの原則を昇栌させる方法に泚意しおください。

Factor #6 では、"各マむクロサヌビスは、他の実行䞭のサヌビスから分離された独自のプロセスで実行する必芁がありたす" ず指定されおいたす。

マむクロサヌビスの理由

マむクロサヌビスは機敏性を提䟛したす。

この章の前半では、モノリスずしお構築された e コマヌス アプリケヌションをマむクロサヌビスず比范したした。 この䟋では、いく぀かの明確な利点を確認したした。

  • 各マむクロサヌビスには自埋的なラむフサむクルがあり、個別に進化し、頻繁にデプロむできたす。 新しい機胜や曎新プログラムをデプロむするために、四半期ごずのリリヌスを埅぀必芁はありたせん。 システム党䜓を䞭断するリスクが䜎い、ラむブ アプリケヌションの小さな領域を曎新できたす。 曎新は、アプリケヌションを完党に再デプロむするこずなく行うこずができたす。

  • 各マむクロサヌビスは個別にスケヌリングできたす。 アプリケヌション党䜓を 1 ぀のナニットずしおスケヌリングする代わりに、必芁なパフォヌマンス レベルずサヌビス レベルアグリヌメントを満たすためにより倚くの凊理胜力を必芁ずするサヌビスのみをスケヌルアりトしたす。 きめ现かいスケヌリングにより、システムをより现かく制埡でき、システムの䞀郚をスケヌリングする際に党䜓的なコストを削枛するのに圹立ちたす。すべおではありたせん。

マむクロサヌビスを理解するための優れたリファレンス ガむドは 、.NET マむクロサヌビス: コンテナヌ化された .NET アプリケヌションのアヌキテクチャです。 本曞では、マむクロサヌビスの蚭蚈ずアヌキテクチャに぀いお詳しく説明したす。 これは、Microsoft から無料でダりンロヌドできる フル スタックマむクロサヌビス参照アヌキテクチャ のコンパニオンです。

マむクロサヌビスの開発

マむクロサヌビスは、最新の開発プラットフォヌムで䜜成できたす。

Microsoft .NET プラットフォヌムは優れた遞択肢です。 無料でオヌプン ゜ヌスであり、マむクロサヌビス開発を簡略化する倚くの組み蟌み機胜がありたす。 .NET はクロスプラットフォヌムです。 アプリケヌションは、Windows、macOS、およびほずんどの皮類の Linux でビルドしお実行できたす。

.NET はパフォヌマンスが高く、Node.js やその他の競合プラットフォヌムず比范しお優れたスコアを獲埗しおいたす。 興味深いこずに、 TechEmpower は、倚くの Web アプリケヌション プラットフォヌムずフレヌムワヌクにわたっお広範な パフォヌマンス ベンチマヌク を実斜したした。 .NET は䞊䜍 10 でスコアを付け、Node.js やその他の競合プラットフォヌムを倧きく䞊回っおいたす。

.NET は、Microsoft ず GitHub の .NET コミュニティによっお管理されおいたす。

マむクロサヌビスの課題

分散クラりドネむティブマむクロサヌビスは、非垞に機敏性ずスピヌドを提䟛できたすが、倚くの課題がありたす。

通信

フロント゚ンド クラむアント アプリケヌションは、バック゚ンド コア マむクロサヌビスずどのように通信したすか? 盎接通信を蚱可したすか? たたは、柔軟性、制埡、およびセキュリティを提䟛するゲヌトりェむ ファサヌドを䜿甚しおバック゚ンド マむクロサヌビスを抜象化できたすか?

バック゚ンド コア マむクロサヌビスは、どのように盞互に通信したすか? 結合を向䞊させ、パフォヌマンスず機敏性に圱響を䞎える可胜性のある盎接 HTTP 呌び出しを蚱可したすか? たたは、キュヌやトピックを利甚した非同期メッセヌゞングを怜蚎するこずもありたすか。

通信に぀いおは、 クラりドネむティブの通信パタヌンの章で説明したす 。

回埩性

マむクロサヌビス アヌキテクチャは、システムをむンプロセスからアりトプロセス ネットワヌク通信に移行したす。 分散アヌキテクチャでは、サヌビス B がサヌビス A からのネットワヌク呌び出しに応答しおいない堎合はどうなりたすか。 たたは、サヌビス C が䞀時的に䜿甚できなくなり、それを呌び出す他のサヌビスがブロックされた堎合はどうなりたすか?

回埩性に぀いおは、 クラりドネむティブの回埩性に関 する章で説明されおいたす。

分散デヌタ

蚭蚈䞊、各マむクロサヌビスは独自のデヌタをカプセル化し、そのパブリック むンタヌフェむスを介しお操䜜を公開したす。 その堎合、耇数のサヌビス間でデヌタのク゚リを実行したり、トランザクションを実装したりするにはどうすればよいですか?

分散デヌタに぀いおは、「 クラりドネむティブ デヌタ パタヌン」の章で説明したす 。

シヌクレット

マむクロサヌビスでは、シヌクレットず機密性の高い構成デヌタを安党に栌玍しお管理する方法を説明したす。

シヌクレットに぀いおは、 クラりドネむティブのセキュリティに぀いお詳しく説明したす。

Dapr を䜿甚しお耇雑さを管理する

Dapr は、分散型のオヌプン ゜ヌス アプリケヌション ランタむムです。 プラグ可胜なコンポヌネントのアヌキテクチャにより、分散アプリケヌションの背埌にある 配管が 倧幅に簡玠化されたす。 これは、Dapr ランタむムの事前構築枈みのむンフラストラクチャ機胜ずコンポヌネントを䜿甚しおアプリケヌションをバむンドする 動的接着 を提䟛したす。 図 1-5 は、20,000 フィヌトからの Dapr を瀺しおいたす。

20,000 フィヌトの高さから芋る Dapr図 1-5。 2 䞇フィヌトからの Dapr。

図の䞀番䞊の行で、Dapr が䞀般的な開発プラットフォヌムに 蚀語固有の SDK を 提䟛する方法に泚意しおください。 Dapr v1 には、.NET、Go、Node.js、Python、PHP、Java、JavaScript のサポヌトが含たれおいたす。

蚀語固有の SDK は開発者゚クスペリ゚ンスを向䞊させたすが、Dapr はプラットフォヌムに䟝存したせん。 内郚的には、Dapr のプログラミング モデルでは、暙準の HTTP/gRPC 通信プロトコルを介しお機胜が公開されおいたす。 どのプログラミング プラットフォヌムでも、ネむティブの HTTP API ず gRPC API を介しお Dapr を呌び出すこずができたす。

図の䞭倮の青いボックスは、Dapr の構成芁玠を衚しおいたす。 それぞれにより、アプリケヌションで䜿甚できる分散アプリケヌション機胜に事前構築された仕組みコヌドが公開されたす。

コンポヌネント行は、アプリケヌションで䜿甚できる定矩枈みのむンフラストラクチャ コンポヌネントの倧芏暡なセットを衚したす。 コンポヌネントは、蚘述する必芁のないむンフラストラクチャ コヌドず考えおください。

䞋の行では、Dapr の移怍性ず、実行できる倚様な環境が匷調衚瀺されおいたす。

今埌、Dapr はクラりドネむティブのアプリケヌション開発に倧きな圱響を䞎える可胜性がありたす。

Containers

クラりドネむティブな䌚話でコンテナヌずいう甚語を聞くのは自然です。 本の䞭で、 クラりドネむティブパタヌン、著者コヌネリア・デむビスは、「コンテナヌはクラりドネむティブ゜フトりェアの偉倧な実珟者です」ず芳察しおいたす。Cloud Native Computing Foundation は、マむクロサヌビスコンテナヌ化を、クラりドネむティブの䜓隓を開始する䌁業向けの ガむダンスであるCloud-Native Trail Map の最初のステップずしお配眮したす。

マむクロサヌビスのコンテナヌ化は単玔で簡単です。 コヌド、その䟝存関係、ランタむムは、 コンテナヌ むメヌゞず呌ばれるバむナリにパッケヌゞ化されたす。 むメヌゞは、むメヌゞのリポゞトリたたはラむブラリずしお機胜するコンテナヌ レゞストリに栌玍されたす。 レゞストリは、開発甚コンピュヌタヌ、デヌタ センタヌ、たたはパブリック クラりドに配眮できたす。 Docker 自䜓は、 Docker Hub を介しおパブリック レゞストリを維持したす。 Azure クラりドには、コンテナヌ むメヌゞを実行するクラりド アプリケヌションの近くに栌玍するプラむベヌト コンテナヌ レゞストリ が甚意されおいたす。

アプリケヌションの起動時たたはスケヌリング時に、コンテナヌ むメヌゞを実行䞭のコンテナヌ むンスタンスに倉換したす。 むンスタンスは、 コンテナヌ ランタむム ゚ンゞンがむンストヌルされおいる任意のコンピュヌタヌで実行されたす。 コンテナヌ化されたサヌビスのむンスタンスは、必芁に応じおいく぀でも䜜成できたす。

図 1-6 は、それぞれ独自のコンテナヌ内の 3 ぀の異なるマむクロサヌビスを瀺しおいたす。これらはすべお 1 ぀のホストで実行されおいたす。

コンテナヌ ホストで実行されおいる耇数のコンテナヌ

図 1-6 コンテナヌ ホストで実行されおいる耇数のコンテナヌ

各コンテナヌが䟝存関係ずランタむムの独自のセットを維持する方法に泚意しおください。これは互いに異なる堎合がありたす。 ここでは、同じホストで実行されおいる補品マむクロサヌビスのさたざたなバヌゞョンが衚瀺されたす。 各コンテナヌは、基になるホスト オペレヌティング システム、メモリ、プロセッサのスラむスを共有したすが、互いに分離されたす。

コンテナヌ モデルが、Twelve-Factor アプリケヌションからの䟝存関係の原則をどの皋床採甚しおいるかに泚意しおください。

Factor #2 では、"各マむクロサヌビスは独自の䟝存関係を分離しおパッケヌゞ化し、システム党䜓に圱響を䞎えずに倉曎を受け入れる" こずを指定したす。

コンテナヌでは、Linux ワヌクロヌドず Windows ワヌクロヌドの䞡方がサポヌトされたす。 Azure クラりドでは、䞡方をオヌプンに受け入れたす。 興味深いこずに、Azure でより䞀般的なオペレヌティング システムずなっおいるのは、Windows Server ではなく Linux です。

耇数のコンテナヌ ベンダヌが存圚する䞀方で、 Docker は垂堎のラむオンのシェアを獲埗しおいたす。 同瀟は、゜フトりェアコンテナヌの動きを掚進しおきたした。 これは、クラりドネむティブ アプリケヌションのパッケヌゞ化、デプロむ、実行の事実䞊の暙準ずなっおいたす。

コンテナヌの理由

コンテナヌは移怍性を提䟛し、環境間の䞀貫性を保蚌したす。 すべおを 1 ぀のパッケヌゞにカプセル化するこずで、マむクロサヌビスずその䟝存関係を基になるむンフラストラクチャから 分離 したす。

コンテナヌは、Docker ランタむム ゚ンゞンをホストする任意の環境にデプロむできたす。 コンテナヌ化されたワヌクロヌドでは、フレヌムワヌク、゜フトりェア ラむブラリ、ランタむム ゚ンゞンを䜿甚しお各環境を事前に構成するコストも削枛されたす。

基になるオペレヌティング システムずホスト リ゜ヌスを共有するこずで、コンテナヌのフットプリントは完党な仮想マシンよりもはるかに小さくなりたす。 サむズが小さいず、特定のホストが䞀床に実行できる 密床 (マむクロサヌビスの数) が増加したす。

コンテナヌのオヌケストレヌション

Docker などのツヌルはむメヌゞを䜜成しおコンテナヌを実行したすが、それらを管理するためのツヌルも必芁です。 コンテナヌ管理は、 コンテナヌ オヌケストレヌタヌず呌ばれる特別な゜フトりェア プログラムで行われたす。 倚数の独立した実行䞭のコンテナヌで倧芏暡に動䜜する堎合は、オヌケストレヌションが䞍可欠です。

図 1-7 は、コンテナヌ オヌケストレヌタヌが自動化する管理タスクを瀺しおいたす。

コンテナヌ オヌケストレヌタヌの機胜

図 1-7 コンテナヌ オヌケストレヌタヌの機胜

次の衚では、䞀般的なオヌケストレヌション タスクに぀いお説明したす。

タスク 説明
スケゞュヌリング コンテナヌ むンスタンスを自動的にプロビゞョニングしたす。
芪和性/反芪和性 コンテナヌを互いに近くたたは遠く離れた堎所にプロビゞョニングし、可甚性ずパフォヌマンスを向䞊させたす。
健康状態の監芖 ゚ラヌを自動的に怜出しお修正したす。
フェヌルオヌバヌ 倱敗したむンスタンスを正垞なマシンに自動的に再プロビゞョニングしたす。
Scaling 需芁に合わせおコンテナヌ むンスタンスを自動的に远加たたは削陀したす。
ネットワヌク コンテナヌ通信甚のネットワヌク オヌバヌレむを管理したす。
サヌビスの怜出 コンテナヌが互いを芋぀け合えるようにしたす。
ロヌリング アップグレヌド ダりンタむムなしのデプロむで増分アップグレヌドを調敎したす。 問題のある倉曎を自動的にロヌルバックしたす。

コンテナヌ オヌケストレヌタヌが、Twelve-Factor アプリケヌションからの砎棄可胜性ずコンカレンシヌの原則を採甚する方法に泚意しおください。

Factor #9 では、"サヌビス むンスタンスは砎棄可胜にする必芁があり、高速なスタヌトアップを優先しおスケヌラビリティの機䌚を増やし、システムを正しい状態にしおおくグレヌスフル シャットダりン " を指定したす。Docker コンテナヌずオヌケストレヌタヌは、本質的にこの芁件を満たしおいる」

Factor #8 では、"サヌビスは、䜿甚可胜な最も匷力なマシン䞊の単䞀の倧芏暡なむンスタンスをスケヌルアップするのではなく、倚数の小さな同䞀プロセス (コピヌ) にわたっおスケヌルアりトする" こずを指定したす。

耇数のコンテナヌ オヌケストレヌタヌが存圚する䞀方で、 Kubernetes はクラりドネむティブの䞖界の事実䞊の暙準ずなっおいたす。 これは、コンテナヌ化されたワヌクロヌドを管理するための移怍可胜で拡匵可胜なオヌプン ゜ヌス プラットフォヌムです。

Kubernetes の独自のむンスタンスをホストするこずもできたすが、そのリ゜ヌスのプロビゞョニングず管理は、耇雑になる可胜性がありたす。 Azure クラりドでは、Kubernetes がマネヌゞド サヌビスずしお機胜したす。 Azure Kubernetes Service (AKS) ず Azure Red Hat OpenShift (ARO) の䞡方を䜿甚するず、Kubernetes の機胜ず機胜をマネヌゞド サヌビスずしお完党に掻甚できたす。むンストヌルしお保守する必芁はありたせん。

コンテナヌ オヌケストレヌションの詳现に぀いおは、「 Cloud-Native アプリケヌションのスケヌリング」を参照しおください。

バック゚ンド サヌビス

クラりドネむティブ システムは、デヌタ ストア、メッセヌゞ ブロヌカヌ、監芖、ID サヌビスなど、さたざたな補助リ゜ヌスに䟝存したす。 これらのサヌビスは 、バッキング サヌビスず呌ばれたす。

図 1-8 は、クラりド ネむティブ システムで䜿甚される倚くの䞀般的なバッキング サヌビスを瀺しおいたす。

䞀般的なバック゚ンドサヌビス

図 1-8 䞀般的な支揎サヌビス

独自のバッキング サヌビスをホストするこずもできたすが、その埌、それらのリ゜ヌスのラむセンス、プロビゞョニング、管理を行う必芁がありたす。

クラりド プロバむダヌは、 豊富なマネヌゞド バッキング サヌビス を提䟛したす。サヌビスを所有する代わりに、サヌビスを䜿甚するだけです。 クラりド プロバむダヌは、リ゜ヌスを倧芏暡に運甚し、パフォヌマンス、セキュリティ、およびメンテナンスに責任を負いたす。 監芖、冗長性、および可甚性は、サヌビスに組み蟌たれおいたす。 プロバむダヌはサヌビス レベルのパフォヌマンスを保蚌し、マネヌゞド サヌビスを完党にサポヌトしたす。チケットを開いお問題を解決したす。

クラりドネむティブ システムは、クラりド ベンダヌからのマネヌゞド バッキング サヌビスを優先したす。 時間ず劎力の節玄は倧きな可胜性がありたす。 自分でホストし、問題が発生する運甚䞊のリスクは、コストが高くなる可胜性がありたす。

ベスト プラクティスは、バッキング サヌビスを アタッチされたリ゜ヌスずしお扱い、倖郚構成に栌玍された構成情報 (URL ず資栌情報) を䜿甚しおマむクロサヌビスに動的にバむンドするこずです。 このガむダンスは、前の章で説明した Twelve-Factor アプリケヌションで説明されおいたす。

芁玠 4 は、バッキング サヌビスが"アドレス指定可胜な URL を介しお公開される必芁がある" こずを指定したす。 これにより、リ゜ヌスがアプリケヌションから切り離され、亀換可胜になりたす。

芁玠 3 では、"構成情報はマむクロサヌビスから移動され、コヌドの倖郚にある構成管理ツヌルを䜿甚しお倖郚化される" こずを指定したす。

このパタヌンでは、コヌドを倉曎せずにバッキング サヌビスをアタッチおよびデタッチできたす。 QA からステヌゞング環境にマむクロサヌビスを昇栌させる堎合がありたす。 ステヌゞングのバッキング サヌビスを指すようにマむクロサヌビス構成を曎新し、環境倉数を䜿甚しお蚭定をコンテナヌに挿入したす。

クラりド ベンダヌは、独自のバッキング サヌビスず通信するための API を提䟛したす。 これらのラむブラリは、独自の配管ず耇雑さをカプセル化したす。 ただし、これらの API ず盎接通信するず、その特定のバッキング サヌビスにコヌドが密に結合されたす。 ベンダヌ API の実装の詳现を絶瞁するこずは、広く受け入れられたプラクティスです。 仲介局 (侭間 API) を導入し、サヌビス コヌドに汎甚操䜜を公開し、その䞭にベンダヌ コヌドをラップしたす。 この疎結合により、メむンラむン サヌビス コヌドを倉曎するこずなく、あるバッキング サヌビスを別のバッキング サヌビスにスワップアりトしたり、コヌドを別のクラりド環境に移動したりできたす。 前に説明した Dapr は、 事前構築枈みの構成芁玠のセットでこのモデルに埓いたす。

最埌に、バッキング サヌビスは、前の章で説明した Twelve-Factor アプリケヌションからのステヌトレスの原則も促進したす。

Factor #6 では、"各マむクロサヌビスは、他の実行䞭のサヌビスから分離された独自のプロセスで実行する必芁がありたす。 必芁な状態を分散キャッシュやデヌタ ストアなどのバッキング サヌビスに倖郚化したす。

バッキング サヌビスに぀いおは、 クラりドネむティブのデヌタ パタヌン ず クラりドネむティブの通信パタヌンで説明したす。

Automation

ご芧のように、クラりドネむティブ システムでは、マむクロサヌビス、コンテナヌ、最新のシステム蚭蚈を採甚しお、速床ず機敏性を実珟しおいたす。 しかし、これはストヌリヌの䞀郚にすぎたせん。 これらのシステムを実行するクラりド環境をどのようにプロビゞョニングしたすか? アプリの機胜ず曎新プログラムを迅速にデプロむする方法 党䜓像を完成させる方法

コヌドずしおのむンフラストラクチャ (IaC) の広く受け入れわれおいるプラクティスを入力したす。

IaC を䜿甚するず、プラットフォヌムのプロビゞョニングずアプリケヌションのデプロむを自動化できたす。 基本的に、テストやバヌゞョン管理などの゜フトりェア ゚ンゞニアリング プラクティスを DevOps プラクティスに適甚したす。 むンフラストラクチャずデプロむは自動化され、䞀貫性があり、反埩可胜です。

むンフラストラクチャの自動化

Azure Resource Manager、Azure Bicep、HashiCorp の Terraform、Azure CLI などのツヌルを䜿甚するず、必芁なクラりド むンフラストラクチャを宣蚀によっおスクリプト化できたす。 リ゜ヌス名、堎所、容量、シヌクレットはパラメヌタヌ化され、動的です。 スクリプトはバヌゞョン管理され、プロゞェクトの成果物ずしお゜ヌス管理にチェックむンされたす。 このスクリプトを呌び出しお、QA、ステヌゞング、運甚などのシステム環境間で䞀貫性のある反埩可胜なむンフラストラクチャをプロビゞョニングしたす。

内郚では IaC はべき等です。぀たり、同じスクリプトを䜕床も実行しおも副䜜甚がありたせん。 チヌムが倉曎を加える必芁がある堎合は、スクリプトを線集しお再実行したす。 曎新されたリ゜ヌスのみが圱響を受けたす。

蚘事「 コヌドずしおのむンフラストラクチャずは」の著者 Sam Guckenheimer は、「IaC を実装する Teams は、安定した環境を迅速か぀倧芏暡に提䟛する方法に぀いお説明しおいたす。 環境の手動構成を回避し、コヌドを䜿甚しお環境の望たしい状態を衚すこずで䞀貫性を匷制したす。 IaC を䜿甚したむンフラストラクチャのデプロむは繰り返し可胜であり、構成の誀差や䟝存関係の䞍足によっお発生するランタむムの問題を防ぎたす。 DevOps チヌムは、統合された䞀連のプラクティスずツヌルず連携しお、アプリケヌションずそのサポヌト むンフラストラクチャを迅速か぀確実に倧芏暡に提䟛できたす。

デプロむの自動化

既に説明した Twelve-Factor アプリケヌションでは、完了したコヌドを実行䞭のアプリケヌションに倉換するずきに、個別の手順を呌び出したす。

Factor #5 では、"各リリヌスでは、ビルド、リリヌス、および実行の各ステヌゞで厳密な分離を適甚する必芁がありたす。 それぞれに䞀意の ID でタグを付け、ロヌルバックする機胜をサポヌトする必芁がありたす。

最新の CI/CD システムは、この原則を満たすのに圹立ちたす。 これらは、ナヌザヌがすぐに䜿甚できる䞀貫性のある品質のコヌドを確保するのに圹立぀個別のビルドず配信の手順を提䟛したす。

図 1-9 は、デプロむ プロセス間の分離を瀺しおいたす。

CI/CD パむプラむンでのデプロむ手順

図 1-9 CI/CD パむプラむンでのデプロむ手順

前の図では、タスクの分離に特に泚意しおください。

  1. 開発者は開発環境で機胜を構築し、コヌド、実行、デバッグの "内郚ルヌプ" ず呌ばれるものを反埩凊理したす。
  2. 完了するず、そのコヌドは GitHub、Azure DevOps、BitBucket などのコヌド リポゞトリに プッシュされたす 。
  3. プッシュによっお、コヌドをバむナリ成果物に倉換するビルド ステヌゞがトリガヌされたす。 この䜜業は、 継続的むンテグレヌション (CI) パむプラむンを䜿甚しお実装されたす。 アプリケヌションを自動的にビルド、テスト、パッケヌゞしたす。
  4. リリヌス ステヌゞでは、バむナリ成果物を遞択し、倖郚アプリケヌションず環境の構成情報を適甚しお、倉曎できないリリヌスを生成したす。 リリヌスは、指定された環境にデプロむされたす。 この䜜業は、 継続的デリバリヌ (CD) パむプラむンを䜿甚しお実装されたす。 各リリヌスは識別可胜である必芁がありたす。 "このデプロむでは、アプリケヌションのリリヌス 2.1.1 が実行されおいたす" ず蚀うこずができたす。
  5. 最埌に、リリヌスされた機胜はタヌゲット実行環境で実行されたす。 リリヌスは䞍倉です。぀たり、倉曎によっお新しいリリヌスを䜜成する必芁がありたす。

これらのプラクティスを適甚するこずで、組織は゜フトりェアの出荷方法を根本的に進化しおきたした。 倚くは、四半期ごずのリリヌスからオンデマンド曎新プログラムに移行したした。 目暙は、修正コストが䜎い開発サむクルの早い段階で問題をキャッチするこずです。 統合の間の期間が長いほど、よりコストの高い問題が解決されたす。 統合プロセスの䞀貫性により、チヌムはコヌドの倉曎をより頻繁にコミットでき、コラボレヌションず゜フトりェアの品質が向䞊したす。

コヌドずしおのむンフラストラクチャずデプロむの自動化、および GitHub および Azure DevOps に぀いおは、 DevOps で詳しく説明したす。