Escala ASP.NET SignalR Aplicativos com cache distribuído

Webinar gravado
Kal Ali e Nick Zulfiqar

ASP.NET SignalR é uma biblioteca de código aberto para desenvolvedores da Web que está sendo usada com muita frequência nos dias de hoje para adicionar funcionalidades da Web em tempo real aos aplicativos. Você pode usar ASP.NET SignalR para enviar conteúdo do lado do servidor para todos os clientes conectados assim que as informações estiverem disponíveis.

O SignalR ajuda a simplificar os esforços de desenvolvimento necessários para adicionar funcionalidades da Web em tempo real ao seu aplicativo. Alguns aplicativos comuns que podem usar o SignalR são sistemas de bate-papo, Internet of Things (IoT), aplicativos de jogos, sistemas de reservas de companhias aéreas, aplicativos de bolsa de valores e muito mais.

O problema com o SignalR é que ele não é escalável por padrão. E, para criar um web farm, a Microsoft oferece a opção de usar um SignalR backplane que geralmente pode ser definido como um armazenamento central de mensagens e ao qual todos os servidores web estão conectados simultaneamente. As mensagens do SignalR são transmitidas para todos os clientes finais conectados através do backplane.

Tipicamente, SignalR backplane é um banco de dados relacional que é lento e não escalável para lidar com cargas extremas de mensagens, que é um requisito principal para aplicativos da Web em tempo real de alto tráfego. SignalR backplane também precisa ser muito confiável e altamente disponível para que você tenha cem por cento de tempo de atividade no final do aplicativo.

Neste webinar você verá como NCache SignalR backplane é uma opção melhor em comparação com as opções tradicionais para implantar e dimensionar seu ASP.NET SignalR aplicações web com backplane. Demonstramos como NCache pode ser usado como seu SignalR backplane sem exigir qualquer codificação importante.

Nosso Arquiteto de Soluções Sênior abrange:

  • Introduction to ASP.NET SignalR e seus casos de uso comuns
  • Problemas com o dimensionamento de aplicativos SignalR e com opções tradicionais de backplane
  • Sua marca NCache Backplane é melhor opção em comparação
  • utilização NCache como Backplane para seus aplicativos ASP.NET
  • NCache Pacotes Nuget para SignalR backplane
  • Crie, implante e execute aplicativos SignalR usando NCache painel traseiro

Então, hoje vamos falar sobre o SignalR como a tecnologia, como e onde é possível candidato a ser usado dentro de suas aplicações e quais são os problemas que são vistos especialmente, no caso de você introduzir o Backplane neste cenário e como são as opções possíveis que você tem e como você pode basicamente contorná-las? Então, vou cobrir todas essas coisas diferentes e, como produto de amostra, usarei NCache. Então, vamos chegar a essa parte mais tarde, inicialmente vamos apenas cobrir algumas teorias básicas lá.

Introdução ao SignalR

Então, vamos para a introdução real ao SignalR. Então, essas são algumas definições que copiei da documentação da Microsoft. Então, o que é SignalR? O SignalR é basicamente uma biblioteca de código aberto que os desenvolvedores podem usar para introduzir a funcionalidade da Web em tempo real em seus aplicativos ASP.NET. Então, deixe-me dar um exemplo para explicar, como e o que exatamente quero dizer aqui. Por exemplo, você tem um usuário que está acessando uma página da web e ele tem um determinado bit de dados, que está presente na página, mas se esses dados precisam ser atualizados ou se o usuário deseja obter dados atualizados em cenários normais , o usuário ou tem que atualizar a página, basicamente o usuário tem que enviar uma requisição e então em resposta a que os dados atualizados são recebidos, ou isso ou tem que haver alguma longa espera que precisa ser implementada na parte de trás. Mas se você tiver o SignalR, isso não seria necessário e vou chegar a esses detalhes mais tarde e este é um dos casos de uso muito bons em que o SignalR é um candidato muito bom.

Então, em segundo lugar, o SignalR oferece a capacidade de ter vários conteúdos de push de código diretamente para o lado do cliente. Então, basicamente a parte em que o cliente tem que enviar uma requisição para obter os dados atualizados é que não precisa mais estar presente. Então, basicamente, vocês são os clientes, todos os clientes realmente conectados ao servidor web serão atualizados assim que houver novos dados no servidor. Assim, o servidor não precisa esperar que o cliente realmente solicite novos dados. Os dados seriam atualizados automaticamente no cliente. Então, a melhor coisa sobre o SignalR é que ele expõe a funcionalidade para você. Portanto, você só precisa introduzir os recursos do SignalR em seu aplicativo e chamar algumas funções específicas e todo o resto é tratado pelo SignalR. Então, seu aplicativo estaria usando o SignalR para enviar uma mensagem de, por exemplo, clientes para serviço e de servidores para cliente, seja qual for o seu cenário e tudo mais e por tudo mais, quero dizer a camada de transporte. Como a mensagem é transferida e como ela é notificada, todo o resto é tratado pela lógica do SignalR. Portanto, você não precisa fazer isso em seu aplicativo, basta introduzir essas APIs em seu aplicativo e todo o resto é tratado automaticamente pelo SignalR. Então, neste diagrama, se você pode ver aqui.

Vou apenas dar-lhe um exemplo. Então, no SignalR existe um conceito de Hub. Então, neste diagrama aqui, podemos ver que o servidor, este é um servidor web e este é um cliente conectado. Pode ser um cliente HTML ou JavaScript. Então, este servidor é capaz de chamar esta função myClientFunc() no cliente aqui e vice-versa. Se você olhar para este diagrama.

O cliente é capaz de chamar esta função específica meuServidorFunc() na extremidade do servidor. Então, basicamente com HTTP todos sabemos que é um protocolo sem estado. Há uma solicitação e depois há uma resposta e não há mais nada, permanece todo o resto, mas com o SignalR o que acontece é que embaixo do SignalR usa o WebSocket para manter as conexões. Então, esses são para as tecnologias mais recentes, mas nas mais antigas, eles usam o normal nas básicas, mas usa o conceito de WebSockets para o qual é capaz de invocar funções do servidor para o cliente e depois do cliente para o final do servidor depende de como isso é feito.

