15

Oct

AppFabric “Velocity” Distributed Cache

Ciao a tutti

 

AppFabric, estensione di IIS per fare da application server di servizi WCF e WF, porta con se una importantissima funzionalità: la cache distribuita.

 

E’ importante capire che una cache distribuita in ambito enterprise è un grandissimo acceleratore delle prestazioni, andando a portare una  gestione della cache di tipo GRID ad esempio nell’ASP.NET Session diversamente da come accade impostando ad esempio le sessioni su SQL Server che essendo centralizzato ad un certo punto diventa il collo di bottiglia di una qualunque applicazione web molto scalata in orizzontale.

 

Architettura di “Velocity” (nome in codice della cache):

 

Una cache distribuita è un cluster di macchine che condividono la propria area di memoria sulla rete per centralizzare le informazioni.

In un cluster è possibile definire più cache di tipo logico (named cache) così da poter utilizzare lo stesso cluster (max 128 host) per più applicazioni ognuna con la propria sottoarea di memoria.

Per ogni “named cache” è possibile impostare delle regioni per forzare l’allocamento dei dati fisici sui server desiderati.

 

I dati vengono sincronizzati dal motore sui vari host (i servizi windows che girano sui server dedicati all’allocamento dei dati in memoria sui server) in base alla impostazione di “High Availability” che se impostata a false (il default) copia semplicemente i dati su tutte le macchine, altrimenti (High) salva sulle varie macchine i dati in modalità master/slave per avere sempre una copia di backup se un host cadesse.

 

cache_xml

Il configuratore di AppFabric ci da la possibilità di centralizzare la configurazione della cache su di uno share di rete (come sopra) o alternativamente su un DB SQL server. Solo i dati configurativi vengono persistiti insieme alle autorizzazioni utente.

E’ fortemente consigliato l’uso di Active Directory sia per gestire più facilmente i grant degli utenti applicativi autorizzati ad accedere alla cache, anche perché il provider SQL Server funziona esclusivamente in questo modo!

Una volta creato un cluster è necessario utilizzare PowerShell per gestirlo (lo so… bisogna re-imparare a scrivere comandi…) cliccando sull’icona apposita.

cache_configuration

Scrivendo “start-cachecluster” ad esempio abbiamo gli host delle cache sul cluster, oltre ad avere un dettaglio della situazione

Scrivendo “get-command *cache*” ci elenca i comandi disponibili, “help cache” ci spiega l’uso dei vari comandi

Scrivendo “get-cache” ci elenca le “named cache” esistenti e le relative regions.

“get-cachestatistics ” da informazioni sulla cache.

 

E’ importante per iniziare a lavorare fare 2 cose: abilitare il proprio utente a leggere/scrivere dati, e creare una “named cache”.

“new-cache ” crea una nuova “named cache”

“Grant-CacheAllowedClientAccount ” da i permessi all’utente

 

Esempio di applicazione console:

Aggiungere il riferimento a:

Microsoft.ApplicationServer.Caching.Client
Microsoft.ApplicationServer.Caching.Core

da windows\system32\appfabric (x86)
da windows\sysnative\appfabric (x64)

può essere utile settare a true la proprietà “copy local” del riferimento in VisualStudio

 

[code language=”csharp”]

//nuova connessione al cluster
DataCacheFactory f = new DataCacheFactory(new DataCacheFactoryConfiguration()
    {
        Servers= new [] { new DataCacheServerEndpoint("siae5", 22233)},
    });

//dal cluster chiedo una named cache
DataCache c = f.GetCache("default");

while (true)
{
    //provo a leggere un valore dalla cache
    var time = c.Get("time");

    if (time == null)
    {
        //se nulla aggiungo un nuovo valore specificando un timeout assoluto di 1 secondo
        c.Put("time", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), new TimeSpan(0, 0, 1));
        Console.WriteLine("Added");
    }
    Console.WriteLine(c.Get("time"));
    //ciclo 10 volte al secondo
    Thread.Sleep(100);
}

[/code]

 

Impostare l’ASP.NET4 Session State Velocity Provider

 


 
 

      type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
          Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0,
          Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      allowLocation="true"
      allowDefinition="Everywhere"/>



 
   
 


 

 
   
     
     
     
                 type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider"
           cacheName="default"
           sharedId="1234567890"
           />
   

 

 
 
 

 

Ricordarsi che per accedere alla cache l’utente dell’app-pool deve essere abilitato.

 

 

Ciao a tutti

Antonio

 

 

Download: http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2

Documentazione: http://msdn.microsoft.com/en-us/library/aa139633.aspx

ASP.NET4 Velocity Session State: http://msdn.microsoft.com/en-us/library/ee790859.aspx

by Antonio Esposito on 10/15/2010