サーバー アプリ向けの従来のモノリシック アプリケーション アーキテクチャは、最近ソフトウェア業界でパラダイム シフトを起こし、現在はマイクロサービス アーキテクチャに取って代わられています。 それぞれが単一の機能を表し、そのプロセスで実行される軽量で疎結合のモジュールのコレクションというアイデアは、正当な理由で非常に人気があります。 スケーラビリティ、信頼性、および高可用性は、マイクロサービス アーキテクチャによって実現されます。これは、個々のサービスが依存関係なく個別に作成、管理、およびテストされるためです。
マイクロサービスは疎結合であるため、メッセージ ブローカーがこのインフラストラクチャに適合し、分離を維持しながら非同期マイクロサービス通信を可能にすることは理にかなっています。 非同期通信とは、どちらのサービスも他方を待つ必要がないことを意味します。 このため、パブリッシュ/サブスクライブ モデルは、マイクロサービス間の通信の媒体として広く採用されています。
NCache .NET 用のメモリ内分散データ ストアであり、イベント ドリブン通信用の機能豊富なメモリ内 pub/sub を提供します。 したがって、 NCache Pub/Sub モデルを使用して、マイクロサービス間の非同期通信用のメッセージング ブローカーとして簡単に構成できます。
NCache 詳細 Pub/Subメッセージングとイベント Pub / Sub NCache ドキュメント
使い方 NCache マイクロサービス向けのインメモリ Pub/Sub
Pub/Sub が有効になっているのは、 NCache マイクロサービス (.NET/ に組み込まれている) が属するトピックを定義することによって.NET Core) は、イベントを発行したり、購読したりできます。 イベントは、マイクロサービスの外部で、 NCache メッセージブローカー。 各サブスクライバー マイクロサービスには、パブリッシャー マイクロサービスがイベントを発行した後に適切なイベントを処理するイベント ハンドラーが含まれています。 このアーキテクチャの単純な論理図を図 1 に示します。
.NET/の場合.NET Core マイクロサービス、 NCache メッセージが XNUMX つ以上のサブスクライバに中継されるイベント バスまたはメッセージ ブローカーとして機能します。 詳細については、 NCache Pub/Sub モデルについては、を参照してください。 NCache ドキュメント または私たちのブログ 使い方 NCache インメモリ Pub/Sub として。
このブログ投稿では、 eショップオンコンテナ で拡張されたサンプル アプリケーション NCache & GitHub にアップロードされました。 プロジェクトは注入します NCache .NET マイクロサービス間のアプリ調整のためのイベント バスとして。 NCacheこのアプリケーションにおける の役割を図 2 に示します。
NCache 詳細 Pub/Subメッセージングとイベント Pub / Sub NCache ドキュメント
簡単な使用例 NCache インメモリPub/Sub
使い方 eショップオンコンテナ 応用、 NCache 複数のシナリオでメッセージ ブローカーとして機能します。 ここで強調されている XNUMX つのシナリオは、バスケットの詳細が表示されるユーザー チェックアウト イベントです。 公表 NCache イベント バス、および注文アプリケーションには 購読しています ユーザーのチェックアウト時に入ってくるバスケットに追加して、注文を処理します。
- 公開: この簡略化されたコード スニペットは、Basket.API マイクロサービスのバスケット チェックアウト ロジックの一部を示しています。このロジックでは、ユーザー ID と、住所、カード番号などのすべてのバスケットの詳細がメッセージ ペイロードとして追加され、イベント バスで公開されます。 Basket.API コードは次の場所にあります。 バスケットコントローラー.cs GitHubのクラス。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Route("checkout")] [HttpPost] public async Task<ActionResult> CheckoutAsync([FromBody]BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = GetUserIdentity(); basketCheckout.RequestId = GetRequestID(); var basket = await GetBasketAsync(userId); var userName = User.FindFirst(x => x.Type == "unique_name").Value; var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.Address, basketCheckout.CardNumber, basketCheckout.RequestId, basket); // This message is published to the NCache Pub/Sub store eventBus.Publish(eventMessage); } |
- 申し込む: 次のコード スニペットは Ordering.API マイクロサービスからのもので、コードは次のとおりです。 GitHub にアップロードされました. これには UserCheckout イベントへのサブスクリプションが含まれており、ユーザーがバスケットをチェックアウトすると、イベントがメッセージとして発行され、サブスクライバーからのハンドラーが呼び出されて注文をさらに処理します。
1 2 3 4 |
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
NCache 詳細 Pub/Subメッセージングとイベント Pub / Sub NCache ドキュメント
永続サブスクリプションによる Pub/Sub メッセージの永続性
マイクロサービスは疎結合であるため、マイクロサービスはいつでもアプリケーションに参加したりアプリケーションから離れたりする可能性があります。 さらに、トラフィックの多いメッセージ パッシング中にネットワーク障害が発生した場合はどうすればよいでしょうか。 これは、ネットワークが一時的にダウンした場合でもメッセージが失われないように、イベント バスとのマイクロサービス接続に十分な回復力が必要であることを意味します。
NCache は、.NET/ 間のメッセージの耐久性に対応する XNUMX 種類の永続的なサブスクリプションを提供します。.NET Core マイクロサービス:
- 共有永続サブスクリプション: 複数の購読者が XNUMX つの購読を購読できます。 ラウンド ロビン方式は、複数のサブスクライバにメッセージを送信するために使用されます。 加入者がネットワークを離れた場合でも、アクティブな加入者間のメッセージは配信され続けます。
- 独占的な永続サブスクリプション: XNUMX つのサブスクリプションには、一度に XNUMX 人のアクティブなサブスクライバーのみが含まれます。 接続がアクティブになるまで、同じサブスクリプションで新しいサブスクライバー要求は受け入れられません。
NCache 詳細 Pub/Subメッセージングとイベント Pub / Sub NCache ドキュメント
接続の再試行による通信の信頼性
マイクロサービスは通信をネットワークに依存しているため、接続を確立するメカニズムが必要な予期しないネットワーク障害が発生する可能性があります。 したがって、 NCache ~との信頼できる通信プラットフォームを維持します 接続の再試行 & 生き続ける .NET/ を確認するための機能.NET Core ネットワーク障害が発生した場合、サービスは自動的にキャッシュへの接続を試みます。 これにより、Polly などのサードパーティ ライブラリによる再試行ポリシーが不要になります。
NCache 詳細 接続の再試行 通信の信頼性 NCache ドキュメント
なぜ NCache?
組織は現在、モノリシック アプリケーションではなくマイクロサービス アーキテクチャを採用しており、 NCache は、.NET/ の仲介媒体として使用される頼りになるインメモリ分散データ ストアになります。.NET Core マイクロサービス アプリケーション。
- 非常に高速で直線的にスケーラブル: 記憶の中にあるので、 NCache 他の Pub/Sub ソリューションよりも高速な通信を提供します。 さらに、配布されることで、 NCache メッセージ ブローカー クラスターにサーバーを追加して、より大きな負荷を処理するときに、外出先で拡張できるようにします。
- 高可用性: NCache 動的で自己修復可能なピアツーピア クラスタ アーキテクチャを提供し、単一障害点をなくします。 さらに、 NCache メッセージをスマートにレプリケートし、永続的なサブスクリプションも提供するため、キャッシュ サーバーがダウンした場合でもメッセージが失われることがなく、マイクロサービスの通信における高可用性が保証されます。 NCache また、クラスター内のサーバーの数を増やす必要がある場合でも、クラスターを停止せずに実行時にこれらのサーバーを追加できるため、高可用性が実現します。
- ネイティブ .NET Core: .NET/に組み込まれたマイクロサービスの場合.NET Core, NCache 100% .NET / .NET Core ネイティブ スタックをアプリケーション スタックにシームレスに統合します。
要約すると、マイクロサービスはアプリケーションを論理ユニットに単純化しますが、それらの間の通信の管理も難しくなります。 したがって、 NCache これにより、同時に分離も考慮した高可用性メッセージング ブローカーの導入による複雑さが解消されます。
別のブログもあります 分散キャッシュによるマイクロサービスのパフォーマンスのスケーリング。 ぜひチェックしてみてください!