Compartilhar via


Cache local no Serviço de Aplicativo do Azure

Dica

Você também pode fazer perguntas ao Microsoft Copilot no Azure:

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

Para localizar o Copilot no Azure, na barra de ferramentas do portal do 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. Esse design funciona com vários aplicativos e tem os seguintes atributos:

  • O conteúdo é compartilhado entre várias instâncias de VM (máquina virtual) do aplicativo.
  • O conteúdo é durável e os aplicativos em execução podem modificá-lo.
  • Arquivos de log e 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 exibir imediatamente o mesmo conteúdo por meio do site do SCM (Gerenciador de Controle de Origem, 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 muitos aplicativos usem um ou mais desses recursos, alguns aplicativos precisam de um repositório de conteúdo somente leitura de alto desempenho que eles possam executar com alta disponibilidade. Esses aplicativos podem se beneficiar da execução em um cache local na instância da VM.

O recurso de cache local no Serviço de Aplicativo do Azure fornece uma exibição de função da Web do seu conteúdo. Esse conteúdo é um cache de write-but-discard do seu conteúdo de armazenamento que é criado de forma assíncrona na inicialização do site. Quando o cache estiver pronto, o site alternará para executar o conteúdo em cache.

Aplicativos em execução com um benefício de cache local destas maneiras:

  • Elas são imunes a latências associadas ao acesso ao conteúdo no Armazenamento do Azure.
  • Problemas de conexão com o armazenamento não os afetam, pois a cópia somente leitura é armazenada em cache localmente.
  • Eles experimentam menos reinicializações de aplicativo a partir de alterações no compartilhamento de armazenamento.

Observação

Não há suporte para o recurso de cache local em aplicativos de funções ou aplicativos do Serviço de Aplicativo em contêineres, como em contêineres do Windows ou em contêineres internos ou personalizados do Linux. Uma versão do recurso que está disponível para esses tipos de aplicativo é o Cache de Aplicativos.

O recurso de cache local também não tem suporte nos tipos de preço 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 agora aponta para o cache local, que é criado na instância da VM quando o aplicativo é iniciado. D:\local continua apontando para o armazenamento temporário específico da VM.

  • O cache local contém uma cópia única das pastas /site e/siteextensions do repositório de conteúdo compartilhado. 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 para 2 GB. À medida que o tamanho do cache aumenta, leva mais tempo para carregar o cache. 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 lerá o 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 troca podem falhar com um erro. Para obter detalhes, consulte as perguntas frequentes sobre os limites de tamanho posteriormente neste artigo.

  • O cache local é de leitura/gravação. 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 críticos.

  • D:\home\LogFiles e D:\home\Data contêm arquivos de log e dados do aplicativo. Essas pastas são armazenadas localmente na instância da VM e são copiadas periodicamente para o repositório de conteúdo compartilhado. Embora os aplicativos possam manter arquivos de log e dados gravando nesses diretórios, o processo de cópia é realizado com o melhor esforço. Arquivos e dados de log poderão ser perdidos se uma instância de VM parar de responder repentinamente.

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

  • No repositório de conteúdo compartilhado, a estrutura de pastas para LogFiles e Data muda em aplicativos que usam um cache local. Agora há 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 em que o aplicativo está ou estava em execução.

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

  • Implantações de aplicativo por meio de qualquer método com suporte são publicadas diretamente no repositório de conteúdo compartilhado durável. Para atualizar as pastas D:\home\site e D:\home\siteextensions no cache local, você deve reiniciar o aplicativo. Para obter um ciclo de vida contínuo, consulte a seção sobre as práticas recomendadas mais adiante neste artigo.

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

Observação

Se você estiver usando Java (Java SE, Tomcat ou JBoss EAP), por padrão, os artefatos Java (arquivos .jar, .war e .ear) serão copiados localmente para o trabalho. Se o aplicativo Java depender do 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.

Métodos para habilitar um cache local

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

Configurar um cache local usando o portal do Azure

Habilite um cache local por aplicativo Web adicionando esta configuração de 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 repositório de conteúdo. Ele também inclui todos os logs e pastas de dados gerados localmente.

Para aumentar esse limite, use a configuração WEBSITE_LOCAL_CACHE_SIZEINMBdo aplicativo. Você pode aumentar o tamanho até 2 GB (2.000 MB) por aplicativo. Tenha em mente que um tamanho de cache maior aumenta o tempo para carregar o cache.

Práticas recomendadas para usar um cache local

É recomendável usar um cache local em conjunto com o recurso de ambientes de preparo .

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

  1. Adicione a configuração de aplicativo temporária WEBSITE_LOCAL_CACHE_OPTION com o valor Always ao seu slot de produção. Se você estiver usando WEBSITE_LOCAL_CACHE_SIZEINMB, marque também essa configuração como uma configuração fixa para o slot de produção.

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

  3. Teste seu site no slot de preparo.

  4. Quando estiver pronto, execute uma operação de troca entre os slots de preparo e de produção.

As configurações fixas estão vinculadas ao slot. Quando o slot de preparação é trocado para produção, ele herda as definições do aplicativo do cache local. O slot de produção recém-trocado é executado no cache local após alguns minutos e é aquecido durante o aquecimento do slot. Depois que a troca for concluída, o slot de produção passará a funcionar no cache local.

Perguntas frequentes

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

Se os arquivos copiados excederem o limite de tamanho do 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 Leitura do cache local.
≤ 2 GB > tamanho do cache local Leitura do compartilhamento remoto.

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

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

Um cache local será adequado se todas essas condições se aplicarem:

  • Seu aplicativo requer um repositório de conteúdo confiável e de alto desempenho.
  • Seu aplicativo não usa o repositório de conteúdo para gravar dados críticos em runtime.
  • O tamanho total é menor que 2 GB.

Para verificar o tamanho total de suas pastas /site e /siteextensions, você pode usar a extensão para 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 preparo, a operação de troca não será concluída até que o cache local seja aquecido. Para verificar se o site está em execução contra o cache local, verifique a variável de ambiente do processo de trabalho WEBSITE_LOCALCACHE_READY. Para 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 publicadas recentemente?

Se o aplicativo usar um cache local, você deverá reiniciar o site para carregar as alterações mais recentes. Se você preferir não publicar alterações diretamente em seu site de produção, considere o uso de slots de implantação, conforme descrito na seção anterior sobre as práticas recomendadas.

Observação

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

Onde estão meus logs?

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

Por que meu aplicativo ainda é reiniciado com um cache local habilitado?

Um cache local ajuda a evitar reinicializações de aplicativo relacionadas ao armazenamento. No entanto, seu aplicativo ainda pode ser reiniciado durante as atualizações planejadas de infraestrutura na VM. No geral, você deve observar menos reinicializações com um cache local habilitado.

Um cache local exclui os diretórios de serem copiados para a unidade local mais rápida?

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

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

Para liberar os logs de cache local, pare e reinicie o aplicativo. Essa 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 arquivos implantados anteriormente reaparecerem após uma reinicialização, verifique a presença da configuração WEBSITE_DISABLE_SCM_SEPARATION=truedo aplicativo. Adicionar essa configuração faz com que as implantações por meio do Kudu escrevam na VM local em vez de armazenamento persistente. Para evitar essa situação, siga as práticas recomendadas mencionadas anteriormente e execute implantações em um slot de preparo que não tenha um cache local habilitado.