Qui n'aime pas le sport ? Chaque année, lorsque la saison sportive commence, nous commençons tous à soutenir nos équipes préférées. Maintenant, combien de fois un emploi du temps chargé ou une urgence au travail vous ont-ils fait manquer un match, cela aussi lorsque votre équipe préférée joue ? Je suis sûr que nous y sommes tous allés. Cela nous amène au concept de classement - un tableau de bord montrant le classement ou les points de données d'une manière bien calculée pour faire face à ce que vous avez manqué. Quoi NCache est de rendre votre application de classement beaucoup plus efficace avec une solution de mise en cache distribuée pour obtenir une performance magnifique. Discutons comment.
Qu'essayons-nous de réaliser ici?
Supposons donc que vous souhaitiez créer une application qui enregistre les mises à jour en direct des sites de match et les affiche à tous les utilisateurs qui se sont abonnés aux mises à jour. Pour un match déjà terminé, l'utilisateur obtient un score détaillé et les résultats du match. De même, l'utilisateur abonné est également averti lorsqu'un nouveau match commence.
Il existe des tonnes de systèmes vous offrant cette fonctionnalité, cependant, pour une application de notation en direct, les problèmes de réseau et les retards sont un gros revers. Eh bien la bonne nouvelle que NCache apporte, c'est que vous n'avez pas à vous soucier de tout ça avec NCache.
NCache utilise l'informatique en mémoire distribuée pour vous offrir la sortie la plus rapide et la plus optimale pour des centaines et des milliers d'utilisateurs, qu'ils soient anciens ou qu'ils viennent de se joindre. Il gère un trafic important sans s'étouffer avec les goulots d'étranglement des performances, ce qui le ralentit ou le bloque. De plus, il s'agit d'un magasin de données en mémoire distribué et linéairement évolutif, gérant ainsi n'importe quel nombre de demandes client et assurant une connexion fiable avec le client cache. Nous avons créé pour vous un exemple d'application prêt à l'emploi et mis à votre disposition sur Github comme démonstration.
NCache Application de classement : un aperçu
Commençons par l'aperçu de ce que fait l'application. La fonctionnalité de base est divisée en deux parties :
- Utilisateur abonné : Un utilisateur s'est abonné pour voir le score en direct.
- Équipe de mise à jour des scores : Un utilisateur mettant à jour le score en direct pour l'utilisateur abonné.
Une fois que le match commence, l'équipe de mise à jour du score commence à faire des mises à jour sur le match sur leurs API qui fournissent des mises à jour à quiconque a la licence pour recevoir ces mises à jour. Une vue d'ensemble de l'architecture de l'application est présentée ci-dessous :
Dans notre système soutenu par NCache, les notifications en direct seront publiées sur le NCache serveurs de cluster utilisant Cache Publier S'abonner Modèle où un éditeur publie un message lié à un sujet particulier et l'abonné qui s'est abonné au sujet reçoit une mise à jour chaque fois qu'une modification a été apportée à ce sujet. Dans notre cas, chaque fois qu'une mise à jour de match aura lieu, elle sera publiée et tous les utilisateurs abonnés au match le recevront comme une mise à jour du score du match.
Tous les abonnés au match reçoivent des mises à jour instantanées en utilisant NCache SignalR Backplane. SignalR Backplane est un NCache extension du ASP.NET SignalR qui permet une utilisation efficace de ASP.NET SignalR dans une ferme Web tout en assurant un flux fluide des données pertinentes vers chaque utilisateur à partir de plusieurs serveurs. Le gestionnaire de correspondance utilise NCache Source de sauvegarde pour lire et écrire les données du cache depuis et vers la base de données. Regardez la figure ci-dessous pour comprendre le fonctionnement de l'application :
Utiliser Pub/Sub pour publier et s'abonner avec des mises à jour de correspondance
En utilisant NCache Pub/Sub modèle, l'utilisateur s'abonne au sujet pour les mises à jour des correspondances. Chaque fois que l'équipe de mise à jour du score met à jour le score, un message est publié et l'utilisateur abonné est informé de la mise à jour. L'utilisateur abonné recycle ainsi à chaque fois les données nouvellement mises à jour, d'où le score mis à jour.
Le code ci-dessous décrit comment publier un message sur un sujet spécifique.
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); |
Le code ci-dessous montre comment un utilisateur peut s'abonner à un sujet spécifique
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)); } |
En utilisant SignalR Backplane pour recevoir des mises à jour sur le match
NCache SignalR Backplane est une extension fournie par NCache pour maintenir des connexions persistantes avec tous les utilisateurs abonnés pour des mises à jour constantes. La meilleure partie de cette offre est de minimiser les retards constants et d'ajouter des fonctionnalités en temps réel à votre application, donc pas de retards frustrants.
Regardez le code ci-dessous pour vous montrer NCache SignalR Backplane peuvent être enregistrés dans votre application :
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(); |
Source de sauvegarde pour lire/écrire des données à partir de la source de données
Votre application doit rester synchronisée avec votre base de données afin que les scores de correspondance soient également mis à jour dans la source de données. NCache fournit Données fournisseurs de source qui incluent :
- Fournisseur de lecture : Pour toutes les mises à jour non mises en cache, la base de données est directement consultée pour récupérer les données mises à jour.
- Fournisseur d'écriture directe : Pour garder la source de données synchronisée avec la source de données, les données sont écrites dans le cache ainsi que la source de données, d'où zéro incohérence.
En gardant à l'esprit les deux facteurs ci-dessus, examinez le code ci-dessous pour synchroniser la source de données avec votre cache.
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")); } |
Le code ci-dessous montre la récupération des mises à jour avec la lecture activée et l'écriture des données mises à jour dans le cache ainsi que dans le magasin de données.
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); |
Pour tout résumer…
Nous venons d'apprendre comment créer une application de tableau de bord en direct en utilisant NCache qui peut accueillir un grand nombre d'utilisateurs diffusant le match en direct sans aucun problème ni incohérence. À quel point cela est cool? Il est révolu le temps où un but serait affiché quelques minutes après qu'il se soit réellement produit. Vous pouvez désormais profiter de votre jeu préféré où que vous soyez !
Alors, pour quelle équipe soutenez-vous ? Aussi! N'oubliez pas de consulter nos autres fonctionnalités et cas d'utilisation très intéressants, NCache ne déçoit jamais.
Les tableaux d'affichage numériques jouent un rôle crucial en fournissant des mises à jour et des informations en temps réel aux fans de sport. Dans le cadre d'une application de live scoring, disposer d'un système efficace et fiable est primordial. NCache offre une solution de mise en cache distribuée qui assure des performances et une évolutivité optimales pour gérer un grand nombre d'utilisateurs et leurs demandes. En tirant parti de l'informatique distribuée en mémoire, NCache minimise les problèmes de réseau et les retards, offrant une expérience transparente aux utilisateurs. L'importance d'un tableau de bord numérique qui fonctionne bien ne peut être surestimée, et des solutions comme NCache contribuent à améliorer l'expérience globale des amateurs de sport.