コンテナおよびマイクロサービスアーキテクチャに基づくリファレンスアプリケーション

こんにちは、こんにちは。 今日は、マイクロサービスとコンテナDockerの単純化されたアーキテクチャに基づいて作成された、Microsoftの参照クロスプラットフォームアプリケーション.NET Coreについて説明します。 この記事では、多くの技術データ、ドキュメント、トピックに関する本、有用なリンクを共有します。 そして、もちろん、より良い理解のためのビデオ。 今すぐ参加しよう!







ニュース
.NETアーキテクチャとeShopOnContainersなどの参照アプリケーションに関する現在の推奨事項をいち早く受け取りたいですか? -> この新しいGitHubリポジトリで[購読(監視)]をクリックします。


ご注意 Visual Studio 2017の必須バージョン:VS 2017 15.5以降。



.NET Core 2.0 Wave Technologiesの「Wave」の更新



ご注意
サーバー側ソリューションを.NET Core 2.0 Waveに完全に移植しました。コンパイルだけでなく、EF Core 2.0、ASP.NET Core 2.0、およびその他の関連する新しいバージョンの新しい推奨コードも含まれます。



ソリューションのdockerfileも更新され、2017年12月中旬からDocker Multi-Stageをサポートしています。



.NET Core 2.0に関連する実装済み機能のリストは、この出版物で提供されています。


ポリシーの原則の概要を示すブランチガイドを必ずご覧ください。



免責事項
これはサンプルアプリケーションのベータ版です。技術を絶えず改善し、それらに基づいたソリューションの新しいリリースを準備しています。 現在のコードのリファクタリングおよび新機能の実装中に、多くの機能を大幅に改善および変更できます。 コミュニティから改善の提案やリクエストをお待ちしています。



このリファレンスアプリケーションでは、マイクロサービス指向のアーキテクチャが簡略化された形式で実装されています。 ユニバーサルアプリケーションの一部として、Dockerコンテナーで.NET Coreなどのテクノロジーを使用するように設計されています。 ほとんどのユーザーと開発者がそれに精通しているという理由だけで、「電子ストア/電子商取引」の方向を選択しました。 ただし、このサンプルアプリケーションを「eコマースの参照モデル」と見なすべきではありません。 この実装は、インターネットを介した取引という点で最適とはほど遠いものです。 大規模でスケーラブルで重要な分散システム内のすべての問題を解決しようとはしていません。 主な目標は、開発者がDockerコンテナ、マイクロサービス、および.NET Coreプラットフォームをすばやく簡単に使い始めるのを支援することです。



たとえば、開発者がローカルコンピューターでソリューションを起動し、.NET CoreでDockerコンテナーとマイクロサービスを使用する原則に慣れたら、AzureのKubernetesやAzure Service Fabricのようなマイクロサービスクラスター/オーケストレーターを選択する必要があります(両方の環境がこのソリューションでテストおよびサポートされています) ) さらに、データベースをアクセス性の高いクラウドサービス(Azure SQLデータベースなど)に転送するか、Azureサービスバスまたは市場で入手可能な他のイベントバスを使用してEventBusイベントバスを実装する必要があります。







wikiで今後のeShopOnContainersリリースの計画と主要なマイルストーンを確認してください 。 ここでは、今後のリリースについて確認し、特定のシナリオを実装または改善する必要がある場合は ISSUEES セクションにフィードバックを残すことができます。 さらに、以前に尋ねられた質問のいずれかのディスカッションに参加できます。


アーキテクチャの概要



このリファレンスアプリケーションは、LinuxコンテナまたはWindowsコンテナ(使用しているDockerホストによって異なります)での.NET Coreサービスの起動と、Androidプラットフォームで実行されるモバイルアプリケーションのXamarinの使用により、サーバー側とクライアント側の両方でクロスプラットフォームです、iOSまたはWindows / UWP(後者の場合、任意のブラウザーがクライアントWebアプリケーションの起動に適しています)。 複数のスタンドアロンマイクロサービスを備えたアーキテクチャの簡易バージョンを実装します。各マイクロサービスは独自のデータとデータベースを持ち、独自のアプローチ(単純なCRUDテンプレート、DDD / CQRSテンプレート)を使用します。



クライアントアプリケーションとマイクロサービス間の通信プロトコルはHTTPです。 さらに、統合イベントとイベントバス(RabbitMQまたはAzureサービスバスに基づく軽量メッセージングブローカー)および製品開発で定義された他の機能に基づいて、更新されたデータを複数のサービスに転送するための非同期通信がサポートされます。









APIゲートウェイと公開されたAPIに関する重要な注意事項
上記のアーキテクチャ図は、eShopOnContainersがローカルDocker開発者マシンにデプロイされる方法を示していることに注意してください。 実稼働環境にデプロイする準備ができているアーキテクチャの場合、Azure API Management Serviceに基づくAPIゲートウェイや、対応するドキュメント/電子書籍で説明されているAPIゲートウェイを使用する他のアプローチなど、追加機能を使用してアーキテクチャを拡張し続けることをお勧めします。 これにより、同じレベルで使用されているAPIとセキュリティツールをフィルタリングしたり、クライアントアプリケーションや外部ユーザーから内部マイクロサービスを隠したり保護したりできます。







このリポジトリのサンプルコードは、Azure API管理サービスを使用して、Azureで事前に作成された依存関係がないサンプルにVisual Studio(またはCLI)で「F5実装」を提供しません。 ただし、実稼働環境で展開するソリューションを準備する際には、APIゲートウェイを使用する適切なアプローチを選択する必要があります。


マイクロサービスはタイプが異なります。つまり、次の図に示すように、内部アーキテクチャの実装は、目的に応じて異なる方法で実行できます。







開発環境向けのこのソリューションの現在の構成に関して、サンプルデータを含むSQLデータベースは、Linuxコンテナー(SQLデータベース用の1つの一般的なDockerコンテナー)の1つのSQL Serverに自動的に展開されるため、クラウドまたは特定のサーバーとは無関係にソリューション全体を実行できます。 各データベースは個別のDockerコンテナーとしてデプロイすることもできますが、Docker for WindowsまたはDocker開発環境で使用されるDocker LinuxホストでSQL Server用の3つのDockerコンテナーを実行するには、開発者のマシンのDockerに8 GB以上のRAMが必要ですMac向け。」



開発環境のコンテナとして起動されるRedisキャッシュ、およびコンテナモード(MongoDB)で動作するNoSQLデータベースにも同じことが当てはまります。



ただし、実際の実稼働環境では、MongoDBコンテナー(両方のシステムが使用するため)ではなく、Azure SQLデータベース、Redis as a service、Azure CosmosDBなどの高可用性サービスにデータベース(この場合、SQL Server、Redis、NoSQL)をデプロイすることをお勧めします同じアクセスプロトコル)。 本番構成に切り替える場合は、アクセスしやすいクラウドまたはローカルでサーバーをセットアップした後に接続文字列を変更するだけです。



関連ドキュメントと推奨事項



このリファレンスアプリケーションの開発中に、コンテナとマイクロサービスに基づく.NETアプリケーションのアーキテクチャ設計と開発に関するリファレンスガイド/電子書籍を準備しています(以下のダウンロードリンクを参照)。 このアーキテクチャスタイル(マイクロサービス、Dockerコンテナー、特定のマイクロサービスのドメイン固有の設計)を適用する方法、およびDockerコンテナーとして展開できるモノリシックアプリケーションを含む他の単純化されたアーキテクチャスタイルについて詳しく説明します。



また、コンテナ/ Dockerライフサイクル(DevOps、CI / CDなど)およびMicrosoftツールに関する他の電子出版物、およびXamarin.Formsに基づく企業アプリケーションテンプレートに関する電子書籍を読むこともできます。 リファレンスガイド/電子書籍のダウンロードと表示:

