Eseguire la migrazione da Shared Caching di Azure a Cache nel ruolo

Aggiornamento: agosto 2015

ImportantImportante
Microsoft consiglia di usare Cache Redis di Azure in tutti i nuovi sviluppi. Per la documentazione aggiornata e le istruzioni per la scelta dell'offerta del Servizio Cache di Azure, vedere Quali offerte della Cache Redis è consigliabile usare?

La migrazione delle applicazioni che usano Memorizzazione nella cache condivisa di Microsoft Azure alla memorizzazione nella cache di Cache nel ruolo può essere eseguita apportando modifiche minime all'applicazione. Poiché Cache nel ruolo usa la stessa API di Memorizzazione nella cache condivisa, il codice esistente che usa Memorizzazione nella cache condivisa per accedere a una cache può essere usato nuovamente per accedere a una cache basata su ruoli di Cache nel ruolo. Questo argomento illustra come apportare le modifiche necessarie alla configurazione e all'applicazione per eseguire la migrazione dell'applicazione di Memorizzazione nella cache condivisa in modo da usare Cache nel ruolo.

noteNota
Per altre informazioni sui vantaggi derivanti dall'uso di Cache nel ruolo, vedere Informazioni su Cache nel ruolo per Cache di Azure.

Cache nel ruolo supporta l'hosting dei servizi di memorizzazione nella cache nei ruoli di Azure. In questo modello, la cache fa parte del servizio cloud, all'interno del quale è selezionato un ruolo per l'hosting di Cache nel ruolo. Le istanze in esecuzione di questo ruolo vengono aggiunte alle risorse di memoria in modo da formare un cluster di cache Questo cluster di cache privato è disponibile solo per i ruoli all'interno della stessa distribuzione. Esistono due topologie di distribuzione per Cache nel ruolo: basata su ruolo dedicato e basata su risorse condivise.

 

Topologia di distribuzione del cluster di cache Descrizione

Memorizzazione nella cache basata su ruolo dedicato

Le istanze di ruolo di lavoro vengono usate esclusivamente per la memorizzazione nella cache.

Memorizzazione nella cache basata su ruolo con risorse condivise

La cache condivide le risorse della macchina virtuale (larghezza di banda, CPU e memoria) con l'applicazione principale ospitata dal ruolo.

Se nei ruoli esistenti dell'applicazione è disponibile una parte di memoria non usata, è possibile configurare un cluster di cache basata su ruolo con risorse condivise su questi ruoli e usare quella memoria supplementare per la memorizzazione nella cache. Se nei ruoli non è disponibile memoria supplementare sufficiente per supportare un cluster di cache, è possibile eseguire la scalabilità orizzontale dei ruoli oppure aggiungere un ruolo di lavoro della cache e configurare un cluster di cache basata su ruolo dedicato.

Per configurare un cluster di cache basata su ruolo dedicato, aggiungere un ruolo di lavoro della cache al progetto. Per aggiungere un ruolo di lavoro della cache, espandere Azure in Esplora soluzioni, se non è già espanso.

noteNota
La memorizzazione nella cache basata su ruolo dedicato è supportata esclusivamente sui ruoli di lavoro e non può essere configurata sui ruoli Web.

Fare clic con il pulsante destro del mouse sulla cartella Ruoli nel progetto Azure e scegliere Aggiungi, Nuovo progetto di ruolo di lavoro, quindi scegliere Ruolo di lavoro cache. Digitare il nome desiderato per il ruolo nella casella Nome e fare clic su Aggiungi.

Aggiunta del ruolo di lavoro

Un ruolo di lavoro della cache è preconfigurato per la memorizzazione nella cache basata su ruolo dedicato. Per visualizzare le impostazioni, fare clic con il pulsante destro del mouse sul ruolo appena aggiunto nella cartella Ruoli di Azure, quindi scegliere Proprietà.

Menu di scelta rapida delle proprietà del ruolo di lavoro

Passare alla scheda Caching per visualizzare le proprietà di memorizzazione nella cache del ruolo di lavoro della cache.

Proprietà del ruolo di lavoro della cache

Trattandosi di un ruolo di lavoro della cache, la casella di controllo Abilita Caching è già selezionata così come la memorizzazione nella cache basata su Ruolo dedicato. Le impostazioni per la cache sono configurate nella sezione Impostazioni cache denominata. Cache nel ruolo e Memorizzazione nella cache condivisa di Microsoft Azure presentano alcune differenze nelle impostazioni di memorizzazione nella cache. Queste impostazioni sono descritte nelle sezioni Configurazione dell'account di archiviazione del cluster di cache e Configurare le impostazioni della cache denominata seguenti.

