谁不爱运动? 每年,当赛季开始时,我们都开始支持我们最喜欢的球队。 现在有多少次繁忙的日程或工作中的紧急情况让你错过了一场比赛,当你最喜欢的球队正在比赛时也是如此? 很确定我们都去过那里。 这给我们带来了排行榜的概念——一个以计算良好的方式显示排名或数据点的记分牌,以应对您错过的内容。 什么 NCache 确实是,使用分布式缓存解决方案使您的排行榜应用程序更加高效,以实现出色的性能。 让我们讨论如何。
我们想在这里实现什么?
因此,假设您要创建一个应用程序,该应用程序从比赛场地实时接收更新并将其显示给所有订阅了更新的用户。 对于已经结束的比赛,用户会得到比赛的详细分数和结果。 同样,订阅用户也会在新比赛开始时收到通知。
有大量系统为您提供此功能,但是,对于实时评分应用程序,网络故障和延迟是一个很大的挫折。 好消息是 NCache 带来的是你不需要担心这一切 NCache.
NCache 使用分布式内存计算为成百上千的老用户或刚加入的用户提供最快和最优化的输出。 它可以管理繁重的流量,而不会因性能瓶颈而窒息而导致其减速或崩溃。 此外,它是一个分布式和线性可扩展的内存数据存储,因此可以处理任意数量的客户端请求并确保与缓存客户端的可靠连接。 我们已经为您创建了一个准备运行的示例应用程序,并在 Github上 作为示范。
NCache 排行榜应用:概述
让我们从应用程序功能的概述开始。 基本功能分为两部分:
- 订阅用户: 订阅查看实时比分的用户。
- 分数更新团队: 为订阅用户更新实时比分的用户。
比赛开始后,比分更新团队开始在他们的 API 上更新比赛,向任何拥有接收这些更新的许可证的人提供更新。 应用架构的整体视图如下所示:
在我们的系统支持下 NCache,实时通知将发布到 NCache 集群服务器使用 缓存发布订阅模型 发布者发布链接到特定主题的消息,并且订阅该主题的订阅者在该主题发生更改时收到更新。 在我们的例子中,无论何时发生匹配更新,它都会被发布,并且所有订阅匹配的用户都将收到它作为匹配分数的更新。
比赛的所有订阅者使用以下方式接收即时更新 NCache SignalR Backplane. SignalR Backplane 是一个 NCache 延伸的 ASP.NET SignalR 允许有效使用 ASP.NET SignalR 在网络场中,同时确保相关数据从多个服务器顺畅地流向每个用户。 匹配处理程序使用 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 提供 时间 源提供者包括:
牢记上述两个因素,请查看下面的代码,以使数据源与缓存保持同步。
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 有助于提升体育爱好者的整体体验。