Condividi tramite


Cache locale nel servizio app di Azure

Suggerimento

È anche possibile porre queste domande a Azure Copilot :

  • Come funziona una cache locale nel servizio app di Azure?
  • Quali sono i vantaggi dell'uso di una cache locale nel servizio app di Azure?
  • Quali sono le limitazioni dell'uso di una cache locale nel servizio app di Azure?

Per usare Azure Copilot, nella barra degli strumenti del portale di Azure selezionare Copilot.

Il contenuto del servizio app di Azure viene archiviato in Archiviazione di Azure ed è esposto come condivisione di contenuto durevole. Questa progettazione funziona con varie app e presenta gli attributi seguenti:

  • Il contenuto viene condiviso tra più istanze di macchina virtuale dell'app.
  • Il contenuto è durevole e le app in esecuzione possono modificarlo.
  • I file di log e i file di dati di diagnostica sono disponibili nella stessa cartella di contenuto condiviso.
  • La pubblicazione di nuovo contenuto aggiorna direttamente la cartella del contenuto. È possibile visualizzare immediatamente lo stesso contenuto tramite il sito Web di Gestione controllo del codice sorgente (SCM, noto anche come Kudu) e l'app in esecuzione. Tuttavia, alcune tecnologie (ad esempio ASP.NET) potrebbero avviare un riavvio dell'app in determinate modifiche ai file per caricare il contenuto più recente.

Anche se molte app usano una o più di queste funzionalità, alcune app necessitano di un archivio di contenuti ad alte prestazioni e di sola lettura da cui possono essere eseguite con disponibilità elevata. Tali app possono trarre vantaggio dall'esecuzione su una cache locale nell'istanza della macchina virtuale.

La funzionalità cache locale nel servizio app offre una visualizzazione del ruolo Web del contenuto. Questo contenuto è costituito da una cache di scrittura con rimozione del contenuto di archiviazione creato in modo asincrono all'avvio del sito. Quando la cache è pronta, il sito passa all'esecuzione sul contenuto memorizzato nella cache.

Le app in esecuzione con una cache locale traggono vantaggio in questi modi:

  • Sono immuni alle latenze associate all'accesso al contenuto in Archiviazione di Azure.
  • I problemi di connessione all'archiviazione non influiscono su di essi, perché la copia di sola lettura viene memorizzata nella cache in locale.
  • Si verificano meno riavvii dell'app dalle modifiche apportate alla condivisione di archiviazione.

Annotazioni

La funzionalità cache locale non è supportata nelle app per le funzioni o nelle app del servizio App containerizzate, come nei contenitori Windows o nei contenitori Linux predefiniti o personalizzati. Cache app è una versione della funzionalità disponibile per questi tipi di app.

La funzionalità cache locale non è supportata anche nei piani tariffari F1 e D1 del servizio app.

Come una cache locale modifica il comportamento del servizio app

La configurazione di una cache locale causa queste modifiche:

  • D:\home punta alla cache locale, creata nell'istanza della macchina virtuale all'avvio dell'app. D:\local continua a puntare all'archivio temporaneo specifico della macchina virtuale.

  • La cache locale contiene una copia una tantum delle /site cartelle e /siteextensions dall'archivio contenuto condiviso. Queste cartelle si trovano rispettivamente in D:\home\site e D:\home\siteextensions. Questi file vengono copiati nella cache locale all'avvio dell'app.

    Le dimensioni di queste due cartelle sono limitate a 1 GB per impostazione predefinita, ma è possibile aumentare le dimensioni a 2 GB. Man mano che le dimensioni della cache aumentano, il caricamento della cache richiede più tempo. Se si aumenta il limite di cache locale a 2 GB e i file copiati superano questa dimensione massima, il servizio app ignora automaticamente la cache locale e le letture dalla condivisione file remota.

    Importante

    Quando i file copiati superano il limite di dimensioni definito per la cache locale o quando non viene definito alcun limite, le operazioni di distribuzione e scambio potrebbero non riuscire con un errore. Per informazioni dettagliate, vedere le domande frequenti sui limiti di dimensioni più avanti in questo articolo.

  • La memoria cache locale è di lettura/scrittura. Tuttavia, eventuali modifiche vengono rimosse quando l'app si sposta tra macchine virtuali o riavvii. Non usare la cache locale per l'archiviazione di dati cruciali.

  • D:\home\LogFiles e D:\home\Data contengono file di log e dati dell'app. Queste cartelle vengono archiviate localmente nell'istanza della macchina virtuale e vengono copiate periodicamente nell'archivio contenuto condiviso. Anche se le app possono rendere persistenti i file di log e i dati scrivendo in queste cartelle, il processo di copia è il massimo sforzo. I file di log e i dati potrebbero essere persi se un'istanza di macchina virtuale smette improvvisamente di rispondere.

  • La copia best-effort influisce sullo streaming di log. È possibile osservare un ritardo di un minuto nei log trasmessi.

  • Nell'archivio di contenuti condivisi, la struttura di cartelle per LogFiles e Data cambia per le app che usano una cache locale. Sono ora disponibili sottocartelle con nomi costituiti da un identificatore univoco e da un timestamp. Ogni sottocartella corrisponde a un'istanza di macchina virtuale in cui l'app è o è in esecuzione.

  • Le altre cartelle in D:\home rimangono nella cache locale e non vengono copiate nell'archivio contenuto condiviso.

  • Le distribuzioni di app tramite qualsiasi metodo supportato vengono pubblicate direttamente nell'archivio di contenuti condivisi durevoli. Per aggiornare le D:\home\site cartelle e D:\home\siteextensions nella cache locale, è necessario riavviare l'app. Per garantire un ciclo di vita facile, vedere la sezione sulle procedure consigliate più avanti in questo articolo.

  • La visualizzazione contenuto predefinita del sito SCM continua a riflettere l'archivio contenuto condiviso.

Annotazioni

Se si usa Java (Java SE, Tomcat o JBoss EAP), per impostazione predefinita gli artefatti Java (file .jar, war ed .ear) vengono copiati localmente nel ruolo di lavoro. Se l'applicazione Java dipende dall'accesso in sola lettura a file aggiuntivi, impostare su JAVA_COPY_ALLtrue in modo che vengano copiati anche tali file. Se una cache locale è abilitata, ha la precedenza su questo comportamento specifico di Java. JAVA_COPY_ALL non è compatibile con la convenzione legacy di distribuzione in /home/site/wwwroot/webapps.

Metodi per abilitare una cache locale

È possibile configurare una cache locale usando una combinazione di impostazioni dell'app riservate. È possibile configurare queste impostazioni dell'app usando uno dei metodi seguenti.

Configurare una cache locale usando il portale di Azure

Abilitare una cache locale per ogni app Web aggiungendo questa impostazione dell'app: WEBSITE_LOCAL_CACHE_OPTION = Always.

Configurare una cache locale usando 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"
    }
}

Modifica dell'impostazione delle dimensioni in una cache locale

Per impostazione predefinita, la dimensione della cache locale è 1 GB. Questa dimensione include le cartelle /site e /siteextensions copiate dall'archivio contenuti. Include anche eventuali cartelle di dati e log generati localmente.

Per aumentare questo limite, usare l'impostazione WEBSITE_LOCAL_CACHE_SIZEINMBdell'app . È possibile aumentare le dimensioni fino a 2 GB (2.000 MB) per app. Tenere presente che una dimensione della cache maggiore aumenta il tempo necessario per caricare la cache.

Procedure consigliate per l'uso di una cache locale

È consigliabile usare una cache locale insieme alla funzionalità degli ambienti di staging.

Il processo seguente rappresenta le procedure consigliate per l'uso di una cache locale:

  1. Aggiungere l'impostazione dell'app sticky WEBSITE_LOCAL_CACHE_OPTION con il valore Always nello slot di produzione. Se si usa WEBSITE_LOCAL_CACHE_SIZEINMB, contrassegnare anche questa impostazione come impostazione permanente per lo slot di produzione.

  2. Creare uno slot di staging e pubblicarlo. In genere, non si imposta lo slot di staging per l'uso di una cache locale. Questa configurazione consente di abilitare un ciclo di vita facile di compilazione/distribuzione/test, offrendo comunque vantaggi della cache locale per lo slot di produzione.

  3. Testare il sito nell'ambiente di staging.

  4. Non appena sei pronto, effettua un'operazione di scambio tra gli slot di staging e di produzione.

Le impostazioni permanenti sono associate allo slot. Di conseguenza, quando lo slot di staging viene scambiato con lo slot di produzione, eredita le impostazioni dell'app della cache locale. Lo slot di produzione appena permutato viene eseguito nella cache locale dopo alcuni minuti e si riscalda durante la fase di avvio dello slot. Al termine dello scambio, lo slot di produzione viene eseguito nella cache locale.

Domande frequenti

Cosa accade se si supera il limite di dimensioni per la cache locale?

Se i file copiati superano il limite di dimensioni per la cache locale, l'app ripristina la lettura dalla condivisione remota. Nella tabella seguente vengono illustrati i dettagli.

Dimensioni della cache locale File copiati Risultato
≤ 2 GB ≤ dimensioni della cache locale Legge dalla cache locale.
≤ 2 GB > dimensioni della cache locale Legge dalla condivisione remota.

Le operazioni di distribuzione e scambio potrebbero non riuscire con un errore.

Come è possibile stabilire se l'app può trarre vantaggio da una cache locale?

Una cache locale è adatta se si applicano tutte queste condizioni:

  • L'app richiede un archivio contenuto affidabile e a prestazioni elevate.
  • L'app non usa l'archivio contenuto per la scrittura di dati critici in fase di esecuzione.
  • La dimensione totale è inferiore a 2 GB.

Per controllare le dimensioni totali delle cartelle /site e /siteextensions, è possibile utilizzare l'estensione del sito Azure Web Apps Disk Usage.

Come è possibile stabilire se il sito è passato all'uso di una cache locale?

Quando si usa una cache locale con ambienti di staging, l'operazione di scambio non viene completata fino a quando la cache locale non viene riscaldata. Per verificare se il sito viene eseguito nella cache locale, è possibile controllare la variabile di ambiente del processo di lavoro WEBSITE_LOCALCACHE_READY. Per informazioni sull'ispezione di questa variabile in più istanze, vedere le istruzioni Kudu per la variabile di ambiente del processo di lavoro.

Perché l'app non riflette le modifiche appena pubblicate?

Se l'app usa una cache locale, è necessario riavviare il sito per caricare le modifiche più recenti. Se si preferisce non pubblicare le modifiche direttamente nel sito di produzione, è consigliabile usare gli slot di distribuzione come descritto nella sezione precedente sulle procedure consigliate.

Annotazioni

L'opzione di distribuzione esegui dal pacchetto non è compatibile con la funzionalità della cache locale.

Dove si trovano i log?

Quando si usa una cache locale, la struttura delle cartelle di log e dati cambia leggermente. Le sottocartelle sono ora annidate in una cartella denominata con l'identificatore univoco della macchina virtuale e un timestamp. Ognuna di queste cartelle corrisponde all'istanza della macchina virtuale in cui l'app è o è in esecuzione.

Perché l'app viene ancora riavviata quando è abilitata una cache locale?

Una cache locale aiuta a prevenire i riavvii dell'app legati all'archiviazione. Tuttavia, l'app potrebbe comunque essere riavviata durante gli aggiornamenti pianificati dell'infrastruttura nella macchina virtuale. In generale, è necessario osservare un minor numero di riavvii se è abilitata una cache locale.

Una cache locale esclude la copia delle directory nell'unità locale più veloce?

Durante il processo di copia, qualsiasi cartella denominata viene esclusa repository . Questo comportamento è utile negli scenari in cui il contenuto del sito include un repository di controllo del codice sorgente che non è necessario per le operazioni quotidiane.

Come si scaricano i log della cache locale dopo un'operazione di gestione del sito?

Per cancellare i log della cache locale, arrestare e riavviare l'app. Questa azione cancella la cache precedente.

Perché il servizio app mostra i file distribuiti in precedenza dopo un riavvio quando è abilitata una cache locale?

Se i file distribuiti in precedenza vengono visualizzati nuovamente dopo un riavvio, verificare la presenza dell'impostazione WEBSITE_DISABLE_SCM_SEPARATION=truedell'app . L'aggiunta di questa impostazione determina la scrittura delle distribuzioni tramite Kudu nella macchina virtuale locale anziché nell'archiviazione permanente. Per evitare questa situazione, seguire le procedure consigliate indicate in precedenza ed eseguire distribuzioni in uno slot di staging che non dispone di una cache locale abilitata.