Questo sarà un post molto lungo quindi preparatevi !!
E’ stata da poco rilasciata una nuova CTP release di SQL Azure Data Sync, un motore di sincronizzazione cloud che permette appunto di mantenere allineate basi dati presenti sia nel Cloud che on premise. E’ quindi possibili attivare una sincronizzazione tra più database SQL Azure oppure realizzare una sincronizzazione tra un database presente sulla propria macchina locale o su un server aziendale con uno o più database presenti nel cloud. Con questa nuova funzionalità di Windows Azure si possono aprire scenari molto interessanti quali :

  1. Backup live di un database locale : potrebbe essere utilie utilizzare SQL Azure come sistema di backup real time di una base dati locale che viene utilizzata per un software interno. Questo permetterebbe non solo di avere una copia allineata del proprio DB ma anche di poter fare un restore molto rapidamente avendo a disposizione il database nel cloud sempre attivo. Microsoft si occupa poi di fare il backup dei dati in SQL Azure il che garantisce un ulteriore strato di sicurezza delle proprie informazioni
  2. Esporre verso l’esterno alcuni dati aziendali : alle volte le aziende hanno costruito delle soluzioni interne utilizzate dai dipendenti dell’azienda stessa. Quando arriva la necessità di esporre questi dati all’esterno ovviamente si devono affrontare problemi di sicurezza, dmz , firewall perchè il server normalmente è all’interno delle mura aziendali. E’ possibile con Data Sync sincronizzare alcune tabella dal database centrale verso SQL Azure e poi costuire un applicazione di front end per consumare questi dati magari utilizzando i SQL Azure Reporting Services come motore di reportistica. Dato che è possibile fare una sincronizzazione bidirezionale è possibile anche recuperare delle informazioni dagli utenti esterni (agenti, fornitori) e portarle semplicemente all’interno dell’azienda in modo sicuro senza dover costruire un infrastruttura locale complessa.
  3. Distribuzione della propria applicazione su diversi datacenter: immaginate di avere un applicazione che viene usata in Europa ma anche in America. Per poter dare una esperienza unica ai proprio utenti e per poter rendere l’accesso alla propria applicazione il più veloce possibile è possibile con Windows Azure distribuire i proprio front end su datacenter diversi (America e Europa) e attraverso il Traffic Manager direzionare gli utenti al datacenter più comodo e volece. Ovviamente se l’applicazione ha bisogno di un database non avrebbe senso in una situazione di questo tipo avere un SQL Azure solo in uno dei due datacenter. Usando Data Sync è possibile mantenere allineati due database SQL Azure presenti in due datacenter diversi dando alla propria applicacazione un distribuzione completa.
  4. Distaster e Recovery : immaginate un applicazione mission critical in esecuzione sul datacenter di Amsterdam. Windows Azure garantisce una sicurezza e una affidabilità molto alta ma potrebbe accadere ovviamente di tutto e il datacenter potrebbe non essere più in grado di fornire il servizio. E’ possibile pubblicare la propria applicazione anche in un altro datacenter (Dublino per esempio) e lasciarla spenta (cioè gli utenti si collegano sempre ad Amsterdam) e sincronizzare il database nel primo datacenter con uno nel secondo. Nel caso di situazione critica è possibile attivare la propria applicazione a Dublino, farla puntare al database anch’esso a Dublino che è stato costantemente sincronizzato e con il Traffic Manager spostare gli utenti verso l’Irlanda garantendo una continuità di servizio completa.

Probabilmente ci sono molto altri scenari che si possono realizzare con il Data Sync ma già l’elenco qui sopra ci da un buon motivo per capire come funziona. Ecco i passi da fare per attivare il Data Sync per sincronizzare un database locale (sul mio pc in questo caso) e un database su Windows Azure.

Per cominciare diamo per scontato di aver attivato una sottoscrizione Windows Azure (è possibile attivare una trial qui) e di aver creato un database attraverso il portale di gestione https://windows.azure.com/. Il mio esempio si basa su una versione leggermente modificata del database di esempio presente con SQL Server 2008 chiamato AdventureWorksLT.

Attivazione il Data Sync Preview Server

Nella schermata qui sotto vedete evidenziato il database SQL Azure che ho creato su Windows Azure. Il database in questo momento è completamente vuoto.

capture_20102011_151602

Selezioniamo dal menù di sinistra la voce Data Sync e selezioniamo la voce Provision Data Sync Preview Servercapture_20102011_151636

