Chi non ama lo sport? Ogni anno, quando inizia la stagione sportiva, iniziamo tutti a fare il tifo per le nostre squadre del cuore. Quante volte un'agenda fitta o un'emergenza sul lavoro ti ha fatto perdere una partita, anche quando gioca la tua squadra del cuore? Sono abbastanza sicuro che ci siamo stati tutti. Questo ci porta al concetto di classifica: un tabellone segnapunti che mostra la classifica o i punti dati in un modo ben calcolato per far fronte a ciò che ti sei perso. Che cosa NCache non è altro che rendere la tua applicazione leaderboard molto più efficiente con una soluzione di memorizzazione nella cache distribuita per ottenere prestazioni magnifiche. Discutiamo come.
Cosa stiamo cercando di ottenere qui?
Supponiamo quindi di voler creare un'applicazione che raccolga gli aggiornamenti in tempo reale dalle sedi delle partite e li visualizzi a tutti gli utenti che si sono iscritti agli aggiornamenti. Per una partita che è già terminata, l'utente riceve un punteggio dettagliato e risultati della partita. Allo stesso modo, anche l'utente iscritto riceve una notifica quando inizia una nuova corrispondenza.
Ci sono tonnellate di sistemi che ti forniscono questa funzionalità, tuttavia, per un'applicazione di punteggio in tempo reale, problemi di rete e ritardi sono una grande battuta d'arresto. Bene la buona notizia che NCache porta è che non devi preoccuparti di tutto ciò NCache.
NCache utilizza l'elaborazione in-memory distribuita per offrire l'output più rapido e ottimale per centinaia e migliaia di utenti, vecchi o appena iscritti. Gestisce il traffico intenso senza soffocare i colli di bottiglia delle prestazioni causandone il rallentamento o l'arresto anomalo. Inoltre, è un datastore in-memory distribuito e linearmente scalabile, che gestisce così un numero qualsiasi di richieste dei client e garantisce una connessione affidabile con il client cache. Abbiamo creato per te un'applicazione di esempio pronta per l'esecuzione e resa disponibile su Github come dimostrazione.
NCache Applicazione classifica: una panoramica
Iniziamo con la panoramica di ciò che fa l'applicazione. La funzionalità di base è suddivisa in due parti:
- Utente iscritto: Un utente si è iscritto per visualizzare il punteggio in tempo reale.
- Squadra di aggiornamento del punteggio: Un utente che aggiorna il punteggio in tempo reale per l'utente iscritto.
Una volta iniziata la partita, il team di aggiornamento del punteggio inizia a fare aggiornamenti sulla partita sulle proprie API che forniscono aggiornamenti a chiunque abbia la licenza per ricevere tali aggiornamenti. Di seguito viene mostrata una visione d'insieme dell'architettura dell'applicazione:
Nel nostro sistema supportato da NCache, le notifiche live saranno pubblicate sul NCache server del cluster che utilizzano Modello Cache Pubblica Sottoscrivi dove un editore pubblica un messaggio che collega a un particolare argomento e l'abbonato che si è iscritto all'argomento riceve un aggiornamento ogni volta che viene apportata una modifica a quell'argomento. Nel nostro caso, ogni volta che si verificherà un aggiornamento della partita, verrà pubblicato e tutti gli utenti iscritti alla partita lo riceveranno come aggiornamento del punteggio della partita.
Tutti gli abbonati alla partita ricevono aggiornamenti immediati utilizzando NCache SignalR Backplane. SignalR Backplane offre NCache estensione del ASP.NET SignalR che consente un uso efficiente di ASP.NET SignalR in una web farm garantendo al contempo un flusso regolare di dati rilevanti a ciascun utente da più server. Il gestore della partita utilizza NCache Fonte di supporto per leggere e scrivere i dati della cache da e verso il database. Osservare la figura seguente per comprendere il funzionamento dell'applicazione:
Utilizzo di Pub/Sub per pubblicare e iscriversi con gli aggiornamenti delle partite
utilizzando NCache Pub/Sub modello, l'utente si iscrive all'argomento per gli aggiornamenti delle partite. Ogni volta che il team di aggiornamento del punteggio aggiorna il punteggio, viene pubblicato un messaggio e l'utente iscritto viene informato dell'aggiornamento. L'utente abbonato riqualifica quindi ogni volta i dati appena aggiornati, da cui il punteggio aggiornato.
Il codice riportato di seguito descrive come pubblicare un messaggio su un argomento specifico.
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); |
Il codice seguente mostra come un utente può iscriversi a un argomento specifico
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)); } |
utilizzando SignalR Backplane per ricevere aggiornamenti sulla partita
NCache SignalR Backplane è un'estensione fornita da NCache per mantenere connessioni persistenti con tutti gli utenti iscritti per aggiornamenti costanti. La parte migliore dell'offerta di questo è ridurre al minimo i ritardi costanti e aggiungere funzionalità in tempo reale all'applicazione, quindi nessun ritardo frustrante.
Guarda il codice qui sotto per mostrartelo NCache SignalR Backplane possono essere registrati nella tua domanda:
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(); |
Sorgente di supporto per la lettura/scrittura di dati dall'origine dati
La tua applicazione deve rimanere sincronizzata con il tuo database in modo che i punteggi delle partite vengano aggiornati anche nell'origine dati. NCache fornisce Dati fornitori di origine che includono:
- Provider di lettura: Per eventuali aggiornamenti non memorizzati nella cache, il database viene esaminato direttamente per recuperare i dati aggiornati.
- Scrivi tramite fornitore: Per mantenere l'origine dati sincronizzata con l'origine dati, i dati vengono scritti nella cache così come nell'origine dati, quindi zero incoerenze.
Tenendo presenti i due fattori precedenti, guarda il codice seguente per mantenere l'origine dati sincronizzata con la 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")); } |
Il codice seguente mostra il recupero degli aggiornamenti con il read-through abilitato e la scrittura dei dati aggiornati nella cache e nell'archivio dati.
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); |
Per riassumere tutto...
Abbiamo appena imparato a creare un'applicazione di tabellone segnapunti dal vivo utilizzando NCache che può ospitare un numero enorme di utenti in streaming live senza problemi o incongruenze. Quant'è fico? Sono finiti i giorni in cui un obiettivo veniva mostrato pochi minuti dopo che era effettivamente accaduto. Ora puoi divertirti con il tuo gioco preferito in movimento!
Allora, per quale squadra tifi? Anche! Non dimenticare di dare un'occhiata alle nostre altre caratteristiche e casi d'uso molto interessanti, NCache non delude mai.
I tabelloni digitali svolgono un ruolo cruciale nel fornire aggiornamenti e informazioni in tempo reale agli appassionati di sport. Nel contesto di un'applicazione di punteggio in tempo reale, è fondamentale disporre di un sistema efficiente e affidabile. NCache offre una soluzione di cache distribuita che garantisce prestazioni e scalabilità ottimali per la gestione di un numero elevato di utenti e delle loro richieste. Sfruttando il calcolo distribuito in memoria, NCache riduce al minimo i problemi tecnici e i ritardi della rete, offrendo un'esperienza senza soluzione di continuità agli utenti. L'importanza di un tabellone segnapunti digitale ben funzionante non può essere sopravvalutata e soluzioni come NCache contribuire a migliorare l'esperienza complessiva degli appassionati di sport.