Então, deixe-me explicar alguns casos de uso gerais para o SignalR. Então, o primeiro é um sistema de chat. Este também é um projeto de amostra que é compartilhado pela própria Microsoft e na minha demonstração também, estarei usando um sistema de bate-papo fornecido pela Microsoft e terei NCache integrado com ele, mas vamos voltar aos exemplos aqui. Então, aqui você precisa de mensagens em tempo real que precisam ser enviadas, por exemplo, se você tem um grupo onde há número de membros presentes dentro do grupo e se algum membro enviar uma mensagem, essa notificação de mensagem precisa ser recebida por todos os membros do grupo e isso precisa ser feito instantaneamente. Há um atraso de qualquer tipo que não pode ser concedido e o mesmo caso com a indústria de jogos. Então, por exemplo, você tem jogos multiplayer online onde muito pensamento precisa ser feito porque há muitos jogadores jogando no final da mesma sessão juntos e os detalhes do jogo precisam ser sincronizados com todos eles .

O terceiro caso de uso é, por exemplo, o sistema de reservas de companhias aéreas. Portanto, se um bilhete ou um assento específico foi reservado, todas as outras pessoas ou todos os outros usuários que estão visualizando esses dados específicos precisam ser notificados de que esse bilhete específico ou esse assento específico já está reservado e não pode ser reservado não mais.

Exemplos semelhantes de ações porque se eles estão mudando constantemente os valores estão subindo e descendo. Portanto, eles precisam ser atualizados no cliente rapidamente e é um requisito muito bom.

Outra é um conteúdo de segunda tela, que pode ser anúncios ou qualquer outro tipo de notificação que precisa ser exibida e, finalmente, há a Internet dos dispositivos, a Internet das coisas. Então, basicamente, esses dispositivos estão constantemente coletando alguns dados, analisando-os, enviando algumas notificações. Então, todas essas coisas precisam de um certo tipo de confiabilidade, assim como há uma urgência para que elas sejam recebidas nos receptores. Portanto, todos esses casos de uso são cenários muito bons em que o SignalR pode ser usado e, geralmente, falando sobre hoje, ele está realmente sendo usado agora.

Então, se eu pudesse ir para o próximo slide. Pessoal, se você tiver alguma dúvida, sempre pode entrar e Nick me avisará se houver uma pergunta e ficarei feliz em responder.

Escalando aplicativos SignalR

Então, vamos falar sobre dimensionar aplicativos SignalR. Então, se você olhar para este exemplo aqui.

Este exemplo basicamente mostra que você tem um web farm e também pode ser um web garden, mas estou dando o exemplo com o web farm. Então, você tem um web farm aqui, onde você tem o número de servidores web aqui, você tem um balanceamento de carga entre todos os pedidos, que estão chegando a todos os servidores web que estão presentes em seu web farm e, em seguida, você tem todos esses clientes diferentes. Esses clientes estariam conectados a qualquer um dos servidores da web dentro do web farm.

Então, se você pegar este exemplo aqui, o cliente A está conectado a este servidor web e o cliente B está conectado a este servidor web e o cliente C está conectado a este servidor web. Então, a questão aqui é que, por exemplo, se este servidor web precisa enviar uma mensagem, ele precisa enviar qualquer tipo de mensagem ou notificação. Ele só poderá enviar essa notificação para seus clientes conectados específicos e, neste caso, se esse cliente A estiver enviando uma mensagem, ela será recebida apenas pelos clientes conectados a este servidor web e, neste caso, é apenas um.

Então, e se houver um bate-papo em grupo e isso estiver acontecendo entre pelo menos três clientes e eles estiverem conectados a três servidores web diferentes. Portanto, se um dos clientes enviar uma mensagem, os outros clientes agora poderão receber essa mensagem nesse cenário específico, pois somente os clientes conectados a um servidor Web específico poderão receber essa notificação. Portanto, neste caso, limita-se a que apenas os clientes conectados ao servidor web possam receber esta notificação e para se livrar disso o SignalR introduziu um termo com o nome SignalR Backplane.

SignalR Backplane

Deixe-me explicar o que é isso exatamente. Então, se você pegar o mesmo exemplo, mas um pouco diferente de um cenário diferente, você tem um web farm bem aqui e você tem um balanceador de carga no meio, vamos supor que e todas as solicitações do cliente estão chegando através desse balanceador de carga e chegando ao seu respectivo serviço web.

SignalR Backplane Abordagem
SignalR Backplane Abordagem

Então, neste caso aqui, há um barramento compartilhado, há um repositório compartilhado que está conectado a todos os servidores web presentes no formulário aqui. Então, se você tiver, vamos supor que você tenha dez servidores da Web e todos eles estariam realmente conectados a este backplane aqui e este é o lugar comum que será usado para enviar ou basicamente transmitir as mensagens ou quaisquer notificações para todos os servidores web conectados.

Portanto, neste caso, se este servidor web estiver gerando uma notificação ou mensagem, ele não enviará diretamente para os clientes conectados. Na verdade, ele primeiro o enviaria para o Backplane e, uma vez que o Backplane recebesse essa notificação ou mensagem, ele o enviaria para todos os servidores da Web conectados e, em seguida, os servidores da Web os enviariam para seus clientes conectados e, neste forma, garante que a mensagem ou notificação não se limite apenas aos clientes conectados desse servidor web específico. Ele é recebido por todos os clientes conectados a um web farm específico, por exemplo, certo. Então, vamos dar este passo a passo.

Então, por exemplo, houve uma notificação de que este servidor da web tinha que ser enviado. Então, a primeira coisa que vai fazer é notificar o Backplane aqui e o que o Backplane vai fazer aqui, vai transmitir isso para todos os servidores web conectados aqui. Então, a primeira mensagem recebida pelo Backplane e depois o Backplane enviou para o servidor um e depois para o servidor dois aqui e depois esses dois nesses servidores web específicos, enviaram essa mensagem para todos os clientes conectados em seu cenário.

Então, neste caso, diferentemente do cenário que estava aqui, se, por exemplo, houver um bate-papo em grupo, como mencionei anteriormente, todos esses clientes não teriam uma experiência consistente ou uma visão, mas neste caso aqui, se houver um grupo chat acontecendo, todos os clientes teriam uma visão consistente, eles seriam notificados instantaneamente sobre qualquer atualização ou qualquer nova mensagem que chegasse. Então, esse é o principal benefício de introduzir um Backplane no cenário, mas agora, vamos para ver quais são as limitações que foram vistas com um cenário Backplane e quais são as opções possíveis que podemos ter?

Gargalos com SignalR Backplane

OK. Então, eu estava mencionando Gargalos com SignalR Backplane. Então, esses são os principais gargalos que são vistos dentro do SignalR Backplane e estas são também as oportunidades que qualquer possível candidato pode ser marcado para ser usado como SignalR Backplane no cenário SignalR.

Latência e taxa de transferência

Então, o primeiro é a latência e a taxa de transferência. SignalR Backplane precisa ter latência muito baixa e alta taxa de transferência e deixe-me explicar, o que significa baixa latência? Latência basicamente, significa o tempo que SignalR Backplane ou Backplane leva para processar uma mensagem uma vez que a recebe, o tempo que leva para processar essa mensagem e depois transmiti-la ou enviá-la para todos os serviços da web conectados neste cenário, que é a latência.

Então, ele precisa ser muito mínimo basicamente, o que isso significa é que, assim que receber uma mensagem, ele precisa enviá-la rapidamente para todos os servidores da Web conectados no web farm. Por exemplo, e então o throughput é o número total de mensagens, que ele pode fazer em um determinado período de tempo e pode ser um segundo, dez segundos ou até cem segundos dependendo da escala de medição que está presente aqui.

Normalmente, em um ambiente de implementação local, você tem esses bancos de dados como em seu Backplane, mas há poucas limitações com o banco de dados. Os bancos de dados geralmente são lentos, não conseguem escalar horizontalmente e geralmente ficam bloqueados sob alta carga de transações. Então, eles são lentos e não conseguem escalar porque é um único servidor e há um backup, por exemplo, se for um cenário, mas é um único servidor e há um certo limite para o qual ele pode processar o número de solicitações que chegam depois, que ele começará a ficar sobrecarregado por essas notificações por transações e isso realmente começará a afetar seu aplicativo. Portanto, você pode basicamente dimensionar o número de servidores da Web em seu ambiente para lidar com o aumento da carga vindoura do seu formulário da Web, mas quando esses aplicativos precisam entrar em contato com um banco de dados. Por exemplo, no banco é aí que está o gargalo e é aí que você está, todos os seus aplicativos são atingidos na parte de desempenho.

Entrega Garantida de Mensagens

A próxima coisa é a entrega garantida de suas mensagens. SignalR Backplane deve ser confiável, deve garantir uma entrega garantida de mensagens. Não deve haver um cenário em que uma mensagem não foi entregue tudo o que foi perdido ou devido a qualquer cenário que nunca foi recebido corretamente. Então, ele precisa ter uma garantia de entrega de mensagens.

Outro são os bancos de dados, como mencionei anteriormente, o banco de dados pode ficar sobrecarregado sob carga extrema e também há um único ponto de falha. Portanto, se esse servidor específico cair em todo o seu ambiente, basicamente, cair, não deveria ser o cenário, deve haver algum tipo de backup eficiente que possa, em cenário de emergência, em qualquer cenário, poder se recuperar muito rapidamente desse cenário específico.

Alta Disponibilidade de Backplane

A terceira é que precisa ter alta disponibilidade. Portanto, o SignalR precisa estar altamente disponível devido a qualquer cenário, se houver algum tipo de problema, todo o sistema deve ser desativado. Deve haver algum tipo de backup que possa ajudar a continuar as operações, não deve ser afetado muito rapidamente se houver uma situação. Deve haver algum tipo de backup e isso deve ser capaz de manter tudo ou manter o ambiente funcionando até que tudo possa ser restaurado de volta ao normal e isso pode ser em cenários planejados, onde há algum tipo de cenário de manutenção planejado ou não planejado onde qualquer coisa pode dar errado.

Então, se olharmos para este diagrama aqui.

Gargalo de escalabilidade no banco de dados
Gargalo de escalabilidade no banco de dados

Podemos olhar para o gargalo de escalabilidade com um banco de dados e é exatamente isso que eu estava explicando a vocês agora mesmo aqui, você tem todos os seus clientes que estão conectados e suas solicitações são redirecionadas através do balanceador de carga e este é o seu web farm . Como mencionei anteriormente, você pode dimensionar esse web farm, aumentar o número de servidores da Web e isso, por sua vez, aumentaria o número total de solicitações, que seu ambiente pode basicamente receber em um único ponto no tempo, mas o problema real depende, quando esses servidores da Web precisam entrar em contato com o back-end com o banco de dados na parte de trás e pode ser para qualquer cenário, mas não apenas para o SignalR ou para qualquer outro cenário também.

Cache distribuído na memória como SignalR Backplane

Então, vou apresentar a solução. A solução para isso é um cache distribuído na memória como um SignalR Backplane e eu vou como mencionado no início, eu vou usar NCache como um produto de amostra para isso e NCache é um produto de código aberto. Temos versões diferentes e você pode valorizá-las se necessário.

Cluster de servidores de cache

Então, deixe-me explicar o que é um Cache distribuído na memória? Então, basicamente o cache distribuído na memória é um cluster de servidores de cache baratos. Então, você tem diferentes servidores de cache hospedando o mesmo cache, é logicamente uma única unidade, mas por baixo existem vários servidores, que hospedam esse cache e, uma vez juntos, querem um número múltiplo de servidores. Eles não estão apenas puxando os recursos computacionais totais juntos, mas também puxando os recursos de memória. Então, como você tinha um número de servidores, você basicamente dimensiona o número de transações que podem ser feitas em um determinado tempo definido e também o número total de dados que podem ser armazenados.

Agora, estou explicando geralmente em termos de o que é um cache distribuído na memória? Não estou falando em referência ao SignalR, mas vou mapear todos esses recursos com os gargalos que foram discutidos inicialmente. Então, inicialmente estou apenas explicando e isso pode ser um cache distribuído, pode ser usado para um cenário de cache de objeto ou um cenário de cache de sessão, é para todos eles agora, mas vou mapear esses recursos lá também.

Cache sincronizado entre servidores

Portanto, aqui vários servidores agrupam o pooling em seus recursos de memória e também os recursos de energia computacional juntos e a próxima coisa é um cache sincronizado em todo o serviço. Então, com referência a NCache o que ele faz é mesmo que, por exemplo, você tenha quatro servidores de cache hospedando o mesmo cache e alguns dados novos sejam adicionados ao cache. Há um mapa de distribuição que é atualizado assim que os dados são adicionados ou atualizados ou mesmo removidos, são atualizados.

Portanto, a qualquer momento, mesmo que um dos servidores, um dos servidores de cache receba um novo item adicionado a ele, todos os outros servidores dentro do cluster serão notificados automática e instantaneamente de que há um novo item adicionado ao cache agora . Assim, ele garante que todo o ambiente permaneça sincronizado entre si e existem diferentes topologias para as quais os dados são mantidos no cache e isso é uma discussão separada, mas geralmente falando assim que o item é adicionado, todos os servidores no cluster obtêm notificado sobre um novo item que está sendo adicionado. Dessa forma, garante que seja imediatamente visível para todos os servidores presentes dentro do mesmo traje.

Escalabilidade Linear

O terceiro é linearmente escalável, como mencionei anteriormente, são vários servidores reunidos e não há limite para adicionar quantos servidores aqui, conforme necessário, e o cache se ajustará automaticamente. Basicamente, aumenta o total de solicitações que pode manipular, também aumenta o número total de dados de membros que podem ser adicionados ao mesmo cache. Então, é tudo linearmente escalável. Portanto, à medida que você dimensiona sua camada de aplicativo, também pode dimensionar sua camada de cache e esse foi um dos gargalos com bancos de dados. Você nunca pode dimensionar seu ambiente de banco de dados, mas com isso você pode dimensionar definitivamente seu servidor de cache, todo o seu cache e, dessa forma, você também pode aumentar o desempenho de seus aplicativos.

Replicação de dados para confiabilidade

A quarta é a replicação de dados para confiabilidade. Então, como eu mencionei para você anteriormente, estes são vários números, vários servidores que são reunidos. Assim, dependendo da topologia existem replicações sendo mantidas em outros servidores. Portanto, mesmo que um dos servidores fique inativo, os dados desse servidor perdido são replicados em qualquer um dos outros servidores e isso iniciaria automaticamente o processo de recuperação, então traria esses dados e os colocaria de volta em as partições ativas do cache. Se estamos falando de partição de réplicas, por exemplo, como uma topologia de NCache. Então, ele traria automaticamente esses dados e os adicionaria ao mesmo cache. Portanto, os dados não são perdidos, mesmo que um dos servidores tenha desaparecido e se houver algum cliente conectado a esse servidor, que foi perdido, eles detectariam isso automaticamente e fariam o failover de sua conexão com o serviço restante presente no cluster e isso é uma das outras coisas importantes, que não é um único ponto de falha. Portanto, se você tiver vários servidores, desde que tenha um servidor de cache restante no cluster, seu cache seria funcional, você responderia às solicitações que estão chegando, então, mesmo que um dos servidores fique inativo, todo o cache não cai. Seu ambiente não fica inativo e seus aplicativos continuam funcionando perfeitamente. Então, agora vou mapear todas essas coisas que acabei de discutir ou os gargalos que foram discutidos anteriormente para um SignalR Backplane.

Então, se você for aqui e o primeiro foi latência e taxa de transferência. Portanto, a latência, como mencionei anteriormente, é a quantidade de tempo de processamento. Então, se você tem muitos servidores gerando muitas mensagens e assim, essas solicitações estão vindo direto para o Backplane e o Backplane neste caso é Ncache. Então, se você sentir que seu ambiente está ficando bloqueado, você pode adicionar um número de servidores e isso aumentaria a capacidade total de lidar com esse número de solicitações.

Posso tirar uma dúvida aqui? Quão complexo é configurar NCache as SignalR Backplane? É muito fácil e temos uma explicação muito detalhada e explicada de um documento, que ajuda você a trabalhar com ele e eu vou passar exatamente por isso e pela parte de demonstração prática e vou me referir a essa questão lá.

Então, voltando aos gargalos que eram geralmente observados com o SignalR Backplane e mapeamento NCache em um recurso geral de cache de deficiência nele. Então, como mencionei anteriormente, sua latência fica muito baixa, pois você tem vários servidores, que podem realmente lidar com as solicitações que estão chegando. tiver baixa latência, a taxa de transferência cairá automaticamente e, em geral, seu desempenho geral cairá.

O segundo é a entrega garantida de mensagens. Assim, dentro do NCache algoritmo e lógica do cliente para o servidor, há muitas verificações sendo mantidas. Portanto, se, por exemplo, o cliente tentar se conectar ao cache clusterizado e, por qualquer motivo, não conseguir entregar essa mensagem, há tentativas internas que são implementadas. Assim, o cliente NCache cliente tenta se reconectar automaticamente ao servidor de cache e tudo isso é configurável, pois você pode configurar o número de tentativas, você pode configurar, quanto tempo deve repetir todas elas? Então, basicamente, você pode garantir que seu cliente seja capaz de se conectar ao seu cluster de cache específico neste caso e mesmo durante enquanto uma conexão já é mantida e está quebrada. Novamente, nesse cenário específico, isso garantiria que a mensagem realmente fosse entregue.

O terceiro é a alta disponibilidade do Backplane e esta é uma das principais coisas, eu mencionei inicialmente, você tem vários servidores hospedando o cache. Portanto, se um dos servidores ficar inativo, isso não significa que todo o cache ficará inativo. Seus outros servidores serão capazes de lidar com a carga que está chegando. Eles terão as conexões de failover de clientes para os servidores restantes presentes no cluster. Assim, dessa forma, ele garante alta disponibilidade, garante que as mensagens sejam realmente entregues e, por último, garante que o desempenho seja bastante aumentado à medida que você adiciona número, à medida que se expande em sua camada de aplicativo. Você também pode escalar horizontalmente na camada de armazenamento em cache.

Kal outra pergunta, quanta melhoria de desempenho pode obter todos os usos NCache as SignalR Backplane, em comparação com bancos de dados ou existem benchmarks? Ok, especificamente para o SignalR, posso ter que procurar esses benchmarks, mas geralmente, em termos de benchmarks, em termos de número de transações que estão sendo feitas, posso definitivamente mostrá-los mais tarde, houve uma captura de tela. Então, eu posso mostrar isso.

Ali. Portanto, esses são os números de escalabilidade e também são específicos para as topologias, mas geralmente são uma vez. Então, como você tinha vários servidores, você realmente aumenta o número total de transações que podem ser feitas e transações e divididas em leituras e gravações por segundo. Então, eles definitivamente podem ser comparados com bancos de dados porque não são escaláveis. Então, seria, eles se tornariam um momento em que o cache realmente apareceria em comparação com o banco de dados.

OK. Então, chegando aqui. Esta é uma implantação típica de Ncache.

Portanto, recomendamos ter uma camada de cache separada, como você pode ver, mas também pode ter o cache nos mesmos servidores que seu aplicativo. Então, isso também é suportado, mas recomendamos ter uma camada de cache separada e eu darei uma referência falando sobre isso. . Novamente, é linearmente escalável, você pode adicionar quantos servidores aqui forem necessários e, em seguida, todos esses servidores como mencionei anteriormente, eles não exigiram nenhum hardware específico. Não requerem alta tecnologia ou são servidores baratos e com NCache a única pré-gravação de NCache é .NET 4.0, caso contrário NCache é suportado em todos os ambientes Windows. Os sistemas operacionais recomendados são Windows Server 2008, 12 e 16, onde o .NET 4.0 com ele, você pode definitivamente trabalhar com isso com NCache.

Existem dois tipos diferentes de tipos de instalação. Existe o NCache instalação do servidor de cache, que pode realmente hospedar um cache e, em seguida, há um remote client instalação. Remote client podem ter um cache local ou basicamente autônomo e eles podem, eles têm as bibliotecas e recursos para que os clientes possam se conectar aos caches de cluster remotos e como mencionei anteriormente, os caches de cluster são os que estão hospedados na instalação do servidor de cache . Portanto, esta é uma implantação típica, todos os seus aplicativos estão conectados ao banco de dados na camada de cache e a camada de cache também está conectada ao banco de dados na parte de trás. Temos recursos, que também são suportados e isso pode ser usado. Então, NCache ele pode não apenas ser usado, por exemplo, como um Backplane para SignalR, mas pode ser usado para cache de dados, cache de sessão e temos outros webinars e documentação, que ajudam você a configurá-los se tiver interesse nisso.

OK. Então, agora este diagrama mostra basicamente NCache, é implantado como SignalR Backplane.

Então, é bastante semelhante ao mesmo, que estávamos olhando inicialmente. Então, este é o seu web farm aqui e vamos supor um balanceador de carga aqui. Então, que todas as solicitações do cliente estão sendo redirecionadas, então, em vez de um avião Backplane aqui, NCache é usado como um Backplane aqui e você tem vários servidores aqui, que são linearmente escaláveis, como mencionei anteriormente neste caso. Temos três servidores web, três servidores de cache aqui. Então, neste caso este servidor web aqui, gerou uma notificação ou uma mensagem e enviou esta notificação para o Backplane e neste caso, o Backplane foi NCache. O que NCache faria? Por sua vez, publicaria isso basicamente, transmitiria essa notificação para todos os assinantes desta mesma mensagem aqui. Assim, uma vez que esta mensagem foi recebida por NCache, foi então transmitido para todos os servidores web conectados. Neste caso e depois disso, foi enviado para todos os clientes conectados. Então, dessa forma, garantiu que fosse, que todos os clientes conectados tivessem aquele visualizador consistente e experiente enquanto trabalhavam em seu aplicativo e NCache foi conectado como um Backplane neste caso. E esses são os números, que eu já falei. Então, como você tinha vários servidores basicamente, você pode ver que há uma melhoria linear no número de leituras e no número de gravações que estão sendo feitas agora. Portanto, é linearmente escalável, não há interrupção, para que você possa adicionar quantos servidores aqui forem necessários em seu ambiente.

Demonstração prática

Então, eu vou para a parte de demonstração prática real e é aqui que estarei demonstrando como criar um cache? Estarei analisando rapidamente porque isso não faz parte da agenda, mas temos outros webinars nos quais abordamos todos os detalhes e falamos sobre as práticas recomendadas e outras recomendações gerais, quando você estiver criando cache ou configurando e configurando diferentes configurações relacionadas ao processo de criação de cache.

Instale NCache e criar um cache clusterizado

Então, a primeira coisa que você precisa fazer é instalar, fazer e baixar uma cópia do NCache do nosso site e, em seguida, você precisa instalá-lo em seu ambiente. Eu tenho duas máquinas, que têm NCache já instalado neles e vou usar isso. Então, eu vou apenas entrar nesses. Eu tenho esses logados demo1 e demo2 aqui. Então com NCache vem uma ferramenta NCache gerenciador através do qual você pode basicamente criar e configurar e trabalhar e gerenciar caches basicamente, então é quando você abre o NCache Gerente. Esta é a visualização que você obtém, se você clicar com o botão direito do mouse em caches clusterizados e clicar em criar novo cache clusterizado, essa é a visualização que você obtém.

Portanto, todos os caches precisam ser nomeados. Vou seguir em frente e dar-lhe um nome SignalRCache. Todos os caches precisam ser nomeados como mencionei anteriormente, mas isso não diferencia maiúsculas de minúsculas, você pode usá-lo de qualquer maneira. Clique em próximo. Estes são os quatro topologias e temos isso abordado em outros webinars.

Esta é uma estratégia de aplicação, vou manter tudo padrão e vou apenas configurar os dois servidores de cache que acabei de mostrar, demo1 e demo2 aqui, só clicar em próximo. Esta é a porta na qual o cluster se comunica. Então, NCache usa portas TCP/IP para manter suas conexões. Então, estou apenas procurando Nestor, esse é o tamanho do cache. Se você estiver usando NCache para SignalR e como BackPlane para SignalR, realmente não importa o tamanho porque é apenas uma que, que será mantida dentro do cache e assim que essa mensagem for enviada para os clientes conectados será removida. Então, além de um único item, não há mais nada que será armazenado no cache e no item único, falarei sobre isso mais tarde quando examinar a amostra real que vem com ele.

Então, vou manter tudo padrão aqui mesmo, vou desligar os despejos porque não quero que nada seja removido, mesmo no caso de o cache ficar cheio. Vou marcar esta caixa que vai iniciar o cache quando eu clicar em Finish, vou clicar em Finish. Então, é fácil criar um cache em seu ambiente usando NCache. Então, vou esperar o cache iniciar e depois adicionar um remote client para ele, que vai ser a minha máquina pessoal aqui. Ok, o cache foi iniciado e podemos ver aqui, essa atividade zero acontecendo neste momento, mas isso é porque não temos outro aplicativo, nenhum aplicativo basicamente conectado a esse cache agora.

Então, vou seguir em frente e adicionar minha máquina como um nó cliente para adicionar um cliente ou apenas clicar com o botão direito aqui e clicar em adicionar nó. Vou dar o IP das minhas máquinas pessoais, pode ser um nome de máquina ou um IP, ambos são suportados. Basta clicar em terminar aqui.

Podemos ver que minha máquina é adicionada como remote client bem aqui. Então, eu vou testar rapidamente este cache para ver se tudo está funcionando, tudo bem na verdade antes disso, deixe-me mostrar o ferramenta de monitoramento de NCache. Então, se você estiver usando NCache como um Backplane, você pode usar a ferramenta de monitoramento, que é uma excelente ferramenta, que fornece um pouco de detalhes sobre exatamente o que está acontecendo no cache, ajuda a depurar problemas e, na verdade, você obtém muitos detalhes, como o desempenho está acontecendo e como de onde e onde os acertos reais estão sendo obtidos e o que pode ser melhorado em geral. Portanto, se eu clicar com o botão direito do mouse no nome do cache aqui, posso clicar no cluster do monitor. Isso abre NCache monitor, que pode ser usado para monitorar o cache. Então, ele mostra um monte de coisas diferentes aqui, se você apenas abrir o painel do servidor aqui, ele me dá uma visão muito boa de exatamente o que está acontecendo no cache, gráfico diferente, este é o gráfico da CPU, este é a rede total que está sendo usada, esse é o tamanho do cache, esse é o total de solicitações que estão chegando. Então, ele mostra várias coisas diferentes que podem ser usadas e observadas quando você tem um ambiente de trabalho certo aqui e o que eu vou fazer é, da minha caixa pessoal aqui. Vou apenas executar um aplicativo de ferramenta StressTest para simular uma carga fictícia no cache. Esta ferramenta vem instalada com NCache. Então, eu só vou procurar. Vou digitar STR, vai aparecer a ferramenta StressTest.

Então, Kal enquanto você está extraindo dados, você pode responder que tipo de mainframe NCache usa para SignalR? OK. Então, basicamente NCache está usando o Modelo Pub/Sub. Então, todos esses clientes que são basicamente servidores web, eles estão conectados como editores e assinantes. Assim, qualquer um dos clientes pode realmente publicar uma mensagem e todos os clientes conectados também são assinantes. Assim, eles também serão notificados sobre isso. Portanto, é basicamente o modelo Pub/Sub, temos uma API implementada separada e completa, bem como toda a estrutura de apenas Pub/Sub, mas sob o SignalR Pub/Sub está sendo usado, você também pode usá-lo separadamente.

Adicionar dados de amostra e monitorar cache

OK. Então, vou abrir a ferramenta StressTest. Então, este é o local, onde está realmente, é um C:\arquivos de programas\NCache\bin\ferramentas então, nós apenas procuramos uma ferramenta StressTest aqui, apenas abrindo a instância no prompt de comando, ela vai arrastar e soltar aqui. Ok, na verdade, eu apertei enter muito rápido apenas para limpar a tela. Ok, o que vou fazer é digitar ok, esta é a ferramenta StressTest. Vou dar um espaço dê o nome do cache, o nome do cache era signalrcache. Eu só vou apertar enter agora. Então, se eu voltar para essa visualização aqui e abrir as estatísticas, devemos ver as solicitações chegando e fazer isso agora. Ok, veja alguns pedidos chegando agora e aqui, você pode ver que há um monte de pedidos diferentes chegando para ambos os servidores de cache conectados agora. Então, parece que tudo está realmente funcionando bem e está recebendo uma solicitação também. Se você abrir a ferramenta de monitoramento aqui, você pode ver que um cliente conectado aqui, um cliente conectado aqui e se olharmos aqui, vemos que há um grande salto no número total de solicitações que estão chegando, você também pode ver que o gráfico de memória está sofrendo um pouco também.

Então, se verificarmos realmente que está funcionando. Então, eu vou parar essa ferramenta agora, ela vai voltar para o NCache Gerente. Vou clicar aqui com o botão direito. Vou limpar o conteúdo disso.

Executar amostra de bate-papo do SignalR

Então, agora que temos um cache configurado e está funcionando bem, nós o testamos, parece estar funcionando bem. Então, o que vou fazer é abrir um projeto de amostra que vem instalado no NCache e vou seguir a documentação, que está publicada em nosso site passo a passo de como basicamente você pode configurá-lo. Você pode configurá-lo, seu próprio aplicativo ASP.NET para usar NCache como um Backplane. Então, se eu voltar direto para o diretório de instalação do NCache que está em c:\arquivos de programas\ncache bem aqui, eu posso ir para a pasta samples e depois para dotnet e bem aqui, se apenas procurarmos aqui, podemos ver que há um exemplo SignalRChat dado aqui. Então, isso vem instalado com NCache e este é o mesmo, que vou usar na minha demonstração. Já abri aqui. Então, vou abrir a documentação e esta é a documentação que lhe dá uma visão passo a passo de como você pode configurá-lo dentro de seu próprio ambiente específico.

Então, se nós apenas formos aqui. Então, a primeira coisa que você precisa fazer é instalar o Pacote NuGet e deixe-me mostrar exatamente de qual pacote NuGet estamos falando. Então, se clicarmos aqui com o botão direito do mouse e clicarmos em gerenciar pacotes NuGet para solução. Tudo bem aqui, se entrarmos no navegador e estivermos navegando em nuget.org. só vou procurar NCache, ok e aqui mesmo, se você descer um pouco, acho que posso ter perdido, mas é a comunidade SignalR, ok sem tempo, que eu possa encontrá-lo, o nome do pacote NuGet é Alachisoft.NCache.SinalR. Então, ele deve vir até aqui, Alachisoft.NCache.SinalR. Então, isso precisa ser instalado dentro do seu aplicativo. Eu não preciso instalá-lo neste momento porque eu tenho uma instalação de NCache e já possui referências que exigirão bibliotecas, mas se você não estiver usando o NCache instalação, você pode definitivamente adicionar isso como um pacote NuGet. Você só precisa instalá-lo em seu projeto de produto de aplicativos.

O próximo passo aqui é incluir esses dois namespaces Alachisoft.NCache.SinalR e depois Microsoft Microsoft.AspNet.SignalR. Então, eles precisam ser introduzidos no Startup.cs, eu vou seguir o projeto de exemplo, mas você precisa fazer isso em referência à sua própria configuração específica. Então, se você entrar no Startup.cs aqui, você vai logo no topo, podemos ver que esses dois já são referência aqui Alachisoft.NCache.SinalR e Microsoft.AspNet.SignalR. Então, já está somado aqui.

Vamos ver o próximo passo. Então, agora precisamos modificar o web.config. Então, precisamos adicionar essas duas chaves específicas aqui e deixe-me explicar o que são? O primeiro, que é pelo nome cache, é o nome real do cache. Então, você precisa dar a ele o cache que você vai usar, que vai estar funcionando e você precisa usar isso.

A segunda é a chave par e é isso que diferencia as múltiplas. Portanto, se você tiver o mesmo cache sendo usado como meio como um Backplane para vários aplicativos diferentes. Certo, então, isso é o que diferencia. Então, ele abre basicamente um canal dentro do cache através do qual todos os aplicativos, que têm o mesmo valor, seriam notificados. Então, se houver dois aplicativos, que precisam se comunicar entre si, eles precisam ter esse valor para ser o mesmo, mas se houver aplicativos diferentes, você pode alterar isso de acordo com seu ambiente específico. Então, agora, diz-se Chat aqui e se voltarmos ao projeto de amostra aqui e entrarmos no web.config, podemos ver que ele está configurado aqui.

O nome do cache é diferente e o que vou fazer é mudar para o cache que criamos e que é o signalrcache. Como mencionei anteriormente, este é o nome do cache que não diferencia maiúsculas de minúsculas, então você pode usar apenas isso. Então, eu vou seguir em frente e salvar isso. Vamos voltar aqui, então essas coisas são basicamente, essas são as sobrecargas que podem ser usadas, vou mostrar o que estou usando no meu ambiente. Inicialmente, você está apenas se registrando em variáveis ​​de string, que vão receber os valores que armazenamos inicialmente no web.config. Esse é o nome do cache, bem como o canal, por exemplo, nome e é aqui que você especifica que NCache deve ser utilizável. Basicamente, são apenas duas ou três linhas de código que precisam ser introduzidas em seu aplicativo. Você deve ser bom para ir usar NCache como um Backplane em seu aplicativo.

Havia uma pergunta inicialmente que se referia a quão difícil é configurar NCache como um Backplane para sua aplicação específica e é muito fácil. Então, há apenas três linhas de código que precisam ser introduzidas e você deve ter NCache para ser como um Backplane para seu ambiente específico e se eu voltar ao meu projeto aqui, indo para startup.cs. Temos o mesmo código específico. Há apenas algumas verificações presentes aqui, apenas para garantir que os valores estejam realmente em vigor e, em seguida, aqui. Temos esta chamada aqui, que apresenta NCache para ser usado como o Backplane para isso. Então, o que vou fazer agora é executar este aplicativo e abrir algumas instâncias dele. Para que eu possa lhe mostrar como esta sala de bate-papo está funcionando agora. Então, vou clicar em executar aqui e deve abri-lo. OK. Então, a compilação está feita, ele deve abrir agora. Ok, só esperando o carregamento, não demora tanto, mas é agora.

Ok, enquanto isso, deixe-me passar rapidamente pelos slides que estamos usando. Então, se eu clicar em Default.html aqui, deve haver um pop-up aqui, que me pede o nome que vou usar. Então, como esta é uma sala de bate-papo, você precisa se registrar com o nome. Então, quando você envia uma mensagem, os outros destinatários devem saber exatamente de quem esta mensagem está vindo. Então, aqui mesmo, está me pedindo meu nome. Vou seguir em frente e dar o nome de Kal. Vou escrever olá e tentar enviá-lo, enquanto isso vou abrir outra instância dele aqui, ele deve abrir. Ainda não enviou, mas vamos verificar se o nome do cache estava correto, volte para web.config. Acho que errei o nome. Então, é signalrache. Talvez eu precise executá-lo novamente. Vou seguir em frente e parar, vai fechar essas instâncias, obviamente, já que o nome do cache não estava correto. Estes não funcionariam, então eu preciso executá-los novamente. OK. Então, vamos verificar mais uma vez o signalrcache, está correto agora. Ele está parando as instâncias neste momento. Ok, só vou executá-lo mais uma vez, isso deve ser mais rápido porque já está feito.

Enquanto isso, se você tiver alguma dúvida? Por favor, sinta-se à vontade para perguntar. OK. Então, a compilação está pronta e agora, estamos apenas abrindo tudo bem. Então, Kal, eu tenho uma pergunta aqui, funciona para o núcleo SignalR também? Sim, funciona porque NCache dá suporte para .NET Core também. Então, funciona com isso sim. Ok, outra pergunta é quais recursos de mensagens NCache oferece além do SignalR? Como mencionei inicialmente abaixo do SignalR, toda a implementação como Backplane, NCache está usando o modelo Pub/Sub, mas fora isso, você também pode usar o Pub/Sub separadamente. Ele sempre precisa ser usado como um Backplane para SignalR, mas, caso contrário, temos eventos e eventos podem ser eventos orientados a dados ou podem ser eventos específicos definidos pelo usuário, com os quais você pode basicamente notificar outros aplicativos para determinados eventos. O item mais recente é adicionado, atualizado ou excluído e temos esses recursos, então você também tem o recurso de consulta contínua.

Portanto, com isso especifica determinados resultados definidos no cache e se alguma atualização for feita especificamente nesse conjunto de resultados e puder haver vários itens no mesmo cache e qualquer um deles for atualizado, será o cliente que solicitou pois ele vai ser notificado sobre isso, então esses são outros que estão presentes também. Então, acabei de clicar no padrão. Deveria perguntar meu nome, agora vou esperar por isso. OK. Então, vou dar o nome de Kal e espero que funcione. Então, eu vou digitar olá e enviá-lo. Agora, vou copiar este link e colar aqui. Ok, fornecendo o nome, vou dar o nome de Nick. Tudo bem aqui, então aqui daqui, eu mandei uma mensagem com um alô e ela foi recebida aqui também. Então, este é o olá do Nick. Então, vou digitar aquele olá do Nick e vou enviá-lo. Então, bem aqui, Nick envia esta mensagem de alô de Nick e se você olhar para trás na visão de Kal, também podemos ver isso aqui também.

Assim, podemos enviar várias mensagens aqui, quantas quisermos e elas serão recebidas por todos os clientes conectados a este cenário específico. Então, podemos ver que Kal enviou um monte de mensagens e elas foram recebidas na visão de Nick também. Então, eles são atualizados automaticamente, se você apenas enviar um último do Nick também pelo Nick e apenas enviá-lo, você pode ver que veio do Nick e também nesta visualização, podemos ver direito aqui. Então, se olharmos rapidamente para o cache que criamos e que está sendo usado por ele. Podemos ver que é um item adicionado aqui e como mencionei anteriormente apenas um objeto é adicionado, o resto é apenas uma fila que está sendo mantida temporariamente enquanto está sendo transferida.

Então, se usarmos uma ferramenta dentro NCache que atende pelo nome de chaves de cache de despejo, ele despejará as chaves que estão presentes no cache. Então, eu só quero mostrar a você rapidamente e nós damos o nome de signalrcache e apertamos enter.

Ele vai puxar todos os itens que estão presentes no cache. Então, neste momento eles são apenas um e podemos ver que há esse item colocado aqui, com o nome chat e esse valor de string é exatamente o mesmo que configuramos em nosso aplicativo em relação ao valor da chave do evento. Então, essa é a chave comum que precisa ser usada em todas as suas aplicações, que precisam usar esse canal específico para enviar e receber mensagens. Portanto, isso precisa ser o mesmo em todos os lugares e é exatamente isso que garantirá que todos os clientes conectados ou servidores da Web conectados a esse cache específico sejam notificados sobre qualquer coisa que esteja acontecendo. Então, é assim que é fácil ter NCache como um Backplane em seu aplicativo.

Se eu passar rapidamente pelo que já discutimos aqui, deixe-me terminar rapidamente a última tela e o último slide da apresentação aqui é que NCache embaixo disso. É usando o modelo Pub/Sub.

Então, você tem aplicativos clientes conectados, que podem ser aplicativos .NET ou aplicativos java e eles estão conectados como para editores e assinantes, nos dois sentidos. Assim, qualquer aplicação que envie qualquer cliente conectado enviando uma mensagem de palpite, ela recebe para todos os clientes conectados e dessa forma garante que todas as mensagens sejam realmente recebidas por todos os clientes conectados.

Então, se você passar rapidamente pelo que discutimos neste webinar de hoje, é que discutimos sobre o SignalR como uma tecnologia. O que é e como pode ajudar em diferentes cenários? Onde é extrema necessidade porque os aplicativos não podem esperar que o cliente realmente envie uma notificação ou só então eles podem responder com os respectivos dados. Eles querem que os clientes sejam notificados automaticamente de sua atualização com os dados atualizados rapidamente. Então, discutimos o que SignalR é? Como funciona basicamente? Quais são os diferentes casos de uso que são possibilidades possíveis e onde atualmente o SignalR também está sendo usado?

Portanto, eles não são apenas casos de uso futuros. Eles também são casos de uso atuais e como o dimensionamento de aplicativos SignalR pode ter algum tipo de problema com consistência e como o próprio SignalR introduziu o conceito Backplane através do qual eles podem garantir que todos os clientes conectados tenham uma visão consistente e obtenham notificado imediatamente de qualquer coisa que esteja acontecendo dentro do cache. Acho que há uma pergunta.

OK. Então, deixe-me discutir os gargalos associados ao SignalR Backplane. Discutimos esses três pontos principais e, como mencionei anteriormente, também eram as oportunidades que qualquer solução poderia ter e a solução sobre a qual falamos era um cache distribuído na memória. Neste caso foi NCache e mapeamos os diferentes recursos, coisas diferentes que NCache possui mais, que SignalR Backplane realmente precisa? NCache mapeou para eles perfeitamente e foi um excelente caso de uso, excelente candidato basicamente, ser é ser um Backplane para um aplicativo SignalR e discutimos sobre NCache. Quão NCache pode ser usado? Discutimos os números de escalabilidade e também passamos para a demonstração prática do projeto de amostra, que vem instalado com NCache e como ele pode ser usado e, em seguida, há esta documentação aqui, que ajuda em cada processo dessa configuração.

Então, acho que é sobre isso do meu lado, Nick até você. Obrigado, Kal, isso foi muito informativo, se alguém tiver dúvidas, por favor, avise-nos ou você pode digitar essas perguntas na caixa de perguntas. Só para recapitular NCache solução está disponível para download do nosso site www.alachisoft.com. Temos a edição da comunidade, a versão de código aberto, bem como o Enterprise Edition que você pode baixar, dê uma olhada na empresa vem com um período de teste de 30 dias, que você pode usar para testar antes de prosseguir e o código aberto é obviamente gratuito. Portanto, não há perguntas, gostaria de agradecer a todos por se juntarem a nós e agradecer a Kal pelo seu tempo e ansioso para vê-lo no próximo webinar futuro.

O que fazer a seguir?

 
© Copyright Alachisoft 2002 - . Todos os direitos reservados. NCache é uma marca registrada da Diyatech Corp.