Una volta terminato il provisioning del server creiamo un Sync Group. Un Sync Group è un raggruppamento logico di sincronizzazione che contiene le informazioni necessarie per mantenere sincronizzati vari database. E’ possibile inserire lo stesso database in più Sync Group anche se è necessario prestare attenzione per non entrare in un loop infinito Smile. Nel mio caso io ho creato un Sync Group chiamato Adventure Works.

capture_20102011_151722

Sulla parte sinistra della console possiamo selezionare ogni quando vogliamo eseguire la sincronizzazione e come verranno gestiti i conflitti (cioè se in caso di conflitto vincerà il client o il server). Ora premiamo il + presente sull’icona del database Sync Hub nella fascia Cloud. In ogni Sync Group deve essere presente un database che faccia da Sync Hub. Il database poi può far parte della sincronizzazione oppure no ma in ogni caso deve essere sempre presente.

capture_20102011_152221

Nella finestra che appare inseriramo la stringa di connessione completa per accedere al server SQL Azure e il nome del database fornendo anche le credenziali di accesso. Premiamo Add. Ora ripetiamo l’operazione premendo il + presente sull’icona del database nella fascia On-Premise.

capture_20102011_152241

La prima volta che facciamo questa operazione selezioniamo Add a new SQL Server database in the sync group , le volte successive il nostro database on-premise sarà già “conosciuto” da Windows Azure. Selezioniamo Bi-Directional (ovviamente possiamo decidere che tipo di Sync attivare) e premiamo Next. La prima volta ci verrà richiesto di installare un Agent locale che è quello che si occuperà di far parlare in nostro server locale con quello nel cloud.

capture_20102011_152245

Scarichiamo l’agent e procediamo con la fase di installazione

capture_20102011_152251

Troveremo sul computer il software chiamato Microsoft SQL Azure Data Sync Agent Preview. Eseguiamolo.

capture_20102011_152553

Inseriamo un Agent Name che sarà di fatto la chiave univoca che collegherà il nostro agente con Windows Azure. Nel mio caso con molta fantasia ho inserito FabioSymc Smile.

capture_20102011_152634

Per garantire una corretta sicurezza di comunicazione tra il server locale e quello cloud è necessario utilizzare una chiave che potete generare e copiare all’interno della clipboard. Questa stessa chiave dovrà essere in seguito inserita nel software locale che abbiamo precedentemente installato.

capture_20102011_152642

Prima di tutto memorizziamo la chiave appena generate all’interno dell’agent locale. Premiamo Submit Agent Key e inseriamo la chiave appena copiata nella clipboard.
Ora selezioniamo Register.

capture_20102011_152711

Decidiamo il tipo di autenticazione vogliamo che l’agent utilizzi per accedere al server locale. Facciamo attenzione di utilizzare un utente con i permessi necessari per accedere alle tabelle che vogliamo sincronizzare (lo so sa non è sicuro ma è un esempio dai !!! Smile)

capture_20102011_152852

Una volta terminata l’operazione dovreste trovare all’interno della combobox Select Database il database appena configurato.

capture_20102011_152936

Premiamo Finish.

Il nostro Sync Group non è ancora stato pubblicato , manca ancora un operazione importante che è quella di stabilire cosa sincronizzare. Premiamo Edit Dataset a destra della schermata.

capture_20102011_152945

Selezioniamo il database on-premise (l’unico che in questo momento ha dei data reali) e definiamo quali tabelle e quali campi voglia sincronizzare. Attenzione che in questa Preview non è possibile sincronizzare campi di tipo User Defined e campi calcolati (ecco perchè ho dovuto modificare la struttura di AdventureWorks Winking smile). Premiamo Ok.

capture_20102011_173856

Premiamo in alto Deploy. Alla fine del deploy dovremmo avere una scheramta simile a quella qui sotto :

capture_20102011_185925

Possiamo anche volendo, attraverso la tabella di destra, attivare dei filtri sulle colonne per avere un maggior controllo sui dati che vogliamo portare nel cloud. Per capire quali operazione sono state fatte e sopratutto per controllare possibili errori possiamo usare il Log Viewer.

capture_20102011_185946

Durante la prima sincronizzazione verranno create su SQL Azure tutte le tabelle selezionate e le tabelle utilizzata dal Data Sync. In seguito a seconda dell’intervallo selezionato avremo una sincronizzazione solo per differenze e nel nostro caso sarà bidirezionale.

SQL Azure Data Sync è sicuramente una funzionalità molto interessante che ci permette di costuire scenari ad oggi quasi impossibili.