Passare alla scheda Configurazione.

Dimensioni della macchina virtuale dell'istanza del ruolo e conteggio delle istanze

Il valore predefinito di Conteggio istanze è 1 e l'impostazione predefinita di Dimensioni macchina virtuale è Piccola. Modificare queste impostazioni in base alla configurazione desiderata. La Guida Considerazioni sulla pianificazione della capacità per Cache nel ruolo di Azure fornisce indicazioni sulle impostazioni da scegliere per soddisfare i requisiti di memorizzazione nella cache della propria applicazione.

Una volta che il ruolo di lavoro della cache è stato aggiunto e la dimensione della macchina virtuale e il conteggio delle istanze sono stati configurati, è possibile configurare la cache come descritto nella seguente sezione Configurare le impostazioni della cache denominata.

Per configurare un cluster di cache basata su ruolo con risorse condivise, fare clic con il pulsante destro del mouse sul ruolo desiderato nella cartella Ruoli di Azure, quindi scegliere Proprietà.

Proprietà del ruolo Web

Passare alla scheda Caching, selezionare la casella di controllo Abilita Caching e specificare le opzioni desiderate per la memorizzazione nella cache. In base alla configurazione predefinita, il 30% della memoria nell'istanza del ruolo viene allocato per la memorizzazione nella cache. Spostare il dispositivo di scorrimento Dimensioni cache (%) in modo da configurare la cache desiderata.

Proprietà del ruolo di memorizzazione nella cache

Una buona approssimazione della formula usata per determinare le dimensioni della cache consiste nel moltiplicare il numero di istanze del ruolo per la quantità di memoria in base alla dimensione della macchina virtuale e usare la percentuale specificata. Tenere presente che questa formula è un'approssimazione di base. Per altre informazioni sulle impostazioni richieste per eseguire il provisioning di una cache della dimensione desiderata, vedere Considerazioni sulla pianificazione della capacità per Cache nel ruolo di Azure. Se per ospitare il cluster di cache sono necessarie altre istanze di ruolo o una dimensione maggiore della macchina virtuale, è possibile configurarle nella scheda Configurazione.

Cache nel ruolo richiede un account di archiviazione Azure. Questo account di archiviazione viene usato per contenere i dati relativi al cluster di cache a cui viene eseguito l'accesso da tutte le macchine virtuali che lo compongono. Questo account è specificato nella scheda Caching della pagina delle proprietà del ruolo del cluster di cache, sopra alla voce Impostazioni cache denominata.

Account di archiviazione del cluster di cache
ImportantImportante
Se l'account di archiviazione non è configurato i ruoli non verranno avviati.

Le impostazioni della cache vengono configurate nella sezione Impostazioni cache denominata.

Impostazioni della cache denominata

Cache nel ruolo e Memorizzazione nella cache condivisa di Microsoft Azure presentano alcune differenze nelle impostazioni di memorizzazione nella cache.

 

Funzionalità Supporto Cache nel ruolo Supporto Memorizzazione nella cache condivisa di Microsoft Azure

Nome

È configurata una cache predefinita ed è possibile configurare cache denominate supplementari, se necessario.

Solo cache predefinita.

Disponibilità elevata

Fornisce disponibilità elevata per gli elementi nella cache. Se un ruolo è disattivato, una copia di backup degli elementi nella cache sarà comunque disponibile.

Nessuna disponibilità elevata.

Notifiche

Le notifiche consentono all'applicazione di ricevere notifiche in modo asincrono quando vengono eseguite diverse operazioni nel cluster di cache.

Per altre informazioni, vedere Notifiche in Cache nel ruolo di Azure

Non supportato.

Criteri di rimozione

Le opzioni sono LRU (utilizzati meno di recente) o Nessuno. Il valore predefinito è LRU.

Solo LRU.

Durata (TTL) (min)

La scadenza predefinita per gli elementi nella cache è 10 minuti, ma è configurabile. La scadenza per i singoli elementi aggiunti alla cache può essere specificata anche tramite gli overload di Add e Put quando vengono aggiunti elementi alla cache.

La scadenza predefinita è 24 ore e non è configurabile. La scadenza per i singoli elementi aggiunti alla cache può essere configurata usando gli overload di Add e Put quando vengono aggiunti elementi alla cache.

