スポーツが嫌いな人はいないでしょうか? 毎年、スポーツシーズンが始まると、私たちは皆、お気に入りのチームを応援し始めます。 さて、忙しいスケジュールや仕事の緊急事態で、お気に入りのチームが試合をしているときに試合を欠席したことが何度ありますか? 確かに私たち全員がそこにいたことがあります。 これは、リーダーボードの概念につながります。これは、見逃したものに対処するために、適切に計算された方法でランキングやデータ ポイントを表示するスコアボードです。 何 NCache それは、分散キャッシュ ソリューションを使用してリーダーボード アプリケーションをさらに効率化し、素晴らしいパフォーマンスを達成することです。 その方法について話し合いましょう。
ここで私たちは何を達成しようとしているのでしょうか?
そこで、試合会場からライブで更新を取得し、更新を購読しているすべてのユーザーに表示するアプリケーションを作成するとします。 すでに終了した試合の場合、ユーザーは試合の詳細なスコアと結果を取得します。 同様に、サブスクライブしたユーザーも、新しい試合が開始されると通知を受け取ります。
この機能を提供するシステムは数多くありますが、ライブ スコアリング アプリケーションの場合、ネットワークの不具合や遅延は大きな問題となります。 さて、良いニュースです。 NCache もたらすのは、それらすべてについて心配する必要がないということです NCache.
NCache は分散インメモリ コンピューティングを使用して、古いユーザーや参加したばかりのユーザーに関係なく、何百、何千ものユーザーに最速かつ最適な出力を提供します。 パフォーマンスのボトルネックが発生して速度が低下したり、クラッシュしたりすることなく、大量のトラフィックを管理します。 さらに、これは分散型で線形にスケーラブルなインメモリ データストアであるため、任意の数のクライアント リクエストを処理し、キャッシュ クライアントとの信頼できる接続を保証します。 すぐに実行できるサンプル アプリケーションを作成し、以下で利用できるようにしました。 githubの デモとして。
NCache リーダーボード アプリケーション: 概要
まずはアプリケーションの機能の概要から始めましょう。 基本機能は XNUMX つの部分に分かれています。
- 購読ユーザー: ユーザーがライブスコアを表示するために購読しました。
- スコア更新チーム: 購読ユーザーのライブスコアを更新するユーザー。
試合が始まると、スコア更新チームは API で試合に関する更新を開始し、更新を受信するライセンスを持つ人に更新を提供します。 アプリケーション アーキテクチャの全体図を以下に示します。
私たちのシステムでは、 NCache、ライブ通知は NCache クラスタサーバーを使用して キャッシュ パブリッシュ サブスクライブ モデル ここで、パブリッシャーは特定のトピックにリンクするメッセージをパブリッシュし、トピックをサブスクライブしているサブスクライバーは、そのトピックに変更が加えられるたびに更新を受け取ります。 私たちの場合、試合の更新が発生するたびにそれが公開され、試合を購読しているすべてのユーザーがこれを試合スコアの更新として受け取ります。
試合のすべての加入者は、次の方法を使用してインスタント更新を受け取ります。 NCache SignalR Backplane. SignalR Backplane あります NCache 拡張 ASP.NET SignalR の効率的な使用を可能にする ASP.NET SignalR Web ファーム内で、複数のサーバーから各ユーザーへの関連データのスムーズなフローを確保します。 一致ハンドラーは使用します NCache バッキングソース データベースとの間でキャッシュ データを読み書きします。 アプリケーションの動作を理解するには、次の図を見てください。
Pub/Sub を使用して一致更新をパブリッシュおよびサブスクライブする
使い方 NCache パブ/サブスク モデルの場合、ユーザーは一致の更新のトピックをサブスクライブします。 スコア更新チームがスコアを更新するたびに、メッセージが公開され、購読しているユーザーに更新についての通知が届きます。 したがって、購読ユーザーは毎回新しく更新されたデータを再トレーニングするため、スコアが更新されます。
以下のコードは、特定のトピックに関するメッセージを公開する方法を説明しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ICache cache = CacheManager.GetCache("myPartitionedCache"); // create pub/sub topic on match start cache.MessagingService.CreateTopic(matchName); // create start update MatchUpdate start = new MatchUpdate(datetime, "match_start", "stadium", "Match has Started"); // create new Message packet with the match update Message message = new Message(start); // fetch topic handler from cache ITopic topic = _cache.MessagingService.GetTopic(matchName); // publish Message on topic topic.Publish(message, DeliveryOption.All); |
以下のコードは、ユーザーが特定のトピックを購読する方法を示しています。
1 2 3 4 5 6 7 8 |
ITopicSubscription matchSubscription = cache.MessagingService.GetTopic(matchName).CreateSubscription(MatchUpdates); ... // Creating Callback public void MatchUpdates(object sender, MessageEventArgs args) { hub.Clients.All.SendAsync("MatchUpdate", new JsonResult((MatchUpdate)args.Message.Payload)); } |
使い方 SignalR Backplane 試合に関する最新情報を受け取るには
NCache SignalR Backplane によって提供される拡張機能です NCache 定期的な更新を購読しているすべてのユーザーとの永続的な接続を維持するため。 これを提供することの最も良い点は、一定の遅延を最小限に抑え、アプリケーションにリアルタイム機能を追加することでイライラする遅延がなくなることです。
以下のコードを見てください。 NCache SignalR Backplane アプリケーションに登録できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Get cache name and event key from appsettings.json string cacheName = Configuration.GetValue("CacheName"); string eventKey = Configuration.GetValue("EventKey"); GlobalHost.DependencyResolver.UseNCache(cacheName, eventKey); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseSignalR(routes => { routes.MapHub("/signalr"); }); app.UseMvc(); |
データ ソースからのデータの読み取り/書き込みのためのバッキング ソース
データ ソース内の一致スコアも更新されるように、アプリケーションはデータベースとの同期を維持する必要があります。 NCache は、大阪で 且つ 以下を含むソースプロバイダー:
- リードスループロバイダー: キャッシュされていない更新については、データベースを直接調べて更新されたデータを取得します。
- ライトスループロバイダー: データ ソースとの同期を維持するために、データはデータ ソースだけでなくキャッシュにも書き込まれるため、不整合はゼロになります。
上記の XNUMX つの要素を念頭に置いて、データ ソースとキャッシュの同期を維持するための以下のコードを見てください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public ScoreUpdateController(IConfiguration configuration) { // get cache name from appsettings.json string cacheName = configuration.GetValue("CacheName"); // get read/write thru provider name from appsettings.json string readThruProviderName = configuration.GetValue("ReadThruProviderName"); string writeThruProviderName = configuration.GetValue("WriteThruProviderName"); // initialize store match handler if not initialized before if (storeHandler == null) storeHandler = new StoreHandler(cacheName, readThruProviderName, writeThruProviderName); // acquire cache handler cache = CacheManager.GetCache(configuration.GetValue("CacheName")); } |
以下のコードは、リードスルーを有効にして更新を取得し、更新されたデータをキャッシュとデータ ストアに書き込むことを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public void SaveUpdates(string matchName, MatchUpdate matchUpdate) { // fetch list handler from cache IDistributedList distributedList = cache.DataTypeManager.GetList(matchName, readThruOptions); // if there is no list initialized, create new list with writethru enabled if (distributedList == null) { distributedList = cache.DataTypeManager.CreateList(matchName, null, writeThruOptions); } // add new update to list distributedList.Add(matchUpdate); |
まとめると…
を使用してライブスコアボードアプリケーションを作成する方法を学習しました。 NCache これにより、不具合や不一致が発生することなく、試合をライブでストリーミングする膨大な数のユーザーに対応できます。 なんてクールなんでしょう? 実際にゴールが起こってから数分後にゴールが表示される時代は終わりました。 外出先でもお気に入りのゲームを楽しむことができます。
それで、あなたはどのチームを応援しますか? また! 他の非常に興味深い機能や使用例もぜひチェックしてください。 NCache 決して失望させません。
デジタル スコアボードは、スポーツ ファンにリアルタイムの最新情報と情報を提供する上で重要な役割を果たします。 ライブスコアリングアプリケーションのコンテキストでは、効率的で信頼性の高いシステムを持つことが最も重要です。 NCache は、多数のユーザーとそのリクエストを処理するための最適なパフォーマンスとスケーラビリティを保証する分散キャッシュ ソリューションを提供します。 分散型インメモリ コンピューティングを活用することで、 NCache ネットワークの不具合や遅延を最小限に抑え、ユーザーにシームレスなエクスペリエンスを提供します。 適切に機能するデジタル スコアボードの重要性はどれだけ強調してもしすぎることはありません。 NCache スポーツ愛好家の全体的な体験の向上に貢献します。