Partilhar via


Cache local no Serviço de Aplicativo do Azure

Sugestão

Também pode fazer estas perguntas ao Azure Copilot :

  • Como funciona um cache local no Azure App Service?
  • Quais são os benefícios de usar um cache local no Serviço de Aplicativo do Azure?
  • Quais são as limitações de usar um cache local no Serviço de Aplicativo do Azure?

Para usar o Azure Copilot, na barra de ferramentas do portal Azure , selecione Copilot.

O conteúdo do Serviço de Aplicativo do Azure é armazenado no Armazenamento do Azure e é exposto como um compartilhamento de conteúdo durável. Este design funciona com várias aplicações e tem os seguintes atributos:

  • O conteúdo é compartilhado entre várias instâncias de máquina virtual (VM) do aplicativo.
  • O conteúdo é durável e os aplicativos em execução podem modificá-lo.
  • Os arquivos de log e os arquivos de dados de diagnóstico estão disponíveis na mesma pasta de conteúdo compartilhado.
  • A publicação de novo conteúdo atualiza diretamente a pasta de conteúdo. Você pode visualizar imediatamente o mesmo conteúdo através do site do Gerenciador de Controle do Código-Fonte (SCM, também conhecido como Kudu) e do aplicativo em execução. No entanto, algumas tecnologias (como ASP.NET) podem iniciar uma reinicialização do aplicativo em determinadas alterações de arquivo para carregar o conteúdo mais recente.

Embora muitas aplicações usem uma ou mais dessas funcionalidades, algumas aplicações precisam de um armazenamento de conteúdo só de leitura de alto desempenho para que possam funcionar com alta disponibilidade. Estes aplicativos podem beneficiar de correr contra uma cache local na instância da VM.

O recurso de cache local no Serviço de Aplicativo fornece uma exibição de função Web do seu conteúdo. Esse conteúdo é um cache de gravação descartável do conteúdo de armazenamento, criado de forma assíncrona no arranque do site. Quando o cache estiver pronto, o site alternará para funcionar com o conteúdo em cache.

Os aplicativos executados com um cache local se beneficiam das seguintes maneiras:

  • Eles são imunes às latências associadas ao acesso ao conteúdo no Armazenamento do Azure.
  • Problemas com a ligação ao armazenamento não lhes afetam, porque a cópia só de leitura está em cache localmente.
  • Eles experimentam menos reinicializações de aplicativos a partir de alterações no compartilhamento de armazenamento.

Observação

O recurso de cache local não é suportado em aplicativos funcionais ou aplicativos do Serviço de Aplicativo em contêineres, como em contêineres do Windows ou em contêineres Linux internos ou personalizados. O Cache de Aplicativos é uma versão do recurso disponível para esses tipos de aplicativos.

O recurso de cache local também não é suportado nas camadas de preços F1 e D1 do Serviço de Aplicativo.

Como um cache local altera o comportamento do Serviço de Aplicativo