アーキテクチャの設計と開発 コンテナとCI / CDのライフサイクル Xamarin.Formsベースのアプリケーションテンプレート
PDFのダウンロード(第2版) ダウンロードする ダウンロードする
これらの書籍(MOBIやEPUBなど)やその他の電子出版物は、.NET Architecture Centerで入手できます。



フィードバックアドレス:dotnet-architecture-ebooks-feedback@service.microsoft.com



マイクロサービス設計と開発」の電子書籍をダウンロードして読むことをお勧めします。 アーキテクチャのスタイル、パターン、およびテクノロジーを説明するとき、その著者はこのリファレンスアプリケーションを参照して、多くのパターンの実装へのアプローチを説明します。



アプリケーションコードの概要



このリポジトリには、 .NET CoreDockerを使用してマイクロサービスアーキテクチャに基づいてアプリケーションを作成する方法を理解するのに役立つサンプルリファレンスアプリケーションが格納されています。



ビジネスラインまたはシナリオの例-オンラインストアまたはeコマースサービス-は、マルチコンテナアプリケーションを使用して実装されます。 各コンテナーはデプロイされたマイクロサービス(バスケットマイクロサービス、カタログマイクロサービス、注文マイクロサービス、識別マイクロサービスなど)であり、.NET Coreに基づくASP.NET Coreを使用して開発されているため、LinuxまたはWindowsコンテナーサービスで起動できます。 以下のスクリーンショットは、これらのマイクロサービス/コンテナおよびクライアントアプリケーションのVSソリューションの構造を示しています。









最後に、これらのマイクロサービスは、以下で説明するように、いくつかのクライアントWebアプリケーションとモバイルアプリケーションで使用されます。



MVCアプリケーション(ASP.NET Core) :これは典型的なASP.NET Core MVCアプリケーションであるため、サーバー側で動作するC#のサーバー側HTTPベースのマイクロサービスを使用する興味深いシナリオが含まれています。 サーバー側で動作するため、他のコンテナ/マイクロサービスへのアクセスは、Dockerノードの内部ネットワーク上で内部名前解決を使用して行われます。







SPA(シングルページアプリケーション-1ページのアプリケーション) :同じ「オンラインストア機能」ですが、Angular、Typescript、および少しのASP.NET Core MVCに基づいて開発されました。 これは、典型的なブラウザソリューションよりも単一ページのデスクトップアプリケーションを連想させる、より現代的なクライアント動作を可能にするクライアントサイドWebアプリケーションを開発するためのもう1つのアプローチです。 クライアントは、クライアントブラウザーのTypeScript / JavaScriptを介してHTTPベースのマイクロサービスにアクセスするため、マイクロサービスへの呼び出しはDockerホストの内部ネットワークからではなく、たとえば、ネットワークやインターネットからでも行われます。







Xamarinモバイルアプリケーション(iOS、Android、およびWindows / UWP) :このクライアント側モバイルアプリケーションは、最も一般的なモバイルOS(iOS、Android、およびWindows / UWP)をサポートします。 この場合、C#はマイクロサービスへのアクセスに使用されますが、クライアントデバイスでは:リクエストはDockerホストの内部ネットワークからではなく、たとえば、ネットワークまたはインターネットからも送信されます。







eShopOnContainersの開発環境をセットアップする



Visual Studio 2017およびWindowsの場合



これから始めることをお勧めします。



CLIおよびWindowsの場合



Windows上のCLI、dotnet CLI、 docker CLI、およびWindows用のVS Code: tykを好む人向け



CLIおよびMacの場合



Mac上のCLI、dotnet CLI、 docker CLI、およびMac用のVS Code: tykを好む人向け



オーケストレーター:KubernetesおよびService Fabric



AzureのKubernetesおよびService Fabricへの展開に関する推奨事項については、構成の問題に関するWikiの出版物を確認してください(ただし、他のクラウドまたはオンプレミスで使用できます)。



ところで、 ここでは、Azureのコンテナに関する最近の記事を読むことができます。



All Articles