Tipo di scadenza

I valori di Tipo di scadenza possono essere: Nessuna, Assoluta e Finestra temporale scorrevole. Quando si specifica Assoluta, l'intervallo di scadenza specificato da Durata (TTL) (min) inizia quando gli elementi vengono aggiunti alla cache. Quando si specifica Finestra temporale scorrevole, l'intervallo viene reimpostato ogni volta che si verifica un accesso a un elemento nella cache. Quando si specifica Nessuna, è necessario che il valore Durata (TTL) (min) sia impostato su 0 e gli elementi non scadranno. Il valore predefinito è Assoluta.

Per altre informazioni, vedere Scadenza e rimozione in Cache nel ruolo di Azure.

Il criterio di scadenza è assoluto. L'intervallo di scadenza inizia quando vengono aggiunti elementi alla cache.

Dopo avere configurato il cluster di cache, occorre aggiungere la configurazione e i riferimenti necessari per fare in modo che i client possano accedere alla cache. In Cache nel ruolo i client possono corrispondere a qualsiasi ruolo nella stessa distribuzione del cluster di cache. Quando si accede a un cluster di cache basata su ruolo con risorse condivise, il client può essere il ruolo stesso che ospita il cluster di cache. Per configurare i client della cache, eseguire la seguente procedura per ogni ruolo che accede alla cache.

Prima che sia possibile configurare i ruoli client per Cache nel ruolo, è necessario rimuovere la configurazione di Memorizzazione nella cache condivisa e i riferimenti ad assembly esistenti. Se Memorizzazione nella cache condivisa è stato configurato mediante il pacchetto NuGet di Memorizzazione nella cache condivisa, la configurazione può essere rimossa mediante disinstallazione del pacchetto NuGet di Memorizzazione nella cache condivisa. In caso contrario, deve essere rimossa manualmente.

Per disinstallare il pacchetto NuGet di Memorizzazione nella cache condivisa, fare clic con il pulsante destro del mouse sul ruolo client desiderato in Esplora soluzioni e scegliere Gestisci pacchetti NuGet. Selezionare il nodo Pacchetti installati, digitare Caching nella casella Cerca in pacchetti installati. Selezionare Shared Caching di Azure, fare clic su Disinstalla, quindi su Chiudi.

Disinstallazione del pacchetto NuGet di Memorizzazione nella cache condivisa
noteNota
Se nell'elenco non è presente alcun pacchetto NuGet di Memorizzazione nella cache condivisa di Microsoft Azure, fare clic su Chiudi e seguire la procedura descritta inRimuovere manualmente la configurazione di Shared Caching.

La disinstallazione del pacchetto NuGet di Memorizzazione nella cache condivisa determina la rimozione degli assembly di Memorizzazione nella cache condivisa e delle voci di Memorizzazione nella cache condivisa nel file app.config o in web.config del ruolo client. Poiché quando si disinstalla il pacchetto NuGet alcune impostazioni personalizzate potrebbero non essere rimosse, aprire il file web.config o app.config e assicurarsi che i seguenti elementi siano stati completamente rimossi.

  • Assicurarsi che la voce dataCacheClients venga rimossa dall'elemento configSections. Non rimuovere l'intero configSections, ma soltanto la voce dataCacheClients, se presente.

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  • Assicurarsi che la sezione dataCacheClients sia rimossa. La sezione dataCacheClients sarà simile a quella riportata nel seguente esempio.

    <dataCacheClients>
      <dataCacheClient name="default">
        <hosts>
          <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" />
        </hosts>
    
        <securityProperties mode="Message">
          <messageSecurity 
            authorizationInfo="Your authorization token will be here.">
          </messageSecurity>
        </securityProperties>
      </dataCacheClient>
    </dataCacheClients>
    

Una volta rimossa la configurazione di Memorizzazione nella cache condivisa, è possibile configurare il client della cache, come descritto nella sezione Configurare un client della cache mediante il pacchetto NuGet di Caching seguente.

Per rimuovere manualmente la configurazione di Memorizzazione nella cache condivisa, è necessario rimuovere i riferimenti ad assembly di Memorizzazione nella cache condivisa e la configurazione di Memorizzazione nella cache condivisa da app.config o da web.config.