A configuração de um cache local causa estas alterações:

  • D:\home aponta para o cache local, que é criado na instância da VM quando o aplicativo é iniciado. D:\local continua a apontar para o armazenamento temporário específico da VM.

  • O cache local contém uma cópia única das pastas /site e /siteextensions do armazenamento de conteúdo partilhado. Essas pastas estão localizadas em D:\home\site e D:\home\siteextensions, respectivamente. Esses arquivos são copiados para o cache local na inicialização do aplicativo.

    O tamanho dessas duas pastas é limitado a 1 GB por padrão, mas você pode aumentar o tamanho para 2 GB. À medida que o tamanho do cache aumenta, leva mais tempo para carregá-lo. Se você aumentar o limite de cache local para 2 GB e os arquivos copiados excederem esse tamanho máximo, o Serviço de Aplicativo ignorará silenciosamente o cache local e fará leituras do compartilhamento de arquivos remoto.

    Importante

    Quando os arquivos copiados excedem o limite de tamanho definido para o cache local ou quando nenhum limite é definido, as operações de implantação e permuta podem falhar com um erro. Para obter detalhes, consulte as Perguntas Frequentes sobre limites de tamanho mais adiante neste artigo.

  • A cache local permite leitura e escrita. No entanto, todas as modificações são descartadas quando o aplicativo se move entre VMs ou reinicia. Não use o cache local para armazenar dados de missão crítica.

  • D:\home\LogFiles e D:\home\Data contêm ficheiros de registo e dados da aplicação. Essas pastas são armazenadas localmente na instância da VM e são copiadas periodicamente para o armazenamento de conteúdo compartilhado. Embora os aplicativos possam persistir arquivos de log e dados gravando nessas pastas, o processo de cópia é o melhor esforço. Os arquivos de log e os dados podem ser perdidos se uma instância de VM parar de responder repentinamente.

  • A cópia de esforço máximo afeta a transmissão de registos. Você pode observar um atraso de até um minuto nos logs transmitidos.

  • No armazenamento de conteúdo partilhado, a estrutura de pastas para LogFiles e Data muda para aplicações que utilizam um cache local. Agora existem subpastas com nomes que consistem em um identificador exclusivo e um carimbo de data e hora. Cada subpasta corresponde a uma instância de VM onde o aplicativo está ou estava sendo executado.

  • Outras pastas em D:\home permanecem no cache local e não são copiadas para o armazenamento de conteúdo partilhado.

  • As implantações de aplicações por meio de qualquer método suportado são publicadas diretamente no armazenamento de conteúdo compartilhado durável. Para atualizar as D:\home\site pastas e D:\home\siteextensions no cache local, reinicie o aplicativo. Para ajudar a garantir um ciclo de vida contínuo, consulte a seção sobre práticas recomendadas mais adiante neste artigo.

  • A exibição de conteúdo padrão do site do SCM continua a refletir o armazenamento de conteúdo compartilhado.

Observação

Se você usar Java (Java SE, Tomcat ou JBoss EAP), por padrão, os artefatos Java (arquivos .jar, .war e .ear) serão copiados localmente para o trabalhador. Se a sua aplicação Java depender de acesso somente leitura a arquivos adicionais, defina JAVA_COPY_ALL para true para que esses arquivos também sejam copiados. Se um cache local estiver habilitado, ele terá precedência sobre esse comportamento específico do Java. JAVA_COPY_ALL não é compatível com a convenção herdada de implantação no /home/site/wwwroot/webapps.

Métodos para habilitar um cache local

Você configura um cache local usando uma combinação de configurações reservadas do aplicativo. Você pode definir essas configurações do aplicativo usando um dos seguintes métodos.

Configurar um cache local usando o portal do Azure

Habilite um cache local por aplicativo da Web adicionando esta configuração do aplicativo: WEBSITE_LOCAL_CACHE_OPTION = Always.

Configurar um cache local usando o Azure Resource Manager

{
    "apiVersion": "2015-08-01",
    "type": "config",
    "name": "appsettings",
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('siteName'))]"
    ],

    "properties": {
        "WEBSITE_LOCAL_CACHE_OPTION": "Always",
        "WEBSITE_LOCAL_CACHE_SIZEINMB": "1000"
    }
}

Alterando a configuração de tamanho em um cache local

Por padrão, o tamanho do cache local é de 1 GB. Esse tamanho inclui as pastas /site e /siteextensions copiadas do armazenamento de conteúdo. Também inclui quaisquer logs e pastas de dados gerados localmente.

Para aumentar este limite, use a configuração da aplicação WEBSITE_LOCAL_CACHE_SIZEINMB. Você pode aumentar o tamanho até 2 GB (2.000 MB) por aplicativo. Lembre-se de que um tamanho de cache maior aumenta o tempo de carregamento do cache.

Práticas recomendadas para utilizar uma cache local

Recomendamos o uso de um cache local junto com o recurso de ambientes de preparação .

O processo a seguir representa as práticas recomendadas para usar um cache local:

  1. Adicione a definição de aplicativo permanente WEBSITE_LOCAL_CACHE_OPTION com o valor Always ao seu slot de produção. Se estiveres a usar WEBSITE_LOCAL_CACHE_SIZEINMB, marca também essa definição como uma definição fixa para o slot de produção.

  2. Crie um slot intermédio e publique nele. Normalmente, você não define o slot de preparo para usar um cache local. Essa configuração ajuda a habilitar um ciclo de vida de compilação/implantação/teste contínuo e, ao mesmo tempo, fornece benefícios de cache local para o slot de produção.

  3. Teste o seu site no ambiente de preparação.

  4. Quando estiveres pronto, efetua uma troca entre os slots de preparação e produção.

As definições fixas estão ligadas ao slot. Quando o slot de teste é transferido para produção, ele herda do cache local as configurações do aplicativo. O slot de produção recém-trocado é executado no cache local após alguns minutos e é aquecido durante o aquecimento do slot. Após a conclusão da troca, o slot de produção é executado no cache local.

Perguntas frequentes

E se eu exceder o limite de tamanho para o cache local?

Se os arquivos copiados excederem o limite de tamanho para o cache local, o aplicativo será revertido para leitura do compartilhamento remoto. A tabela a seguir mostra os detalhes.

Tamanho do cache local Arquivos copiados Resultado
≤ 2 GB ≤ tamanho do cache local Lê a partir do cache local.
≤ 2 GB > tamanho do cache local Lê a partir do compartilhamento remoto.

As operações de implantação e permuta podem falhar com um erro.

Como posso saber se meu aplicativo pode se beneficiar de um cache local?

Um cache local é adequado se todas estas condições se aplicarem:

  • Seu aplicativo requer um armazenamento de conteúdo confiável e de alto desempenho.
  • Seu aplicativo não usa o armazenamento de conteúdo para gravar dados críticos em tempo de execução.
  • O tamanho total é inferior a 2 GB.

Para verificar o tamanho total das pastas /site e /siteextensions, pode usar a extensão do site Azure Web Apps Disk Usage.

Como posso saber se meu site mudou para usar um cache local?

Quando você estiver usando um cache local com ambientes de preparação, a operação de permuta não será concluída até que o cache local seja aquecido. Para verificar se o seu site está a ser executado no cache local, verifique a variável de ambiente do processo de trabalho WEBSITE_LOCALCACHE_READY. Para obter informações sobre como inspecionar essa variável em várias instâncias, consulte as instruções do Kudu para a variável de ambiente de processo de trabalho.

Por que meu aplicativo não reflete as alterações recém-publicadas?

Se seu aplicativo usa um cache local, reinicie o site para carregar as alterações mais recentes. Se preferir não publicar as alterações diretamente no site de produção, considere o uso de slots de implantação, como descrito na seção anterior sobre práticas recomendadas.

Observação

A opção de implementação executar a partir do pacote não é compatível com o recurso de cache local.

Onde estão os meus registos?

Quando você está usando um cache local, a estrutura de suas pastas de log e dados muda ligeiramente. As subpastas agora estão aninhadas em uma pasta nomeada com o identificador exclusivo da VM e um carimbo de data/hora. Cada uma dessas pastas corresponde à instância da VM onde o aplicativo está ou estava sendo executado.

Por que meu aplicativo ainda é reiniciado quando um cache local está habilitado?

Um cache local ajuda a impedir reinicializações de aplicativos relacionados ao armazenamento. No entanto, seu aplicativo ainda pode reiniciar durante as atualizações de infraestrutura planejadas na VM. No geral, você deve observar menos reinicializações se tiver um cache local habilitado.

Um cache local exclui qualquer diretório de ser copiado para a unidade local mais rápida?

Durante o processo de cópia, qualquer pasta chamada repository é excluída. Esse comportamento é útil em cenários em que o conteúdo do site inclui um repositório de controle de origem que você não precisa para operações diárias.

Como faço para liberar os logs de cache local após uma operação de gerenciamento de site?

Para liberar os logs de cache local, pare e reinicie o aplicativo. Esta ação limpa o cache anterior.

Por que o Serviço de Aplicativo mostra arquivos implantados anteriormente após uma reinicialização quando um cache local está habilitado?

Se os ficheiros implantados anteriormente reaparecerem após uma reinicialização, verifique a presença da configuração do aplicativo WEBSITE_DISABLE_SCM_SEPARATION=true. Adicionar essa configuração faz com que implantações via Kudu gravem na VM local em vez de armazenamento persistente. Para evitar esta situação, siga as melhores práticas mencionadas anteriormente e execute implementações em um slot de teste sem cache local ativo.