Quem não ama esportes? Todos os anos, quando começa a temporada esportiva, todos começamos a torcer por nossos times favoritos. Agora, quantas vezes uma agenda lotada ou uma emergência no trabalho fez você perder um jogo, também quando seu time favorito está jogando? Tenho certeza que todos nós já estivemos lá. Isso nos leva ao conceito de placar – um placar que mostra a classificação ou os pontos de dados de maneira bem calculada para lidar com o que você perdeu. O que NCache é, tornar seu aplicativo de placar de líderes muito mais eficiente com uma solução de cache distribuído para obter um desempenho magnífico. Vamos discutir como.
O que estamos tentando alcançar aqui?
Então, vamos supor que você queira criar um aplicativo que receba atualizações ao vivo dos locais da partida e as exiba para todos os usuários que se inscreveram nas atualizações. Para uma partida que já terminou, o usuário obtém uma pontuação detalhada e os resultados da partida. Da mesma forma, o usuário inscrito também é notificado quando uma nova partida é iniciada.
Existem vários sistemas que fornecem essa funcionalidade, no entanto, para um aplicativo de pontuação ao vivo, falhas e atrasos na rede são um grande revés. Bem, a boa notícia que NCache traz é que você não precisa se preocupar com tudo isso com NCache.
NCache usa computação distribuída na memória para fornecer a você a saída mais rápida e ideal para centenas e milhares de usuários antigos ou recém-ingressados. Ele gerencia o tráfego pesado sem engasgar com os gargalos de desempenho, causando lentidão ou travamento. Além disso, é um armazenamento de dados em memória distribuído e linearmente escalável, lidando assim com qualquer número de solicitações de clientes e garantindo uma conexão confiável com o cliente de cache. Criamos um aplicativo de amostra pronto para executar para você e disponibilizamos em Github como uma demonstração.
NCache Aplicação de placar: uma visão geral
Vamos começar com a visão geral do que o aplicativo faz. A funcionalidade básica é dividida em duas partes:
- Usuário inscrito: Um usuário se inscreveu para ver o placar ao vivo.
- Equipe de atualização de pontuação: Um usuário atualizando o placar ao vivo para o usuário inscrito.
Assim que a partida começa, a equipe de atualização de pontuação começa a fazer atualizações sobre a partida em suas APIs que fornecem atualizações para quem tem licença para receber essas atualizações. Uma visão geral da arquitetura do aplicativo é mostrada abaixo:
Em nosso sistema apoiado por NCache, as notificações ao vivo serão publicadas no NCache servidores de cluster usando Modelo de assinatura de publicação de cache em que um publicador publica uma mensagem com link para um tópico específico e o assinante que se inscreveu no tópico recebe uma atualização sempre que uma alteração é feita nesse tópico. No nosso caso, sempre que ocorrer uma atualização da partida, ela será publicada e todos os usuários inscritos na partida receberão isso como uma atualização da pontuação da partida.
Todos os assinantes da partida recebem atualizações instantâneas usando NCache SignalR Backplane. SignalR Backplane é um NCache extensão do ASP.NET SignalR que permite o uso eficiente de ASP.NET SignalR em um web farm, garantindo o fluxo suave de dados relevantes para cada usuário de vários servidores. O manipulador de correspondência usa NCache Fonte de apoio para ler e gravar os dados de cache de e para o banco de dados. Observe a figura abaixo para entender o funcionamento do aplicativo:
Como usar o Pub/Sub para publicar e assinar com atualizações de correspondência
utilização NCache Pub/Sub model, o usuário se inscreve no tópico para atualizações de correspondência. Sempre que a equipe de atualização de pontuação atualiza a pontuação, uma mensagem é publicada e o usuário inscrito é notificado sobre a atualização. O usuário inscrito, portanto, treina novamente os dados recém-atualizados todas as vezes, daí a pontuação atualizada.
O código abaixo descreve como publicar uma mensagem sobre um tópico 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); |
O código abaixo mostra como um usuário pode se inscrever em um tópico 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)); } |
utilização SignalR Backplane para receber atualizações sobre a partida
NCache SignalR Backplane é uma extensão fornecida por NCache manter conexões persistentes com todos os usuários inscritos para atualizações constantes. A melhor parte de oferecer isso é minimizar os atrasos constantes e adicionar funcionalidade em tempo real ao seu aplicativo, sem atrasos frustrantes.
Veja o código abaixo para lhe mostrar NCache SignalR Backplane pode ser registrado em seu aplicativo:
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(); |
Fonte de apoio para leitura/gravação de dados da fonte de dados
Seu aplicativo precisa permanecer sincronizado com seu banco de dados para que as pontuações de correspondência também sejam atualizadas na fonte de dados. NCache fornece Data fornecedores de origem que incluem:
- Provedor de leitura: Para quaisquer atualizações não armazenadas em cache, o banco de dados é visto diretamente para buscar os dados atualizados.
- Escreva através do provedor: Para manter a fonte de dados sincronizada com a fonte de dados, os dados são gravados no cache, assim como na fonte de dados, portanto, zero inconsistência.
Mantendo os dois fatores acima em mente, veja o código abaixo para manter a fonte de dados sincronizada com seu 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")); } |
O código abaixo mostra a busca de atualizações com leitura habilitada e a gravação dos dados atualizados no cache, bem como no armazenamento de dados.
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 tudo…
Acabamos de aprender como fazer um aplicativo de placar ao vivo usando NCache que pode acomodar um grande número de usuários transmitindo a partida ao vivo sem falhas ou inconsistências. Quão legal é isso? Longe vão os dias em que um gol seria mostrado minutos depois de realmente acontecer. Agora você pode desfrutar do seu jogo favorito em qualquer lugar!
E aí, para qual time você está torcendo? Também! Não se esqueça de conferir nossos outros recursos e casos de uso muito interessantes, NCache nunca desilude.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições
Os placares digitais desempenham um papel crucial no fornecimento de atualizações e informações em tempo real para os fãs de esportes. No contexto de um aplicativo de pontuação ao vivo, ter um sistema eficiente e confiável é fundamental. NCache oferece uma solução de cache distribuído que garante ótimo desempenho e escalabilidade para lidar com um grande número de usuários e suas solicitações. Aproveitando a computação em memória distribuída, NCache minimiza falhas e atrasos na rede, proporcionando uma experiência perfeita para os usuários. A importância de um placar digital que funcione bem não pode ser exagerada, e soluções como NCache contribuir para melhorar a experiência geral dos entusiastas do esporte.