Caching nel DataLayer

di Stefano Mostarda, in Design Patterns,

Quando si parla di velocità di acesso ai dati, nulla è più veloce che non accedere al db, ma recuperare i dati dalla memoria.

E' arrivato il momento di fare in modo che i dati nel mio datalayer vengano messi in cache. Quando leggo un record, se questo rispetta certe regole lo metto in cache e da li lo recupero. Il problema è: se non posso sincronizzarlo con il db tramite SqlCacheDependency (ad esempio perchè non uso SqlServer2005) ed ho bisogno di dati quasi sempre aggiornati (questo implica che non posso usare nemmeno la seconda forma di SqlCacheDependency perchè troppo pesante), come sincronizzo il tutto? La prima risposta che mi sono dato è che semplicemente da codice rimuovo l'elemento dalla cache.

Ma quando ci si trova in ambienti in Server Farm con due o più macchine in cluster? Rimuovere l'oggetto non basta poichè verrebbe rimosso da una sola macchina e rimarrebbe inalterato nelle altre. Un meccanismo per sincronizzare la cache (tipo la Session) non esiste e questo è un bene. La cache deve essere solo veloce.

Tuttavia, non voglio rinunciare alle comodità della cache ed a questo punto ho avuto una specie di illuminazione. Bisogna semplicemente escogitare un metodo per mandare messaggi da un server all'altro per segnalare che un dato è diventato obsoleto e va eliminato.

Visto che sviluppo solo in 2.0 perchè non usare WCF? L'idea è semplice, su una macchina si aggiorna un dato in cache, questo dato viene eliminato e tramite un callback predefinito viene inviato un messaggio ad un servizio che si occupa di smistarlo alle altre macchine. Queste lo ricevono e aggiornano la propria cache. In questo modo posso aggiungere tutte le macchine che voglio e stare tranquillo che il messaggio verrà recapitato a tutte grazie alle feature di WCF. Inoltre il traffico e le performance sono ottimi perchè ciò che viaggia è un semplice messaggio con una stringa messi in formato binario quindi ottimizzatissimo. L'unica cosa che mi lascia l'amaro in bocca è stata l'impossibilità di realizzare la cosa in P2P per via di alcune limitazioni di WCF. al prossimo summit non mancherò di chiedere lumi in tal senso :).

Tutto questo sarà materia di un articolo futuro (visto il mix non so ancora se su ASPItalia o WINFXItalia) quindi prima o poi vedrete anche il codice (che non fa mai male)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese