Propriedades e visão geral do carregador de cache e do atualizador
NCache fornece um carregador de cache de inicialização para pré-carregar o cache com dados essenciais na inicialização. Esse mecanismo é vital em cenários em que um aplicativo requer conjuntos de dados específicos imediatamente após iniciar a execução.
Por exemplo, imagine um site de streaming de vídeo com centenas de vídeos que precisam estar disponíveis para o usuário no momento em que ele acessa o site. Aqui, o cache pode ser pré-carregado com vídeos existentes na inicialização do cache, em vez de adicionar os dados manualmente.
Note
Às vezes, o Cache Loader pode falhar ao carregar os dados com êxito devido a um problema de conectividade com a fonte de dados primária ou a um erro ao executar a implementação personalizada do Cache Loader. Para identificar tal erro/exceção, verifique os logs do Serviço de Execução.
Carregar seu cache com dados na inicialização pode ser muito útil. Ao fazer isso, você pode evitar problemas de desempenho na inicialização do cache devido a um cache vazio - resultando em solicitações de dados frequentes ao banco de dados (que é lento). o NCache O recurso Cache Startup Loader ajudará você a pré-carregar seu cache com dados de sua escolha no momento da inicialização.
Apesar das vantagens de pré-carregar os dados, isso faz com que os dados carregados no cache se tornem obsoletos. O usuário carrega os dados relevantes na inicialização do cache e qualquer alteração que ocorra na fonte de dados os desatualiza. Para evitar essa invalidação, NCache fornece outro recurso chamado Cache Refresher. O Cache Refresher é responsável por sincronizar os dados carregados no cache com os dados atualizados na fonte de dados.
Propriedades do Carregador e Atualizador de Cache
A NCache O Cache Loader e o Refresher são recursos essenciais para aumentar o desempenho geral do aplicativo, especialmente na inicialização do cache. Como todo recurso, esses recursos também possuem suas próprias propriedades. Explicamos essas propriedades abaixo:
NCache Serviço de Execução
No mais cedo NCache versões, o cache e o Cache Loader costumavam rodar no mesmo processo, o que sobrecarregava o processo de cache, principalmente no momento do carregamento. Esse estresse resultou na degradação temporária do desempenho do cache geral.
Então, para topologias OutProc, NCache tem um dedicado NCache Serviço de Execução (anteriormente conhecido como Serviço Carregador) para gerenciar tarefas e carregar dados da fonte de dados em caches na inicialização do cache. Este serviço cumpre diferentes responsabilidades nas edições .NET e Java. Na edição .NET, ele gerencia o Cache Loader e o Refresher. Considerando que, na Edição Java, o serviço é responsável por gerenciar o Cache Loader, Refresher, Data Source Providers e publicação de contadores JMX.
Alternativamente, em uma topologia clusterizada, cada nó possui um serviço dedicado responsável por carregar dados em seu cache. Porém, dentro da topologia InProc, a tarefa ainda é executada no mesmo processo.
Conjuntos de dados
Para topologias em cluster, se os dados carregados em um único nó ocupam um tempo considerável, NCache permite a distribuição da carga de dados entre os nós do cluster. Os dados são distribuídos com base em conjuntos de dados fornecidos pelo usuário para cada nó. Cada nó tem NCache Serviço de Execução atribuído para carregar os dados de acordo com os conjuntos de dados. Basicamente, um conjunto de dados é uma forma de agrupar dados semelhantes para carregá-los juntos.
Atribuição de conjunto de dados a servidores de cache em tempo de execução
Note
NCache atribui internamente os conjuntos de dados aos nós - garantindo que dois nós não carreguem os mesmos dados no cache. Essa atribuição também permite que um grande volume de dados seja carregado em menos tempo.
O nó coordenador distribui conjuntos de dados entre os nós do cluster em um modo round-robin. Portanto, cada um dos servidores recebe um conjunto de dados da lista. Quando um dos nós termina de carregar dados em seu conjunto de dados, ele recebe o próximo conjunto de dados para carregar. Essencialmente, se o número de conjuntos de dados de distribuição for maior que o número de nós, NCache atribuirá um conjunto de dados a cada nó e, quando não houver mais nós disponíveis, atribuirá o próximo conjunto de dados ao primeiro nó disponível (que terminou de carregar os dados).
Digamos que o usuário queira carregar dados específicos do banco de dados Northwind em um cache clusterizado de 3 nós na inicialização, então o desempenho do Cache Loader é afetado pelo número de conjuntos de dados atribuídos. Discutimos esse comportamento abaixo:
5 conjuntos de dados para carregar: O usuário aloca 5 conjuntos de dados (Experiência e dinâmica de loja, Encomenda, Produtos, Colaboradores e Fornecedores) para o carregador. O nó coordenador então atribui os conjuntos de dados aos nós de maneira round-robin – Experiência e dinâmica de loja para o nó1, Encomendas para o nó2, e Produtos para o nó3. Assim que um nó termina de carregar os dados, o coordenador atribui o próximo conjunto de dados, ou seja, Colaboradores e eventualmente Fornecedores para o próximo nó disponível.
3 conjuntos de dados para carregar: O usuário atribui 3 conjuntos de dados (Clientes, Produtos e Encomendas) para o Loader - o que significa que cada nó é responsável pelo conjunto de dados atribuído a ele, portanto, ele carregará os dados de acordo com o conjunto de dados, garantindo uma distribuição igual.
2 conjuntos de dados para carregar: O usuário atribui 2 conjuntos de dados (Clientes e Produtos) para o carregador. Como o cluster consiste em três nós, o terceiro nó ficará ocioso durante o processo de carregamento. É por isso que prefere que o número de conjuntos de dados seja igual ou superior ao número de nós – garantindo a utilização máxima.
Agendamento de conjunto de dados
Conjuntos de dados precisam de agendamento para atualização. Portanto, NCache fornece uma opção de agendamento que decide o intervalo de tempo após o qual os dados do cache são atualizados. Neste momento, o Intervalo de Atualização verifica os conjuntos de dados a serem atualizados, atualizando/atualizando assim os dados consequentes no cache. As quatro opções de agendamento diferentes fornecidas com o Cache Refresher funcionam da seguinte maneira:
Intervalo Diário: o intervalo diário garante que um conjunto de dados seja atualizado em um intervalo definido após o início do cache. O valor do intervalo está em minutos. Por exemplo, 20 minutos significa que o conjunto de dados é atualizado a cada 20 minutos.
Horário diário: a opção de horário diário garante que um conjunto de dados seja atualizado todos os dias em um horário específico fornecido pelo usuário. Ao contrário dos intervalos diários com um intervalo de no máximo 60 minutos, geralmente o intervalo é de 24 horas e não depende do início do cache para começar. Geralmente é empregado quando os conjuntos de dados não são atualizados com tanta frequência quanto aqueles com intervalos diários.
Semanal: a opção semanal garante que um conjunto de dados seja atualizado em dias específicos todas as semanas, no horário especificado pelo usuário. Por exemplo, se quiser que seus conjuntos de dados carregados sejam atualizados todas as segundas, quintas e sábados exatamente à meia-noite, você precisará definir o agendamento semanal do conjunto de dados.
Mensal: a opção mensal garante que um conjunto de dados seja atualizado em um ou vários dias especificados todos os meses e em um ou vários dias da semana por semana. Por exemplo, você pode especificar a atualização do conjunto de dados para que o serviço o atualize todas as segundas-feiras de cada primeira e última semana do mês.
A expressão de agendamento tem o formato week:days:hours:minutes
para especificar a expressão de agendamento.
- As semanas podem ser de 1 a 4, sendo 1 a primeira semana do mês.
- Os dias podem ser de 1 a 7 mostrando os dias da semana. As horas e minutos podem ser de acordo com a hora do dia para agendamento. Você pode especificar mais de um dia da semana adicionando os dias separados por uma vírgula.
- Os usuários podem selecionar várias semanas de um mês para agendamento.
Vejamos alguns exemplos para entender como funciona a expressão de agendamento:
A expressão
1,2:2:00:00
para agendamento refere-se às atualizações do conjunto de dados no segundo dia da primeira e segunda semana do mês à meia-noite.A expressão
1:1,2,7:15:30
para agendamento mostra a atualização dos conjuntos de dados no primeiro, segundo e sétimo dia da primeira semana do mês (segunda, terça e domingo) às 3h30.
Mecanismo de Carregamento
O usuário especifica a implementação de quais objetos são carregados da fonte de dados mestre. Cada dado individual existe como um conjunto completo CacheItem
- adicionado ao cache na inicialização do cache.
Novas tentativas do carregador de cache
Se uma operação falhar durante o carregamento do cache, NCache executa-o antes de prosseguir para o próximo. Por padrão, NCache não repete a operação com falha. No entanto, você pode habilitar isso através do NCache Centro de Gerenciamento.
Intervalo de repetição do carregador de cache
Se o usuário optar por habilitar novas tentativas para operações com falha, o usuário também pode especificar o intervalo de tempo para aguardar (em segundos) antes de tentar a operação com falha novamente. O intervalo é 0 por padrão. No entanto, é configurável pelo usuário através do NCache Centro de Gerenciamento.
Intervalo de atualização
Para verificar quais conjuntos de dados precisam ser atualizados/atualizados, um thread é executado após um tempo específico, conhecido como Intervalo de Atualização. Por padrão, o intervalo de atualização é de 900 segundos. O valor mínimo para este intervalo é 1 segundo e o máximo é 3600 segundos. Os usuários podem configurar o intervalo de atualização através do NCache Centro de Gerenciamento.
Atualização de conjunto de dados sob demanda
O usuário também tem a opção de atualizar seus conjuntos de dados manualmente através do Invocar-RefresherDataset cmdlet. Por meio desse cmdlet, o usuário pode atualizar seus conjuntos de dados imediatamente ou nas próximas 24 horas usando o RefreshPreference
opção deste cmdlet. Esta opção identifica quando esta atualização sob demanda ocorrerá com base no fato de o processo resultar ou não em degradação. Caso contrário, o conjunto de dados será RefreshNow
. Em caso afirmativo, o conjunto de dados será atualizado no próximo horário agendado por meio do RefreshOnNextTimeOfDay
opção.
Veja também
Componentes do Carregador e Atualizador de Inicialização do Cache
Provedores de fonte de dados (fonte de apoio)
Atualizar NCache versões