¿Quién no ama los deportes? Cada año, cuando comienza la temporada deportiva, todos empezamos a animar a nuestros equipos favoritos. Ahora, ¿cuántas veces una agenda apretada o una emergencia en el trabajo te ha hecho perder un juego, también cuando juega tu equipo favorito? Bastante seguro de que todos hemos estado allí. Esto nos lleva al concepto de tabla de clasificación: una tabla de puntuación que muestra la clasificación o los puntos de datos de una manera bien calculada para hacer frente a lo que se ha perdido. Qué NCache lo que hace es hacer que su aplicación de clasificación sea mucho más eficiente con una solución de almacenamiento en caché distribuido para lograr un rendimiento magnífico. Discutamos cómo.
¿Qué estamos tratando de lograr aquí?
Entonces, supongamos que desea crear una aplicación que reciba actualizaciones en vivo de los lugares de los partidos y las muestre a todos los usuarios que se han suscrito a las actualizaciones. Para un partido que ya terminó, el usuario obtiene una puntuación detallada y los resultados del partido. Del mismo modo, el usuario suscrito también recibe una notificación cuando comienza un nuevo partido.
Hay toneladas de sistemas que le brindan esta funcionalidad, sin embargo, para una aplicación de puntaje en vivo, las fallas y demoras en la red son un gran revés. Bueno, la buena noticia de que NCache trae es que no necesitas preocuparte por todo eso con NCache.
NCache utiliza computación distribuida en memoria para brindarle la salida más rápida y óptima para cientos y miles de usuarios, ya sean antiguos o recién ingresados. Gestiona el tráfico pesado sin ahogarse en los cuellos de botella de rendimiento que hacen que se ralentice o se bloquee. Además, es un almacén de datos en memoria distribuido y linealmente escalable, que maneja cualquier cantidad de solicitudes de clientes y garantiza una conexión confiable con el cliente de caché. Hemos creado para usted una aplicación de muestra lista para ejecutar y está disponible en Github como una demostración
NCache Aplicación de clasificación: una descripción general
Comencemos con la descripción general de lo que hace la aplicación. La funcionalidad básica se divide en dos partes:
- Usuario suscrito: Un usuario se suscribió para ver la puntuación en vivo.
- Equipo de actualización de puntuación: Un usuario que actualiza la puntuación en vivo para el usuario suscrito.
Una vez que comienza el partido, el equipo de actualización de puntaje comienza a realizar actualizaciones sobre el partido en sus API que brindan actualizaciones a quien tenga la licencia para recibir esas actualizaciones. A continuación se muestra una vista general de la arquitectura de la aplicación:
En nuestro sistema respaldado por NCache, las notificaciones en vivo se publicarán en el NCache servidores de clúster que utilizan Modelo de suscripción de publicación de caché donde un editor publica un mensaje con un enlace a un tema en particular y el suscriptor que se ha suscrito al tema recibe una actualización cada vez que se realiza un cambio en ese tema. En nuestro caso, cada vez que se produzca una actualización de un partido, se publicará y todos los usuarios suscritos al partido la recibirán como una actualización de la puntuación del partido.
Todos los suscriptores del partido reciben actualizaciones instantáneas usando NCache SignalR Backplane. SignalR Backplane es un NCache extensión de la ASP.NET SignalR que permite el uso eficiente de ASP.NET SignalR en una granja de servidores web al tiempo que garantiza un flujo fluido de datos relevantes para cada usuario desde varios servidores. El manejador de coincidencias usa NCache Fuente de respaldo para leer y escribir los datos de caché desde y hacia la base de datos. Mire la figura a continuación para comprender el funcionamiento de la aplicación:
Usar Pub/Sub para publicar y suscribirse con actualizaciones de coincidencias
Usar NCache Pub/Sub modelo, el usuario se suscribe al tema para recibir actualizaciones de coincidencias. Cada vez que el equipo de actualización de puntaje actualiza el puntaje, se publica un mensaje y el usuario suscrito recibe una notificación sobre la actualización. El usuario suscrito vuelve a entrenar los datos recién actualizados cada vez, por lo tanto, la puntuación actualizada.
El código que figura a continuación describe cómo publicar un mensaje sobre un tema específico.
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); |
El siguiente código muestra cómo puede un usuario suscribirse a un tema específico
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)); } |
Usar SignalR Backplane para recibir actualizaciones sobre el partido
NCache SignalR Backplane es una extensión proporcionada por NCache para mantener conexiones persistentes con todos los usuarios suscritos para actualizaciones constantes. La mejor parte de ofrecer esto es minimizar los retrasos constantes y agregar funcionalidad en tiempo real a su aplicación, por lo tanto, sin retrasos frustrantes.
Mira el código de abajo para mostrarte NCache SignalR Backplane se puede registrar en su aplicación:
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(); |
Fuente de respaldo para lectura/escritura de datos desde la fuente de datos
Su aplicación debe permanecer sincronizada con su base de datos para que los puntajes de coincidencia también se actualicen en la fuente de datos. NCache proporciona un Datos proveedores de origen que incluyen:
- Proveedor de lectura: Para cualquier actualización que no se almacene en caché, se consulta directamente la base de datos para obtener los datos actualizados.
- Proveedor de escritura a través: Para mantener la fuente de datos sincronizada con la fuente de datos, los datos se escriben en la memoria caché así como en la fuente de datos, por lo que no hay incoherencia.
Teniendo en cuenta los dos factores anteriores, mire el código a continuación para mantener la fuente de datos sincronizada con su caché.
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")); } |
El siguiente código muestra la obtención de actualizaciones con la lectura habilitada y la escritura de los datos actualizados en la memoria caché y en el almacén de datos.
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); |
Para resumir todo esto…
Acabamos de aprender cómo hacer una aplicación de marcador en vivo usando NCache que puede acomodar a una gran cantidad de usuarios que transmiten el partido en vivo sin fallas ni inconsistencias. ¿Cuan genial es eso? Atrás quedaron los días en que un gol se mostraba minutos después de que realmente sucediera. ¡Ahora puedes disfrutar de tu juego favorito mientras viajas!
Entonces, ¿a qué equipo estás apoyando? ¡También! No olvide consultar nuestras otras características y casos de uso muy interesantes, NCache nunca decepciona.
Los marcadores digitales juegan un papel crucial al proporcionar actualizaciones e información en tiempo real a los aficionados al deporte. En el contexto de una aplicación de puntuación en vivo, es primordial contar con un sistema eficiente y confiable. NCache ofrece una solución de almacenamiento en caché distribuida que garantiza un rendimiento y una escalabilidad óptimos para manejar una gran cantidad de usuarios y sus solicitudes. Al aprovechar la computación en memoria distribuida, NCache minimiza las fallas y demoras de la red, brindando una experiencia perfecta para los usuarios. No se puede subestimar la importancia de un marcador digital que funcione bien, y soluciones como NCache contribuir a mejorar la experiencia general de los entusiastas del deporte.