Per rimuovere i riferimenti ad assembly di Memorizzazione nella cache condivisa, selezionare il ruolo client desiderato in Esplora soluzioni ed espandere la cartella Riferimenti. Per ciascun assembly incluso nel seguente elenco, fare clic con il pulsante destro del mouse nella cartella Riferimenti in Esplora soluzioni e scegliere Rimuovi. Se il client è un ruolo Web, rimuovere anche Microsoft.Web.DistributedCache.

  • Microsoft.ApplicationServer.Caching.Client

  • Microsoft.ApplicationServer.Caching.Core

  • Microsoft.WindowsFabric.Common

  • Microsoft.WindowsFabric.Data.Common

Per rimuovere la configurazione di Memorizzazione nella cache condivisa, aprire web.config o app.config del ruolo client, quindi rimuovere i due elementi seguenti.

  • Rimuovere la voce dataCacheClients dall'elemento configSections. Non rimuovere l'intero configSections, ma soltanto la voce dataCacheClients, se presente.

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  • Rimuovere la sezione dataCacheClients che sarà simile a quella riportata nel seguente esempio.

    <dataCacheClients>
      <dataCacheClient name="default">
        <hosts>
          <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" />
        </hosts>
    
        <securityProperties mode="Message">
          <messageSecurity 
            authorizationInfo="Your authorization token will be here.">
          </messageSecurity>
        </securityProperties>
      </dataCacheClient>
    </dataCacheClients>
    

Dopo aver rimosso questi elementi, si possono eseguire i passaggi riportati nella sezione successiva per configurare il client della cache.

Cache nel ruolo fornisce un pacchetto NuGet per aggiungere la configurazione e i riferimenti agli assembly necessari per consentire ai ruoli client di accedere al cluster di cache.

ImportantImportante
Prima di configurare il client della cache mediante il pacchetto NuGet di Cache nel ruolo, assicurarsi che la configurazione di Memorizzazione nella cache condivisa sia stata completamente rimossa dal file web.config o app.config del ruolo client, come descritto nella precedente sezione.

Per usare il pacchetto NuGet di Cache nel ruolo, fare clic con il pulsante destro del mouse sul ruolo client desiderato in Esplora soluzioni e scegliere Gestisci pacchetti NuGet.

Gestione dei pacchetti NuGet

Selezionare Caching di Azure, fare clic su Installa e quindi su Accetto. Al termine dell'installazione del pacchetto nel ruolo, fare clic su Chiudi per chiudere la finestra Gestisci pacchetti NuGet.

noteNota
Se Caching di Azure non è incluso nell'elenco, digitare WindowsAzure.Caching nella casella di testo Cerca Online.

Abilitazione di Caching tramite NuGet

Quando il pacchetto NuGet di Cache nel ruolo è installato in un ruolo client, questo aggiunge la configurazione e i riferimenti agli assembly necessari affinché l'applicazione client possa accedere al cluster di cache.

In web.config o app.config per il ruolo, vengono aggiunti più elementi.

  1. A configSections vengono aggiunte due sezioni, denominate dataCacheClients e cacheDiagnostics.

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
      <section name="cacheDiagnostics" type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  2. Viene aggiunta una sezione dataCacheClients alla sezione configuration.

    <dataCacheClients>
      <dataCacheClient name="default">
        <autoDiscover isEnabled="true" identifier="[cache cluster role name]" />
        <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
      </dataCacheClient>
    </dataCacheClients>
    
    Sostituire [cache cluster role name] con il nome del ruolo che ospita il cluster di cache. Nel seguente esempio [cache cluster role name] è stato sostituito con CacheWorkerRole1.

    <autoDiscover isEnabled="true" identifier="CacheWorkerRole1" />
    
    WarningAvviso
    Questa impostazione deve essere configurata in modo corretto, altrimenti i client non saranno in grado di accedere alla cache. Se l'identificatore non è associato a un ruolo, verrà generata un'eccezione TargetInvocationException quando viene eseguito l'accesso alla cache con un'eccezione DataCacheException contenente un messaggio simile al seguente: The role [cache cluster role name] was not found in the current deployment. Se l'identificatore è associato a un ruolo nella distribuzione che non ospita un cluster di cache, viene generata un'eccezione InvalidOperationException con il seguente messaggio: No Endpoints found.

  3. Viene inoltre aggiunta una sezione cacheDiagnostics alla sezione configuration.

    <cacheDiagnostics>
      <crashDump dumpLevel="Off" dumpStorageQuotaInMB="100" />
    </cacheDiagnostics>
    
    noteNota
    I dump di arresto anomalo del sistema per i client della cache sono disabilitati per impostazione predefinita e sono controllati da questa sezione. Per altre informazioni sulla diagnostica della memorizzazione nella cache, vedere Diagnostica e risoluzione dei problemi di Cache nel ruolo di Azure.

Il pacchetto NuGet di Cache nel ruolo aggiunge anche un'impostazione ClientDiagnosticLevel a ConfigurationSettings del ruolo del client della cache in ServiceConfiguration.cscfg. Il seguente esempio mostra la sezione WebRole1 del file ServiceConfiguration.cscfg con ClientDiagnosticLevel impostato su 1, ossia il valore predefinito di ClientDiagnosticLevel.

<Role name="WebRole1">
  <Instances count="1" />
  <ConfigurationSettings>
    <!-- Other settings omitted for clarity... -->
    <Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
  </ConfigurationSettings>
</Role>
noteNota
Per altre informazioni sui livelli di diagnostica della cache, vedere Diagnostica e risoluzione dei problemi di Cache nel ruolo di Azure.

Oltre ad aggiungere la configurazione richiesta, il pacchetto NuGet del Cache nel ruolo aggiunge anche i riferimenti ai seguenti assembly.

  • Microsoft.ApplicationServer.Caching.Client.dll

  • Microsoft.ApplicationServer.Caching.Core.dll

  • Microsoft.ApplicationServer.Caching.AzureCommon.dll

  • Microsoft.ApplicationServer.Caching.AzureClientHelper.dll

  • Microsoft.WindowsFabric.Common.dll

  • Microsoft.WindowsFabric.Data.Common.dll

Se il ruolo è un ruolo Web, viene aggiunto anche il riferimento al seguente assembly.

  • Microsoft.Web.DistributedCache.dll

noteNota
Cache nel ruolo e Memorizzazione nella cache condivisa di Microsoft Azure condividono la stessa API e, anche se hanno nomi uguali, gli assembly sono diversi e si trovano in percorsi differenti. Il pacchetto NuGet di Cache nel ruolo rimuoverà i riferimenti ad assembly di Memorizzazione nella cache condivisa e aggiungerà i riferimenti ad assemblyCache nel ruolo corretti. Gli assembly del Cache nel ruolo si trovano nella cartella C:\Program Files\Microsoft SDKs\Azure\.NET SDK\2012-10\ref\Caching.

Una volta eseguita la migrazione dei client del ruolo Web ASP.NET da Memorizzazione nella cache condivisa di Microsoft Azure a Cache nel ruolo come descritto inConfigurare i client della cache, l'archiviazione dello stato della sessione ASP.NET o la memorizzazione dell'output delle pagine in una cache basata su ruoli richiederanno solo modifiche minime. Per consentire la memorizzazione dello stato della sessione ASP.NET nella cache, aggiungere la seguente sezione a system.web nel file web.config.

noteNota
Se il ruolo Web ASP.NET è già stato configurato per l'uso del provider di stato della sessione per Cache di Microsoft Azure, questa sezione è già presente.

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add name="AppFabricCacheSessionStoreProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" useBlobMode="true" dataCacheClientName="default" />
  </providers>
</sessionState>

Aggiornare cacheName per specificare la cache nel cluster di cache che contiene lo stato della sessione. Usare default per specificare la cache predefinita.

Per abilitare la memorizzazione nella cache dell'output delle pagine, aggiungere la seguente sezione a system.web.

noteNota
Se il ruolo Web ASP.NET è già stato configurato per l'uso del provider di cache di output per Cache di Microsoft Azure, questa sezione è già presente.

<caching>
  <outputCache defaultProvider="DistributedCache">
    <providers>
      <add name="DistributedCache" type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" />
    </providers>
  </outputCache>
</caching>

Aggiornare cacheName per specificare la cache nel cluster di cache che contiene lo stato della sessione. Usare default per specificare la cache predefinita.

Aggiungere una direttiva OutputCache a ogni pagina per cui si desidera memorizzare l'output nella cache.

<%@ OutputCache Duration="60" VaryByParam="*" %>

In questo esempio i dati delle pagine rimangono memorizzati nella cache per 60 secondi e per ogni combinazione di parametri viene memorizzata nella cache una versione diversa della pagina. Per altre informazioni sulle opzioni disponibili, vedere l'argomento relativo alla direttiva OutputCache.

Mostra: