Seis maneiras de otimizar NCache Performance

Webinar gravado
Por Kal Ali e Sam Awan

NCache é um popular cache distribuído na memória de código aberto para .NET. Ele ajuda você a dimensionar seus aplicativos .NET armazenando em cache os dados do aplicativo e reduzindo essas viagens caras ao banco de dados. NCache escala linearmente, permitindo que você adicione mais servidores de cache ao cluster de camada de cache.

Aprenda a otimizar NCache desempenho configurando-o corretamente e também usando seus recursos de aumento de desempenho.

Este webinar cobre:

  • Introduction to NCache e sua arquitetura
  • Maneiras comuns NCache é usado
  • NCache recursos de aumento de desempenho
  • NCache opções de configuração de aumento de desempenho

Visão geral

Hoje, vamos apresentar um webinar sobre seis truques para melhorar NCache atuação. O modo deste webinar seria apenas ouvir. Você terá a capacidade de fazer qualquer tipo de pergunta que desejar. Há uma guia de perguntas e respostas no painel do lado direito. Você poderá digitar suas perguntas e um de nós poderá responder a essas perguntas para você. Durante o webinar, se você tiver alguma dúvida ou preocupação e não puder nos ouvir, por favor - novamente, você pode usar a janela de bate-papo. Kal vai falar toda a parte técnica da apresentação. Se houver algo que não seja tão técnico ou relacionado a vendas, vocês podem direcionar suas perguntas diretamente para mim. Dito isso, vou entregá-lo ao Kal e ele vai começar a apresentação.

Tudo bem. Obrigado Sam. Você poderia apenas confirmar que consegue ver minha tela, porque acabei de começar a compartilhá-la? Sim, eu posso ver sua tela perfeitamente bem. Tudo bem, perfeito. Então, ei pessoal, como Sam acabou de me apresentar, meu nome é Kal e o tópico do webinar de hoje é Seis maneiras de otimizar NCache Atuação.

Portanto, no webinar de hoje, abordaremos alguns detalhes gerais sobre NCache e também quais recursos você pode usar em seu aplicativo para otimizar o desempenho. Então, NCache já é uma solução de desempenho. Ele aumenta o desempenho de seus aplicativos rapidamente, pois reduz suas viagens ao banco de dados. Mas, com esses recursos, você pode realmente melhorar ainda mais e esses seis truques serão realmente baseados em casos de uso. Vou apresentar um caso de uso ao lado de cada um deles e com base no que se aplica ao seu cenário específico, você pode definitivamente usar isso e ver como isso funciona para você. Então, vamos cobrir algumas demonstrações práticas reais de diferentes aplicativos e, de acordo com isso, veremos como em diferentes situações NCache funciona e como esses recursos realmente nos ajudam. Então, eu vou prosseguir com a apresentação agora.

O problema de escalabilidade

Então, em primeiro lugar, vamos falar sobre o problema de escalabilidade que é visto na maioria dos cenários de implantação. Então, normalmente você tem um web farm, que fica atrás de um balanceador de carga e esse tipo de camada, esse cenário geralmente é muito escalável. Porque, como você vê que há mais carga chegando aos seus aplicativos, você pode basicamente adicionar mais servidores a essa camada e isso aumentaria a capacidade do seu ambiente, em termos de carga total que ele pode receber ou para exemplo, total de solicitações que ele pode receber, digamos, em um segundo.

O problema real, o gargalo real, está onde esses aplicativos precisam entrar em contato com a fonte de dados de back-end. Talvez para obter alguns dados de referência, talvez para obter algum outro tipo de dados armazenados lá. Então, basicamente é aí que está o gargalo. Normalmente, a fonte de dados de back-end é um banco de dados. Como todos sabemos, os bancos de dados são excelentes para armazenamento, mas o problema é que geralmente são lentos porque estão em disco. Eles tendem a engasgar sob alta carga de transações e não são muito escaláveis.

A Solução

Assim, em tais cenários as empresas/organizações tendem a caminhar para um NoSQL database, mas essa não é a abordagem ideal neste momento. Porque isso requer toda uma mudança de arquitetura, não apenas em seu aplicativo, mas também em seus dados reais para torná-los compatíveis entre si. Portanto, em tais cenários, uma abordagem ideal seria um cache distribuído na memória, como NCache, que é mais rápido e escalável, pois, tudo é colocado na memória. Então, se compararmos com um banco de dados, nesse caso ele estava presente no disco. Então, agora temos tudo presente na memória. É mais escalável porque o cache distribuído é logicamente uma única unidade, mas abaixo você tem vários servidores independentes hospedando esse cache em cluster.

É uma topologia muito escalável. Você pode adicionar quantos servidores aqui quiser. Como você sabe, o que ele faz é basicamente agrupar não apenas os recursos de memória para todos esses servidores, mas também o poder computacional de todos esses recursos. Portanto, à medida que você adiciona mais servidores, aumenta a capacidade do cache em termos de dados totais que podem ser armazenados. Assim como o total de operações ou carga total que pode levar.

Portanto, quando você vê que há mais carga chegando em seu web farm, você também pode aumentar o número de servidores em seu cluster de cache e isso tornaria essa camada também escalável. Portanto, agora sua camada de cache está correspondendo às solicitações que estão chegando do web farm. Então, agora ele realmente ajuda a remover essa parte de não escalabilidade que estava presente no banco de dados. A melhor parte disso é que não é um substituto para um banco de dados. Você pode usá-lo junto com ele. Então, o que ele faz é basicamente o cluster de cache fica bem entre seus aplicativos e seu banco de dados. Você ainda pode fazer chamadas diretas. Mas, o que ele faz é que você pode fazer NCache sua única fonte de dados e, usando isso, temos recursos de camada de acesso a dados fornecidos com esse cache, através dos quais você pode, na verdade, o cache gravar dados nas fontes de dados de back-end, bem como obter dados do back-end fontes de dados.

Portanto, usando isso, seu cache permanece sincronizado com as fontes de dados de back-end. Assim, você tem dados atualizados de uma fonte mais rápida porque está presente na memória e também é uma fonte mais escalável. Então, é uma troca muito boa neste caso.

NCache desenvolvimento

Então, vamos falar sobre o NCache implantação neste diagrama. Então, aqui se você pode ver isso, estes são basicamente seus servidores de aplicativos ou servidores da web onde você tem seu aplicativo hospedado. Eles geralmente estão sentados atrás de um balanceador de carga. Anteriormente, eles faziam chamadas diretas para as fontes de dados de back-end, como um banco de dados, mas agora você tem a camada de cache presente aqui. Esta é a implementação recomendada por nós é que você tenha uma camada de cache dedicada hospedando seus caches clusterizados.

NCache desenvolvimento

Então, o que seus aplicativos estão fazendo, eles estão fazendo NCache a única fonte de dados. Todos os seus pedidos de obtenção de dados ou mesmo algum tipo de processamento são feitos diretamente no cache e, se o cache não o tiver usando esses provedores de camada de acesso a dados, ele poderá realmente obter de volta nas fontes de dados. Então, é isso que ele está fazendo dentro do seu ambiente. Esses servidores, como mencionei anteriormente, são recomendados como servidores dedicados e são servidores muito baratos. O único pré-requisito para NCache neste caso é apenas o .NET framework. Nesses servidores que estão hospedando o cache do cluster, você tem a instalação do servidor de cache, que tem a capacidade de hospedar os caches do cluster e no cliente, nessas caixas do cliente aqui mesmo, que são seus servidores de aplicação, você tem o remote client instalação, que pode hospedar caches locais e pode realmente ajudar a conectar-se a caches clusterizados remotos.

Então, é assim que a implantação se parece. Tudo isso é linearmente escalável. À medida que adicionamos mais servidores, aumentamos a capacidade total do cache.

Três usos comuns de NCache

Vamos falar sobre os três usos comuns de NCache. Estou passando rapidamente por todas essas coisas porque quero chegar a essas seis maneiras e obter detalhes sobre elas, então, se houver alguma dúvida, posso responder com certeza. Então, vamos falar sobre os três usos comuns de NCache.

  1. Cache de dados do aplicativo

    O primeiro é o Application Data Caching. Então, neste slide estávamos falando sobre os três usos comuns de NCache. Então, o primeiro é o cache de dados do aplicativo. Neste caso, basicamente, o que você faz é introduzir o NCache API dentro do seu aplicativo e usando essa API você pode adicionar itens e obter itens do cache e você pode realizar diferentes operações no cache, da maneira que são necessárias. E daí NCache ele tem a capacidade de hospedar, basicamente, você pode armazenar em cache qualquer coisa dentro NCache. Podem ser imagens, podem ser alguns objetos personalizados, objetos de domínio, podem ser coleções, basicamente qualquer coisa. Portanto, tudo o que é permitido pelo .NET pode ser armazenado em cache dentro NCache e usando seus aplicativos introduzindo o NCache API, muito simples de usar, muito fácil de usar, você pode realmente realizar diferentes operações no cache e realmente adicionar e buscar itens.

  2. ASP.NET, ASP.NET Core Cache

    O próximo caso de uso é em relação ao ASP.NET, ASP.NET Core cache. Então, primeiro, você pode usar NCache como provedor de estado de sessão. Pode ser single-site ou multi-site. O próximo é que você pode ter NCache armazene seu estado de visualização. Isso é algo que é pré-MVC. Depois disso, o conceito de estado de visualização não estava mais presente. Depois disso temos para ASP.NET temos o provedor de cache de saída. NCache pode agir assim e depois para ASP.NET Core aplicativos, pode ser o Core Response Caching. Então, você pode fazer isso com NCache. NCache também pode atuar como SignalR Backplane. Portanto, todas essas opções que acabamos de abordar no número 2 não são, na verdade, opções de alteração de código. Você não precisa fazer nenhum tipo de alteração de código. Você pode basicamente atualizar seu arquivo de configuração de aplicativos e usar aqueles que você pode realmente ter NCache para armazenar qualquer coisa que você deseja armazenar. Pode ser Sessions, pode ser View State, pode ser suas saídas ou até mesmo o Core Response Caching. Então, usando isso você pode ter NCache armazenar essas coisas. Então, basicamente neste caso, novamente sem opção de alteração de código, muito fácil de usar. Alguns passos são necessários. Temos documentação completa. Temos amostras também e seguindo esses passos e essa documentação, mesmo as amostras, você pode configurá-lo em 15 minutos. Você pode ter tudo configurado. Podemos realmente testá-lo, ver como isso funciona para você.

  3. Compartilhamento de dados do Pub/Sub e do ambiente de execução por meio de eventos

    O próximo é Pub / Sub e Compartilhamento de dados de tempo de execução por meio de eventos. Então, basicamente neste caso você tem, digamos, você tem aplicativos sem servidor e você quer ter certeza de que há algum tipo de sincronização entre eles eles querem passar certas mensagens, certos dados. NCache pode ser usado como um meio apenas para isso. Você pode ter editores, assinantes e eles podem publicar algumas mensagens. Assinantes que estão registrados para esses, digamos, os clientes podem realmente fazer com que eles obtenham esses dados daqueles de NCache nesse caso.

    Portanto, um exemplo típico seria um aplicativo de bate-papo em grupo. Talvez você tenha membros do grupo, todos conectados ao mesmo cache, eles estão realmente em um chat em grupo. Um dos membros postar alguma mensagem, todos os outros membros desse grupo receberiam uma notificação de que os dados foram adicionados. Portanto, este é apenas um exemplo básico e também temos notificações direcionadas e consultas contínuas.

Então, essas foram as coisas que NCache realmente oferece a você e o que é basicamente utilizado pela maioria de nossos clientes.

NCache Arquitetura

Vamos realmente falar sobre o NCache Arquitetura agora. Vamos explicar como isso funciona? Então, basicamente NCache é uma arquitetura 100% peer-to-peer. Não há um único ponto de falha e não há mestre escravo ou regra de maioria ou qualquer conceito semelhante dentro NCache. Os servidores podem ser adicionados e removidos em tempo real. O cache não precisa ser interrompido e continuaria funcionando bem. Mesmo no caso de um dos servidores cair, basicamente em um cenário imprevisto, o cluster não o cluster completo não cai. Inicia a lógica de recuperação, entre os servidores para redistributar esses dados ou obter os dados de um dos backups e no lado do cliente os clientes realmente fazem failover de suas conexões para os servidores restantes presentes no cluster.

Cluster de cache dinâmico

Então, usando isso, os dados não são realmente perdidos e os clientes, suas conexões são, na verdade, eles fazem failover para os outros servidores. Assim, eles continuam a fazer as solicitações mesmo que um dos servidores tenha caído. Portanto, desde que você tenha um servidor em execução, sua solicitação será tratada.

Então, todas essas mudanças, todas essas mudanças de configuração, servidores sendo adicionados, removidos dinamicamente para cenários imprevistos, tudo isso é realmente propagado por todo o cluster. Então, todas essas configurações são realmente dinâmicas. Qualquer atualização dentro do cluster e em termos de configuração é mapeada para todos os servidores presentes no cluster e os clientes também sabem disso automaticamente.

NCache Requerimentos do sistema

Servidores de cache

Vamos falar sobre isso NCache requisitos de sistema. Então, geralmente em termos de, digamos, se você falar sobre núcleos, quanto mais, melhor. Mas, de um modo geral, recomendamos ter mais de 8 núcleos. As três principais coisas que NCache usa é CPU, recursos de rede e memória. A CPU é usada basicamente para lidar com as solicitações que estão chegando, ou talvez se houver algum código do lado do servidor configurado para fazer esse tipo de operação, é por isso que a CPU é usada. Em segundo lugar, a RAM é usada apenas para armazenamento e talvez alguma sobrecarga envolvida após os dados serem armazenados e os recursos da rede serem usados ​​para manter a comunicação. Por exemplo, de comunicação de servidor para servidor e, em seguida, de comunicação de cliente para servidor. Portanto, você tem essas duas opções e os servidores Windows recomendados são 2012, 2016. O único pré-requisito de NCache is .NET framework, caso contrário, há suporte em todos os ambientes Windows.

Remote Clients

Em termos de remote clients, o único pré-requisito é ter .NET 4.0 ou superior e seu cliente seria realmente suportado. Você pode ter NCache nesses servidores.

Ambiente de Configuração

Então, agora que falamos sobre as diferentes coisas, o básico, você sabe, a introdução sobre NCache, vamos falar sobre como podemos configurar o ambiente. Então, sempre que temos clientes avaliando nosso produto, o que dizemos a eles, damos a eles cinco passos para trabalhar com NCache. O primeiro é baixar uma nova cópia do NCache Enterprise do site e a segunda é instalar NCache dentro do seu ambiente. eu tenho NCache já instalado em duas das minhas máquinas. Na verdade, são caixas remotas demo1 e demo2. E, nessas caixas, uma vez que eu instalei NCache, recebo uma ferramenta de gerenciamento de NCache chamado NCache Gerente. Usando esta ferramenta eu posso realmente criar caches, configurá-los e realizar diferentes operações e até monitoração está envolvido neste caso.

Crie um Cache através NCache Novos Negócios

Então, vamos em frente e abrir o NCache gerente aqui. Eu só preciso procurar NCache e ele surge automaticamente. Então, uma vez que você abre, esta é a visão que você obtém. Então, agora o que precisamos fazer é criar um novo cache clusterizado. Para criar isso, clique com o botão direito do mouse em 'Caches Clusterizados', clique em 'Criar Novo Cache Clusterizado'.

NCache Novos Negócios

Então, aqui o que eu preciso fazer é dar um nome. Vou em frente e dar-lhe o nome de 'democache'. Todos os caches precisam ser nomeados. Só vai manter isso. Vou clicar em próximo.

Cache de demonstração

Estas são as quatro topologias oferecidas por NCache Vou manter a opção 'Partitioned Replica' selecionada porque é a mais recomendada e a mais popular entre todos os nossos clientes. É muito escalável, muito confiável.

Réplica particionada

Esta é a estratégia de replicação entre a partição ativa e a partição de backup no caso de réplica particionada. Vou mantê-lo em Async, pois é mais rápido.

Estratégia de replicação

É aqui que especifico esses servidores que hospedarão esse cache clusterizado. Então, aqui vou especificar demo1 e demo2. Estas são as duas caixas que eu tenho, 107 e 108 e clique em próximo.

Especificar servidores

Esta é a porta do cluster na qual o cluster se comunica. É apanhado automaticamente.

Parâmetros TCP

Este é o tamanho configurado em cada caixa. Então, haverá 2 Gig de tamanho total, um no servidor1 e outro no servidor2.

Tamanho da memória

Estas são algumas opções avançadas. Talvez se você tiver um cenário cheio de cache, o cache pode remover automaticamente os itens do cache. Se forem dados confidenciais, você pode desativar o despejo, para que os itens não sejam removidos por conta própria e você também tem a opção de iniciar automaticamente o cache assim que ele inicializar, assim que a máquina iniciar. Então, vou clicar em terminar e isso realmente cria meu cache.

Opções avançadas

Então, foi assim que foi fácil criar um cache. Eu tenho o cache configurado agora. Se eu apenas clicar com o botão esquerdo no nome do cache, ele abrirá todas essas guias diferentes aqui, através das quais posso fazer algumas alterações ou configurações, se necessário neste momento.

Painel

Então, o próximo que vou fazer é adicionar minha caixa pessoal como remote client. Para fazer isso, basta clicar com o botão direito do mouse no nome do cache e clicar em adicionar nó.

Adicionar Nó

E, aqui vou apenas dar o IP da minha caixa pessoal, que é 102 e agora é adicionado.

Caixa IP

Então, uma vez adicionado, vou clicar com o botão direito do mouse no nome do cache e clicar em iniciar. Então, agora o cache está sendo iniciado na caixa 107 e 108. Assim que estiver funcionando vou abrir as estatísticas e também vou mostrar uma ferramenta de monitoramento de NCache chamado NCache monitor, que entra em detalhes muito profundos em relação à verificação de coisas basicamente diferentes que estão acontecendo no cache. Então, o cache está funcionando agora. Para abrir as estatísticas, basta clicar com o botão direito do mouse no nome do cache e clicar em estatísticas.

Estatísticas abertas

Então, é isso que vai trazer todas essas estatísticas para ambas as caixas 107 e 108.

Estatísticas

Então, agora vamos realmente abrir o ferramenta de monitoramento de NCache. Para abri-lo, clique com o botão direito do mouse no nome do cache e clique em monitor cluster.

Cluster de monitor aberto

A NCache monitor agora será aberto, o que nos dará dois painéis pré-configurados, ou seja, o painel do servidor e o painel de exibição de relatório. Então, usando isso, você pode ter uma boa ideia do que está acontecendo no cache. Se virmos aqui, isso é, por exemplo, o tamanho do cache, que está sendo consumido no momento e esse é o gráfico de solicitações por segundo. Portanto, ele fornece muitos detalhes diferentes que estão acontecendo no cache e você pode usar esses detalhes para depurar alguns cenários ou chegar ao fundo se estiver vendo algum tipo de problema.

Painel do servidor

Então, eu vou voltar rapidamente para o NCache manager e aqui você também pode criar seu próprio painel personalizado. Se você tiver algumas coisas que deseja ver, não aquelas que estão pré-configuradas aqui, você também pode fazer isso. Você tem controles presentes aqui na categoria de servidor de cache e também na categoria de clientes de cache. Você também pode criar seus próprios painéis personalizados para ver apenas as coisas que realmente lhe interessam. Então, vamos voltar ao NCache Gerente. Tudo está aparecendo zerado porque não temos nenhum aplicativo rodando neste cache.

Simule o estresse e monitore as estatísticas de cache

Então, na verdade, vamos testá-lo rapidamente executando um aplicativo. Então, eu tenho o PowerShell aberto aqui. Vamos realmente esclarecer isso. Vamos realmente abrir um novo. Ok, então, eu tenho um PowerShell abrindo. Então, o que vou fazer é executar o aplicativo de ferramenta de estresse para adicionar alguma carga fictícia ao meu cache clusterizado, para simular alguma atividade. Então, usando essa atividade, também vamos monitorá-la através do NCache gerente, bem como, por meio do NCache monitor, veja como isso funciona para nós.

Então execute essa ferramenta de teste de estresse. Preciso digitar novamente. Vamos matar o processo primeiro. Enquanto isso, se você tiver alguma dúvida, sinta-se à vontade para publicá-la na guia de perguntas e respostas. Kal, acho que não temos perguntas no momento. Tudo bem, perfeito. Alguma razão não está escolhendo. Estou de volta Sim. Desculpe, eu só ia dizer isso, pessoal, essa sessão está sendo gravada. Portanto, seja qual for o motivo, se você não puder comparecer à sessão completa ou se perder a parte inicial, poderá verificar esta gravação. Acredito que vamos postar no final da semana ou no início da próxima semana. Assim, você poderá ir em frente e passar pela sessão completa novamente.

Então, o que estou fazendo agora é ir diretamente para esse diretório, para abrir o prompt de comando e executar a ferramenta de teste de estresse. Ok, então, vamos ver, sim, ele pegou. Vou em frente e dar-lhe o nome stresstesttool.exe e, em seguida, cache de demonstração. Então, agora o que ele estaria fazendo é adicionar alguns dados fictícios ao cache. Se voltarmos aqui, devemos ver alguma atividade surgindo nessas duas caixas agora. Aí está. Então, vemos alguma atividade surgindo nessas duas caixas 107 e 108.

atividade

Na topologia que selecionamos réplica particionada, cada cliente tem uma conexão com todos os nós de servidor presentes no cluster, por isso está se conectando a ambos os servidores. Se chegarmos ao NCache monitor, podemos ver que há um cliente conectado contra 108 e um contra 107. Se você olhar para o NCache pedido por segundo gráfico, podemos ver que há alguma atividade acontecendo.

NCache Monitorar Atividade

Então, este teste foi apenas para verificar se está tudo certo, o cache está configurado corretamente tudo está funcionando muito bem e isso foi testado. Então, vou parar a aplicação da ferramenta de teste de estresse. Agora, voltemos ao NCache Gerente. Vamos em frente e limpar esse cache, para que para nosso teste adicional não haja itens presentes no cache. Então, tudo está aparecendo em 0. Vamos voltar para a apresentação. Então, nosso ambiente agora está configurado e está tudo pronto. O que podemos fazer agora é prosseguir com os slides.

NCache Truques - Otimização de desempenho

Então, vamos falar sobre as seis maneiras que vamos usar para otimizar o desempenho, uma a uma. Só para reiterar NCache, o cache do cluster já é um recurso de desempenho que o desempenho, você sabe, melhora seu desempenho dentro do seu aplicativo, suas viagens ao banco de dados são reduzidas e então você encontra dados de uma fonte mais rápida que é um cache distribuído na memória. Mas, esses recursos realmente ajudarão você a melhorar esse desempenho, dependendo do seu caso de uso específico.

  • Cache de cliente

    Então, o primeiro que vamos falar é cache do cliente. O que ele faz é basicamente reduzir suas viagens ao cache clusterizado real.

  • Chamadas em massa

    Em seguida, falaremos sobre chamadas em massa, que reduzem as viagens ao cache de tal forma que você executa apenas uma única operação e usando apenas uma única chamada e várias operações em troca serão processadas no lado do servidor.

  • Compressão

    Então você também tem compressão. Talvez se o tamanho do seu objeto for maior, você pode usar isso para reduzir todo o tamanho do objeto que está sendo adicionado ou buscado. Geralmente, recomendamos dividir o objeto em tamanho menor, mas caso não seja possível, você pode usar o recurso de compactação.

  • Atualizações assíncronas

    Também temos atualizações assíncronas. Então, usando estes, basicamente seu aplicativo não espera que a operação seja executada. Talvez você possa criar uma tarefa separada para isso e, com base nisso, pode permitir que os dados sejam adicionados por conta própria e, se houver algum tipo de atualização que você deseja recuperar, talvez os dados tenham sido adicionados ou não ou se houver foi um problema, você pode simplesmente se registrar para um retorno de chamada contra isso.

  • Serialização compacta

    O próximo é serialização compacta. Assim, por exemplo, se você tiver objetos personalizados, objetos de domínio, que não estão marcados como serializáveis ​​e dentro de um cache distribuído, já que está completamente fora de processo, todos os objetos precisarão ser serializados. Portanto, se você tiver esse cenário em que não pode permitir a alteração de código em seu ambiente, mas também precisa ter seus objetos personalizados ou objetos de domínio serializáveis, você pode usar o recurso de serialização compacta de NCache para marcar todos eles como serializáveis ​​e, em seguida, usando isso, você pode continuar usando NCache dentro do seu ambiente. É uma opção sem alteração de código. Apenas algo que você pode descobrir a partir da GUI e você tem tudo configurado.

  • Placas de rede duplas

    E então finalmente temos o placas de rede duplas característica. Então, se você quiser separar basicamente o tráfego da comunicação cliente-servidor e servidor-servidor, recursos de rede separados, você pode fazer isso com NCache. Isso é apenas no caso de você ter, você sabe, seus recursos de rede realmente sufocados pelo excesso de tráfego que está chegando. Somente nesses cenários recomendamos isso. Mas, se você não perceber que esses recursos estão sendo maximizados nesse ponto, você pode manter a mesma placa de interface de rede para ambos os tipos de comunicação.

Demo

Então, vamos realmente realizar nosso primeiro teste, no qual adicionaremos itens ao cache e buscaremos itens do cache e usaremos isso como uma linha de base com a API básica que temos. Novamente, já está otimizado, mas vamos usá-lo como linha de base e executar diferentes recursos em cima dele e ver como eles funcionam para nós.

Então, a primeira, vamos voltar a esta amostra aqui. Então, este é um exemplo que eu posso fornecer esse código também. Isso é o que vamos usar para mostrar a linha de base que vamos cobrir. Então, estamos no teste 1. No teste 1, o que estamos fazendo é basicamente adicionar 5,000 itens ao cache de tamanho 100 KB e, em seguida, vamos buscar esses itens do cache. Este teste só nos dará o tempo que leva para todo esse código, essa parte de busca vai demorar. Nesta parte de busca, o loop está sendo executado na verdade 5000 vezes, porque 5000 itens precisam ser buscados e, nos slides posteriores, abordaremos como diferentes recursos podem realmente ajudar nesse caso.

...
try
    {
        cache = NCache.InitializeCache(args[0]);
        cache.Clear();

        Console.WriteLine("TEST 1\n");
        Console.WriteLine("Press anything to add " + objectsCount + " items (100kb Object)");
        Console.ReadKey();
        Console.WriteLine("Adding items now");

        for (int i = 0; i < objectsCount; i++)
            {
                cache.Insert(key + i, obj1);
            }

        Console.WriteLine(objectsCount + " items added. Press any key to retrieve them.");
        Console.ReadKey();
        Console.WriteLine("\nRetrieving " + objectsCount + " items now");
        datetime1 = DateTime.Now;
        ...

Então, vamos realmente executar isso. Vamos primeiro verificar se tudo está configurado corretamente. Sim, teste democache 1 e vou executar isso. Então, novamente, este é o teste número um, apenas para obter uma linha de base de como os números se parecem. Eu vou pressionar Enter. Ele vai começar a adicionar itens no cache. Se voltarmos ao NCache gerente, que está aqui, vemos que há alguma atividade acontecendo. Então, está adicionando itens ao cache. Como existem dois servidores em partição de topologia de réplica, os dados estão sendo adicionados nesses dois servidores, estão sendo adicionados no servidor 1 que é 107 e também no servidor 2. Então, os dados vão ser divididos. Ao longo de todos os itens totais dentro do cache serão 5,000.

Então, neste caso, vamos esperar que ele seja concluído e, uma vez concluído, podemos anotar esse número e usá-lo para nossa comparação com os recursos posteriores com os quais testaremos. Está quase pronto, temos mais de 4,000 itens já sendo adicionados.

Itens adicionados

Tenha em mente que é um objeto de 100 KB, que é um tamanho bem grande para, você sabe, testes, mas isso foi apenas para mostrar como as coisas se parecem. Eu acho que eles são todos adicionados, sim, eles são todos adicionados. O contador realmente parou. Se clicarmos em Enter, demorou, se clicarmos em Enter vai começar a recuperar esses itens do cache e se você voltar aqui vai mostrar a hora assim que o fizer. Assim, podemos ver que as buscas por segundo estão realmente aumentando e também as solicitações por segundo estão aumentando para ambos os servidores. Então, isso realmente mostra que há um pouco de atividade começando a buscar esses itens do cache. Quando terminar de buscar todos os 5000 itens do cache, ele exibirá o cronômetro na tela e, usando esse cronômetro, vamos defini-lo como uma linha de base para nossos próximos testes.

Cache do cliente (próximo ao cache)

Então, vamos falar sobre o próximo. O próximo, o recurso real que usaremos primeiro é o cache do cliente. Então, deixe-me explicar o que é um cache de cliente? Um cache de cliente é basicamente um cache local, que está presente nas caixas do cliente e nessas caixas do cliente, o que ele faz é reduzir suas viagens ao cache clusterizado. O cache do cliente é um subconjunto dos dados de caches em cluster. Ele vai manter uma cópia local consigo mesmo dos dados dos caches clusterizados. Ele permanece sincronizado com o cache do cluster.

Cache de cliente

Portanto, quaisquer atualizações realizadas no cache do cliente são propagadas para o cache clusterizado e vice-versa. Então, ele permanece atualizado com o cache clusterizado e o que ele faz é se seu aplicativo está tentando buscar alguns itens do cache, ele fornece, se ele tiver esses itens localmente presentes aqui, ele apenas compartilha esses dados ou esses itens certo lá e, em seguida, de uma fonte local.

Vamos realmente voltar a isso. Ok, demorou cerca de 45 segundos para fazer esta operação. Então, uma vez que usamos o cache do cliente, podemos realmente ver como isso afeta nesse cenário. Vou clicar em Enter. Vamos manter isso lembrado, esse número que é de 45 segundos.

Hora de fazer a operação

Então, já estávamos falando sobre o cache do cliente. Então, como mencionei anteriormente, basicamente existem duas opções que você tem. Você pode executar o cache do cliente como um InProc ou OutProc, é algo que você pode descobrir. No caso do OutProc, um processo separado será executado, que permanecerá, que permanecerá sincronizado com o cache clusterizado.

O processo OutProc é geralmente recomendado quando você tem um cenário de jardim da web onde você tem vários aplicativos ou várias instâncias dos aplicativos em execução na mesma caixa. Então, eles teriam um recurso comum para lidar, ou seja, o cache do cliente, um processo separado que está em execução. A segunda opção é um cache InProc e isso é recomendado no caso de você ter um cenário de web farm, onde normalmente você tem um ou dois aplicativos em execução na mesma caixa.

No caso de um, o que está acontecendo é que o cache do cliente reside no processo de aplicativos. Então, nesse caso, como faz parte do mesmo processo, muitas das despesas gerais são removidas. Neste caso, a sobrecarga de serialização, a sobrecarga de comunicação entre processos, tudo isso é realmente removido e aumenta muito o desempenho.

No caso do OutProc, o que você está armazenando em cache é que o aplicativo obtém esses dados de uma fonte local, que está presente na mesma caixa. Assim, uma viagem de rede é realmente reduzida. Então, isso aumenta bastante o desempenho e podemos ver isso agora.

Então, nisso o que vamos fazer é criar um cache de cliente, primeiro como OutProc e depois como InProc e vamos ver como são os números dos números. E no cenário atual, se você se lembra, levou 45 segundos com o normal.

Kal, eu tenho uma pergunta aqui e a pergunta é que todos os recursos que estamos falando fazem parte do mesmo produto? Então, eu acho que eles estão falando sobre edições.

Sim, alguns deles estão disponíveis apenas na empresa, mas posso compartilhar comparação de edições documento que realmente cobre cada detalhe para todos eles. Então, talvez isso realmente te dê os detalhes exatos que você está procurando.

E, vou aproveitar esta oportunidade e perguntar a todos se há alguma dúvida no momento? Não, não temos perguntas, então, por favor, continue a falar.

Cache de cliente Out-Proc

Então, vou em frente e limpar o conteúdo do cache. Eles terminaram agora. Então, agora vou seguir em frente e criar um cache de cliente. Então, no NCache manager, você tem o cache do cliente escrito aqui. Basta clicar com o botão direito aqui e clicar em criar novo cache de cliente. Então, aqui, eu vou manter o mesmo nome. Está definido para o cache do cliente. Mantenha tudo padrão. Em seguida, está definido para OutProc agora, mas vamos alterá-lo para InProc mais tarde. Clique em Avançar. O tamanho definido para um Gig. Eu vou mantê-lo assim. Eu posso realmente mudar isso para qualquer um que eu queira e algumas configurações avançadas que também estavam presentes quando estávamos criando um cache de cluster. Então, agora o cache do cliente está realmente configurado na minha caixa pessoal, que é 102.

Criar cache do cliente

Uma maneira rápida de verificar isso seria apenas executar a ferramenta list caches, presente na minha caixa pessoal, depois de instalar NCache e usando essa ferramenta, ele realmente me permite saber quais NCaches estão sendo executados na minha caixa pessoal neste momento. Então, aqui se eu vier aqui, vamos realmente executar caches de lista. Ok, está exibindo os caches presentes na minha caixa pessoal, que é 102. Acho que na parte de trás, ainda está tentando habilitá-lo por algum motivo. Sim, parece estar ativado lá. Então, se você vier aqui podemos ver que o cache do cliente. Portanto, o cache do cliente é um cache local aqui e está em execução. Então, ele está sendo executado na minha caixa pessoal neste momento e podemos usá-lo agora.

Listar caches em execução

Então, antes de prosseguir, então, o que NCache faz é, ele publica esses contadores que são exibidos na tela agora mesmo. Assim, eles podem ser visualizados através do monitor de desempenho do Windows. O que vou fazer é abrir o monitor de desempenho do Windows e abrir os contadores para o cache do cliente que vou usar.

Então, eu vou, da minha caixa pessoal, eu vou procurar um PerfMon que é monitoramento de desempenho aqui, e usando isso o que eu vou fazer é, eu vou abrir o NCache categoria e procure meu cache específico que era o cache do cliente e abra os contadores para eles. Então, está aberto agora e vou abrir um novo monitor de desempenho, para procurar a categoria de NCache. Aí está e aqui eu tenho o cache do cliente como presente aqui. Eu vou clicar em adicionar e eu vou clicar em OK. Vou mudar a visualização para a visualização do relatório. Então, agora, esses são os contadores. Tudo está aparecendo como 0 agora porque não está sendo usado. É um processo separado que está sendo executado porque o definimos como OutProc.

Vamos ver como estão os números agora, da minha caixa pessoal. Vou rodar a aplicação, mesmo código, não vou fazer nenhum tipo de alteração de código. Os recursos de cache do cliente são uma alteração sem código, como mencionei anteriormente, você só precisa habilitá-lo ou desativá-lo, o que for de sua preferência, e então ele será selecionado automaticamente. Então, se eu clicar no botão iniciar, mesmo código, mesmo tudo, até mesmo o mesmo teste, ele vai começar a adicionar esses itens assim que eu clicar em 'Enter'. Ok, então, uma vez que eu clico em entrar, ele começou a adicionar esses itens. Se você voltar para o NCache manager, vemos que no cache clusterizado os itens estão sendo adicionados. Se você abrir o NCache monitor, que é este, sim, este, vemos que há alguma atividade acontecendo aqui também, e é isso que eu estava explicando inicialmente. Quando você tem o cache do cliente configurado, ele usa e quando você adiciona itens no cache o cache do cliente também recebe uma cópia e o cache clusterizado também recebe uma cópia.

PerfMon

Esse caso de uso geralmente é recomendado quando você tem, por exemplo, uma proporção de leituras para gravação de 80% a 20% ou até mesmo uma proporção de leituras para gravação de 70% a 30%. Isso geralmente é recomendado em cenários em que você tem muitas leituras, talvez alguns dados de referência de dados estáticos que você tem em seu ambiente e é aí que você verá grandes melhorias de desempenho quando tiver um cache de cliente habilitado.

Então, tenha em mente, o primeiro teste com apenas a API get executado em um loop, tivemos 45 segundos em que foi possível obter esses itens do cache. Mas, agora usando esse cache de cliente, ele encontraria todos esses dados em uma fonte local, em um processo separado que está sendo executado na mesma caixa e veremos como isso funciona para nós. Então, se rolarmos para baixo aqui, podemos ver que esta é a contagem do cache do cliente. Esta contagem tem que ir até 5,000 porque é uma única fonte. Assim, todos os 5,000 itens estarão presentes aqui no cluster e serão distribuídos entre todos os nós do servidor. Então, estamos apenas esperando que esses itens cheguem a 5,000 e então vamos executar a segunda parte do teste que é onde ele busca esses itens do cache clusterizado.

Então, outra coisa a notar seria que uma vez que buscamos os itens do cache, as chamadas não iriam para o cache clusterizado, elas seriam todas interceptadas pelo cache do cliente que está atualmente localmente e é isso que vou mostrar você desses balcões, bem aqui. Portanto, esses contadores estão mostrando os contadores de cache do cliente, mas se você chegar a isso, eles estão mostrando os contadores do lado do servidor para o cache clusterizado. Vamos clicar em entrar aqui e ele começará a recuperar esses itens do cache. Então, novamente, apenas para mostrar que nenhum cartão está sendo movido para cá. Então, não há nenhuma chamada vindo aqui. Se você abrir este, podemos ver que essa atividade está acontecendo aqui. Há certas buscas acontecendo. Portanto, o cache do cliente está sendo muito usado agora e esse é o objetivo de ter um cache do cliente em cenários em que você tem mais leituras do que gravações. Portanto, após alguns segundos, devemos ver os resultados aqui de quanto tempo levou para mostrar 5,000 itens de tamanho 100 KB do cenário de cache do cliente. Então, aqui você pode ver que de 45 segundos caiu para 33 segundos com o caso de você ter um cache de cliente OutProc habilitado em seu ambiente.

Tempo reduzido

Então, você pode ver que é uma grande melhoria. São mais de 10 segundos que você pode ver e em termos de aplicativos é um grande momento. Então, ele nos mostrou uma grande melhora neste caso.

Cache de cliente em processo

Então, vou criar um Cache de cliente In-Proc agora e usando esse cache de cliente InProc, vamos ver como isso funciona para nós em comparação com esses 45 segundos para o teste real, 33 segundos para o teste OutProc de cache do cliente. Então, em primeiro lugar, vou remover esse cache. Agora foi removido. Vou criar um novo cache. Novamente, vou digitar InProc ao lado e clicar em próximo e manter o nível de isolamento para ser InProc, manter tudo padrão e clicar em concluir. Então, agora isso é criado na minha caixa pessoal e vou executar exatamente o mesmo teste. Na verdade, vamos limpar os dados do cache primeiro.

Então, agora os mesmos testes, os mesmos argumentos, e acabei de começar. Então, agora ele vai realizar novamente o mesmo teste. 5000 itens no cache de tamanho 100 KB e, em seguida, ele buscará esses itens usando o cache do cliente InProc do cliente. O conceito continua exatamente o mesmo. Depois que seu aplicativo estiver adicionando itens ao cache, você também o adicionará no cache do cliente que está presente no mesmo processo, porque agora o estamos executando como um In Proc. Portanto, está adicionando esses itens ao cache do cliente também e também está adicionando ao cache clusterizado. Então, uma vez que é, eu vou clicar em entrar agora. Então, uma vez que ele está buscando esses itens, ele encontrará todos esses itens no local, dentro do mesmo processo.

Portanto, agora sem nenhuma sobrecarga envolvida, como comunicação e serialização entre processos, desserialização, tudo isso é removido completamente agora. Ele obteria os dados ali mesmo de uma fonte local e veríamos o desempenho real do cache do cliente com um modo InProc para esse cenário específico. Então, só esperando os itens serem adicionados. Se voltarmos aqui, veremos alguns contadores subindo e descendo. Podemos definitivamente ver isso.

Estatísticas de cache

Então, enquanto isso, pessoal, se houver alguma dúvida, por favor, me avisem. Sam está de olho na aba de perguntas. Ele vai me informar se houver alguma dúvida.

Então, a próxima coisa, como mencionei anteriormente na lista, serão as operações em massa. Então, vamos testar apenas com um único, que está usando a API em massa. Mas, existem conceitos diferentes de coisas diferentes que funcionam da mesma maneira que as operações em massa e vamos cobrir tudo isso em teoria nesta apresentação. Vamos realmente ver quantos itens são adicionados. Assim, cerca de mais de 3000 itens já foram adicionados. Então, estamos apenas esperando o marcador completo de 5000 chegar e depois disso vamos ver como isso funciona. Ok, preso com o primeiro. Então, estou apenas esperando que as operações sejam realizadas nas costas. Enquanto isso, estou apenas falando sobre a primeira coisa aqui no caso de operações em massa.

Portanto, o conceito central da operação em massa é apenas restringir sua real, a quantidade de chamadas que vão para o cache clusterizado. Então, em vez de executar todas essas coisas em um loop, como já fizemos, podemos realmente fazer essas mesmas chamadas como parte de uma única operação. Assim, uma única operação enviada para o cache clusterizado e, em seguida, várias operações podem ser executadas. Então, se você compartilha no caso de massa você precisa conhecer as chaves. Assim, por exemplo, você acabou de fornecer as chaves e os objetos reais que deseja adicionar, apenas uma única chamada e, usando isso, todos esses itens serão realmente adicionados ao cache clusterizado na parte de trás.

Então, eu acho que eles devem ser feitos, sim, eles estão quase prontos agora. Se voltarmos aqui, então, todos esses itens agora são adicionados. Vou clicar em enter e podemos ver que todos esses itens foram recuperados. É muito surpreendente ver porque muitas despesas gerais foram removidas. Então, foi extremamente rápido. Então, no caso se reiterarmos o que fizemos no teste inicial, com o teste básico levou 45 segundos, com o cache do cliente OutProc levou cerca de 33 segundos. Mas, no caso do cache do cliente InProc, todo esse tempo caiu para 0.1 segundo neste caso.

Tempo reduzido

Então, isso é o quanto de melhoria você pode ver com um cache de cliente InProc se o seu caso de uso mapear para o que temos aqui. Portanto, esta é uma grande melhoria que você pode ver se tiver mais leituras e mais gravações acontecendo.

Então, eu vou apenas clicar em entrar. Então, isso se aproxima. Vou remover esse cache do cliente aqui e realmente limpo também. Ok, então, vamos voltar para a apresentação. Então, aqui, então, estávamos falando sobre operações em massa.

Obtenção em massa (baseada em chave)

Então, no caso de operações em massa, a primeira é que uma vez que você está adicionando, se você tiver muitos itens que deseja adicionar ou mesmo buscar no cache, basta fornecer a lista de acordo e usando apenas uma única chamada, você pode realizar todas essas operações no cache. Portanto, geralmente, se você tiver um tamanho de objeto maior, recomendamos dividi-lo em vários objetos e usar os recursos que NCache fornece para realmente agrupá-los ou até mesmo obtê-los ou adicioná-los ao cache. Portanto, a API em massa pode ser usada nesses cenários. A segunda é, por exemplo, se você não conhece as chaves desses itens, já que o bulk era uma operação baseada em chaves, então, você precisa saber que todas as chaves.

Consultas de pesquisa SQL/LINQ

Em consultas de pesquisa do tipo SQL ou LINQ, basicamente, se você não souber as chaves, poderá pesquisar em um determinado critério. Por exemplo, se você tiver produtos adicionados ao cache, poderá buscar vários produtos do cache com base em determinados critérios. Então, digamos, eu executo uma consulta com o nome 'SELECIONE o produto ONDE produto.preço > 10 E produto.preço < 100'. Assim, todos os produtos que realmente atendem a esse critério específico e estão presentes no cache seriam devolvidos para mim. Portanto, neste caso, não especifiquei nenhuma chave, apenas especifiquei com os critérios e eles foram devolvidos para mim.

Grupos e subgrupos

A próxima é se você pode criar coleções lógicas dentro do cache. Vou cobrir os dois juntos, como grupos, subgrupos e depois tags também. Então, você pode fazer isso. Assim, por exemplo, se você tiver clientes e seus pedidos colocados no cache, poderá agrupar todos os pedidos. Como há itens separados no cache, você também pode manter coleções, mas recomendamos dividi-las, porque geralmente quando você obtém um item do cache, não precisa do objeto completo, precisa de um determinado valor para ele. Portanto, se você dividi-lo em vários objetos, poderá usá-lo de maneira mais eficiente. Portanto, usando esses recursos de coleta lógica, você pode basicamente agrupar itens no cache. Assim, todos os pedidos de um determinado cliente podem ser agrupados em uma única chamada. Digamos que em grupos, você pode fazer um get by group ou no caso de tags para obter por tag, basta fornecer o ID do cliente e todos esses itens associados presentes dentro do cache seriam realmente devolvidos a você. Novamente, neste caso você não precisa conhecer as chaves, você só precisa saber o determinado valor da string que é um grupo ou uma tag e com base nisso ele foi retornado para você e então também suporta consultas paralelas.

Operações em massa - Demonstração

Então, vamos para a amostra real de operações em massa. Então, se você voltar para este teste, aqui mesmo. Este é o teste em massa, que é o teste 2 e vamos realmente executá-lo. Vamos realmente iniciá-lo primeiro e então podemos entrar em detalhes sobre o que ele está fazendo. Então, acabei de mudar para o teste 2 agora e comecei. Então, o que este teste está fazendo é basicamente adicionar 10,000 itens de tamanho 10 KB no cache agora. Em primeiro lugar, ele está fazendo apenas uma inserção básica de adicionar esses itens ao cache e, em seguida, está buscando todos esses itens e, na verdade, registrando o tempo para adições e a parte de busca também.

Console.WriteLine("TEST 2\n");
Console.WriteLine("Press anything to add " + objectsCountBulk + " items (10kb Object)");
Console.ReadKey();
Console.WriteLine("Adding items now");
datetime1 = DateTime.Now;
for (int i = 0; i < objectsCountBulk; i++)
{
    cache.Insert(key + i, obj2);
}
datetime2 = DateTime.Now;
Console.WriteLine(objectsCountBulk + " items added. Time to add " + objectsCountBulk + " items in a loop: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nPress any key to retrieve them.");
Console.ReadKey();

Assim, uma vez feito isso, obtemos uma linha de base de quanto tempo levou para adicionar 10,000 itens de tamanho 10 KB no cache e, em seguida, ele inicia as operações em massa. Nessas operações em massa, ele adiciona todos esses 10,000 itens ao cache na mesma chamada e busca novamente com apenas uma única chamada, bem como a lista de chaves e a lista de objetos predefinidas.

Ok, vou clicar em entrar. Ele começará a adicionar esses itens ao cache. Se voltarmos ao NCache gerente, vemos que há um pouco de atividade acontecendo aqui. Esses itens agora estão sendo adicionados a esses dois servidores que estão presentes no momento.

Atividade de Operações em Massa

Mesmo se você olhar para o cluster do monitor, podemos ver um cliente conectado aqui, um cliente conectado ali e então vemos que há um pouco de atividade acontecendo nesses gráficos. Então, usando isso, você pode realmente ter uma boa ideia do que está acontecendo dentro do cache, o que está sendo usado, o que não está sendo usado neste momento e quanto está sendo usado. Está quase feito todos os 10,000 itens, acho que agora adicionados. Sim, eles são e eu vou pressionar Enter para recuperar esses 10,000 itens. Então, em primeiro lugar, levou cerca de 37 segundos para adicionar esses itens ao cache. Agora, o que ele está fazendo é ler esses 10,000 itens do cache. Então, se você vir, aqui podemos ver que há algumas buscas por segundo acontecendo em ambos os nós do servidor. Portanto, os itens estão sendo buscados no momento. Então, agora está buscando em um loop agora. Lembre-se de que, uma vez concluído, iniciará o teste em massa. Então, com base nesse teste em massa, vamos comparar esses dois números e ver como eles realmente afetam. Então, aqui demorou cerca de 30 segundos para recuperar esses 10,000 itens e com a API em massa realmente fez com as adições e em breve deve ser feito com a parte de busca também eu acho, ah sim, preciso pressionar ENTER. Ok, vamos esperar que ele termine e então eu posso realmente mostrar como todas essas coisas se parecem. Então, agora está completo. Então, apenas para passar por cima deste teste, ele adicionou 10,000 itens de tamanho 10 KB no cache usando um loop e levou cerca de 37 segundos. Para recuperar esses 10,000 itens, levou cerca de 30 segundos, novamente em um loop. Com o teste em massa, ele adicionou esses 10,000 itens ao cache e levou cerca de 5 segundos.

Teste em massa concluído

Então, este é um grande intervalo entre 37 segundos e 5 segundos e para buscar esses itens no cache, levou cerca de, digamos, 6 segundos. Então, uma grande diferença novamente entre 6 segundos e 30 segundos. Então, isso é o quanto de melhoria as operações em massa podem realmente oferecer a você e ao seu aplicativo e, usando isso, você não precisa executar a mesma chamada repetidamente. Você não precisa acessar o cache clusterizado todas as vezes. Basicamente, você pode fazer uma coleção de todas as operações que precisa executar, usando a API em massa, basta adicioná-las ao cache.

Compressão - Demonstração

Então, agora nosso teste em massa está realmente feito. Então, volte para a apresentação. Então, o próximo é o teste de compressão. Novamente, como mencionei anteriormente, geralmente recomendamos dividir o objeto em um tamanho menor, mas se você não tiver essa opção disponível, o que você pode fazer é compactar, você pode definir um determinado limite. Qualquer objeto maior que isso não seria compactado para um tamanho menor. Vamos realmente habilitar a compactação em nosso ambiente agora. Então, em primeiro lugar, vamos em frente e limpar o cache. Está feito. A compressão é algo que pode ser feito em tempo real. Portanto, o cache não precisa ser interrompido. Então, se eu clicar com o botão esquerdo no nome do cache, ele abrirá todas essas configurações diferentes. Se eu for aqui e abrir opções aqui e o que eu preciso fazer é apenas clicar em habilitar compressão. Vou configurá-lo para ser 50 KB. Portanto, qualquer coisa maior que 50 KB será compactada. Clique com o botão direito do mouse no nome do cache e clique em aplicar configurações. Todas essas configurações agora serão aplicadas no cluster. Portanto, qualquer objeto maior que isso seria realmente compactado.

Aplicar compressão

Então, vou executar o mesmo teste que fizemos inicialmente e que foi o teste 1. Altere-o de volta para o teste 1, salve isso e pressione em executar (iniciar). Vamos aguardar o início e depois darei mais detalhes sobre como a compactação realmente ajuda em diferentes cenários. Então, como a compactação está funcionando, uma vez que o cliente está enviando esses itens para o cache, ele os envia como compactados. Então, como a compactação ajuda é que, uma vez que o item está viajando pela rede, ele é de tamanho menor e, uma vez que fica no cache clusterizado, também ocupa menos localização.

Kal, só queria lembrá-lo, temos 10 minutos antes da sessão terminar, então, apenas se acalme de acordo. Certo, tudo bem obrigado. Alguma dúvida neste momento? Não, parece que todo mundo é bom. Na verdade, temos duas confirmações, até agora tudo bem, então, estamos bem. Tudo bem, perfeito. Obrigada.

Ok, então, eu estava falando sobre compressão como isso ajuda. Então, no caso de haver duas coisas, toda a viagem de rede de um objeto de tamanho menor obviamente será mais rápida do que de um tamanho maior e, uma vez que esse objeto seja colocado no cache, clique em Enter para que ele comece a recuperar esses itens . Então, uma vez que é colocado dentro do cache, na verdade também é menor. Então, está consumindo menos espaço. O tempo total necessário para processar este item também é reduzido. Então, é assim que a compactação ajuda no seu cenário. Há uma sobrecarga envolvida no lado do cliente durante a adição. Mas, toda a melhoria líquida que vamos notar agora é realmente maior do que isso. Então, todo o tempo que leva para, você sabe, todas as operações encontradas nesses itens, na verdade, será muito mais rápido. Então, teste 1 feito com compressão demorou cerca de 26 segundos.

Resultados de compactação

Se você se lembra inicialmente, em nosso primeiro teste com nada, sem recursos especiais envolvidos apenas a API básica, 45 segundos eu acredito. Portanto, há uma grande diferença entre 45 segundos e 26 segundos. Então, isso é o quanto a compactação realmente ajuda e, se essas operações forem dimensionadas ainda mais, haveria uma diferença ainda maior nesse caso. Então, isso ajuda muito neste caso.

Operações assíncronas - Demonstração

Então, vamos passar para o próximo cenário que temos, que são as atualizações assíncronas. As atualizações assíncronas são basicamente seu aplicativo não espera. Você pode configurar uma tarefa separada para ela e essa tarefa executará essas operações. Você pode configurar retornos de chamada para obter apenas as informações se o item foi adicionado ou não foi adicionado para qualquer cenário. Você pode realmente configurar isso também. Vou rapidamente para a amostra agora e acho que é o teste número 3, mas posso confirmar isso rapidamente. Ok, este é o teste número 3 para atualizações assíncronas. Vamos realmente iniciá-lo e então podemos examinar os detalhes do código. Assim que eu puder controlar de volta, vou abrir o arquivo de código e mostrar o que está acontecendo no teste número 3, que é para atualizações assíncronas. Começou agora. Então, nas atualizações assíncronas, esse é o teste número 3, o que está acontecendo é que ele primeiro adiciona o item ao cache usando apenas a chamada de inserção básica e, depois de adicionar esses itens, basicamente os remove novamente em uma parte de um ciclo. Assim, cada chave é removida em uma única iteração.

...
else if (args[1].Equals("test3"))//ASYNC API TEST
{
    Console.WriteLine("TEST 3\n");
    Console.WriteLine("Press anything to add " + objectsCount + " items normally (100kb Object)");
    Console.ReadKey();
    Console.WriteLine("Adding items now");

    try
    {
        cache = NCache.InitializeCache(args[0]);
        datetime1 = DateTime.Now;
        for (int i = 0; i < objectsCount; i++)
        {
            cache.Insert(key + i, obj1);
            //cache.InsertAsync(key + i, obj1, OnItemAdded, "", "");
        }
...

Vou clicar em Enter. Ele está adicionando 5,000 itens ao cache de tamanho 100 KB e está fazendo isso normalmente. Por normalmente aqui quero dizer apenas uma inserção simples e, em seguida, está removendo esses itens novamente em uma parte do loop. Então, usando isso, veremos quanto tempo leva para essa parte e, em seguida, usaremos as chamadas assíncronas para adições, inserções assíncronas e, em seguida, para removê-las. Enquanto ele adiciona esses itens, vamos voltar e ver como eles se parecem. Então, neste caso, está apenas fazendo uma remoção básica, para remover esses itens. Na parte de teste assíncrona, o que está fazendo é fazer a chamada de inserção assíncrona. Assim, o cliente não espera, apenas passa a operação para a fila. A fila não significa que vai ser um processo lento, o cliente não espera por isso e é feito como um processo bonito, sabe, em segundo plano, mas é feito bem rápido. Porque muitas operações dentro do cache são feitas de maneira assíncrona.

...
datetime2 = DateTime.Now;
Console.WriteLine("Time to remove " + objectsCount + " objects normally: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nAdding items using Async API now");
datetime1 = DateTime.Now;

for (int i = 0; i < objectsCount; i++)
{
    //cache.Insert(key + i, obj1);
    cache.InsertAsync(key + i, obj1, OnItemAdded, "","");
}
datetime2 = DateTime.Now;
Console.WriteLine("Time to add " + objectsCount + " objects with Async API: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nRemoving " + objectsCount + " items with Async API now");
...

Deixe-me lhe dar um exemplo. Então, por exemplo, se se fala em replicação, se você se lembrar no processo de criação de cache, nós a configuramos como assíncrona. Então, usando isso basicamente muitos deles são feitos como um processo em segundo plano. Eles são muito confiáveis. É só que sua aplicação, o processo principal, a tarefa principal não é afetada por isso. Portanto, ele adicionou esses itens ao cache levou cerca de 49 segundos para adicionar esses itens ao cache. Agora, na verdade, está removendo esses 5,000 itens. Agora, uma vez feito isso, veremos como são as chamadas assíncronas. Então, ele tem que mover 5,000 itens. Demorou cerca de 25 segundos para remover esses itens e agora está adicionando itens com a chamada assíncrona e vamos ver quanta diferença temos entre 49 segundos e o número que vamos obter agora em termos de quando ' re adicionando itens no cache. Aí está. Assim, de 49 segundos, caiu para 28 segundos na parte de adições e, no caso de remover esses itens, caiu de 25 segundos para 1.6 segundos. Então, esse é o desempenho que podemos realmente ver quando você envolve isso. Então, você pode ver que há uma grande diferença. São cerca de 25 segundos de diferença entre a remoção de itens de uma chamada de remoção básica e, em seguida, de uma chamada de remoção assíncrona. Então, isso é algo que você pode esperar desses tipos de recursos oferecidos pelo NCache.

API assíncrona

NICs duplas - Demonstração

Vamos realmente voltar para a apresentação. Cobrimos a assíncrona e a próxima é a serialização compacta. Então, novamente, apenas isso é abordado nos cenários em que você não tem o luxo de fazer uma atualização no código e, usando isso, você pode marcar todas essas classes como serializáveis. Kal com esse comentário, temos cerca de 3 minutos restantes, então… Certo, certo. Vou apenas encobri-lo rapidamente. Então, as duas últimas coisas que restaram foram: uma é a serialização compacta e depois temos o recurso de NICs duplas. Então, como mencionei anteriormente, se você vir que seu recurso de rede está sendo maximizado, por padrão, tanto o tipo de comunicação, comunicação servidor-servidor quanto comunicação cliente-servidor, ambos estariam acontecendo na mesma placa de interface de rede. Mas, se você perceber que seus recursos de rede estão sendo maximizados, o que você pode fazer é separar o tipo de comunicação entre cliente para servidor e, em seguida, de servidor para servidor. É uma tarefa muito simples dentro do NCache Gerente. Se você vier aqui, para selecioná-lo, basta clicar aqui com o botão direito e clicar em selecionar NIC.

Configurar placa de rede

Depois de selecionar NIC, você pode realmente especificar qual comunicação deseja que ocorra neste determinado IP. Como tenho apenas um, tenho essas opções disponíveis. Se eu tiver vários IPs, posso selecionar isso ali mesmo. Então, vou clicar em cancelar.

Selecionar placa de rede

Não tivemos a chance de fazer a demonstração de serialização compacta devido à falta de tempo, mas posso compartilhar esta amostra com vocês e você pode testá-la e ver como isso funciona para você. Sam até você. Perfeito. Bem, muito obrigado pelo seu tempo Kal.

Há alguma pergunta antes de encerrarmos a sessão de hoje? Vou dar um minuto para ver se há alguma dúvida. Ok, então, há uma pergunta.

Você pode compartilhar o link onde você vai compartilhar esta apresentação? Então, Kal, acho que estaria disponível em nosso site, certo?

Sim, ele estará disponível e eu tenho o e-mail deles anotado lá. Então, o que eu posso fazer é enviar um e-mail para eles assim que ele for carregado. OK. Na verdade, temos outra pergunta.

Podemos agendar uma apresentação, ok, então, podemos agendar uma demonstração para nossa equipe?

Sim absolutamente. Você certamente pode agendar uma demonstração. Você pode entrar em contato com nossa equipe de suporte support@alachisoft.com ou nossa equipe de vendas sales@alachisoft.com e deixe-nos saber quais são suas preferências de horário e teremos o maior prazer em agendar uma sessão personalizada para você.

Ok, Kal, então eu vou em frente e embrulhar isso. Acho que não temos mais perguntas. Obrigado a todos por se juntarem e participarem da sessão hoje, agradecemos. Como eu disse, se você tiver alguma dúvida, entre em contato com nossa equipe de suporte ou para perguntas relacionadas a vendas, entre em contato com nossa equipe de vendas. Estaremos aqui para ajudar. Sinta-se livre para nos ligar. Você também pode entrar em contato conosco diretamente por telefone. Está em nosso site. Até a próxima, muito obrigado e tenha uma boa noite, tchau.

O que fazer a seguir?

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