Nel precedente articolo, ho raccontato dell’acquisizione di NexGen da parte di Fusion-IO, quali sono stati gli elementi tecnologici e di business che hanno portato a questa acquisizione, e di come Fusion-IO intende modificare e potenziare l’approccio sul mercato di NexGen stessa. In questo articolo invece andremo a vedere come è fatta l’architettura NexGen, quali scelte progettuali sono state compiute, e quali vantaggi possiede.
Un rapido sguardo all’hardware
Innanzitutto, lo storage NexGen è un sistema midrange studiato per la gestione di applicativi principalmente virtualizzati. Il team che l’ha sviluppato (John Spiers come CEO e Kelly Long come CTO) è lo stesso che molti anni fa ha lanciato LeftHand, e questa eredità è lampante ad esempio nella scelta di iSCSI come protocollo di comunicazione.
Lo chassis occupa 3U, e presenta al suo interno 2 controller active-active. I controller montano al loro interno ognuno delle schede Fusion-IO non condivise, il cui contenuto viene quindi sincronizzato in tempo reale dal software di gestione ioControl sviluppato da NexGen stessa.
Una delle caratteristiche distintive rispetto ad altri storage è sicuramente la presenza di schede Fusion-IO. Secondo NexGen, l’uso delle flash cards davanti ai dischi permette di poter impiegare poi dischi ancora più larghi e “lenti” senza impattare le prestazioni complessive, poichè le flash memory sono molto più veloci dei dischi ssd. I dischi ssd infatti sono tutti connessi allo stesso controller, e quindi il collo di bottiglia spesso è il bus pci stesso, attraverso il quale passano TUTTI i dati che arrivano dai dischi, siano essi SSD o meccanici. Le schede Fusion-IO invece sono connesse direttamente al controller PCI-Express, e presentano quindi vincoli inferiori.
Esistono differenti modelli, che si differenziano per lo spazio disponibile a bordo, sia per quanto riguarda le Fusion-IO montate a bordo (da 730 Gb fino a 4.8 Tb) sia per i dischi SATA condivisi tra i due controller (da un minimo di 16 TB fino a 192 TB aggiungendo shelves). I vari modelli garantiscono prestazioni tra 50k e 150k IOPS (4k, 50/50 read-write). Un elemento affascinante di questo design è la scalabilità nei due sensi: è possibile indistintamente aggiungere schede Fusion-IO o dischi SATA, a seconda che si necessiti di ulteriore storage performante o economico.
Come detto, la connettività esterna è unicamente iSCSI, erogata tramite 4 schede 10G o 4 schede 1G complessive sui due controller.
Garantire le prestazioni
Come detto, NexGen ha come mercato di riferimento i clienti midrange. Secondo l’analisi di NexGen stessa, e condivisa da Fusion-IO, questi clienti necessitano di uno storage univoco sul quale poter salvare ed eseguire differenti workload, siano essi esigenti in termini di prestazioni, o di spazio disco. Questo elemento è alla base della decisione di sviluppare uno storage ibrido, abbinando quindi un primo tier fatto con schede Fusion-IO (per le prestazioni) e un secondo tier con dischi meccanici (per lo spazio disco economico).
Uno dei problemi tipici degli storage ibridi, che NexGen ha cercato di risolvere, risiede nell’impredicibilità delle prestazioni. Spesso i blocchi di una VM non si trovano nel posto giusto al momento giusto (tipicamente nei dischi meccanici quando l’I/O iniizia a crescere), e l’autotiering fatica a soddisfare le richieste delle applicazioni. Il rischio, per molti clienti, è di dover dedicare un determinato storage a un particolare workload per isolarlo e garantirne le prestazioni. Esempio tipico in questo senso è VDI, per la sua natura di workload “invasivo” rispetto ad altri workload con cui convive.
I silos però sono un problema aggiuntivo, in quanto portano i clienti a dover gestire differenti storage, aumentando di conseguenza la complessità dell’infrastruttura e i problemi di gestione correlati. NexGen offre a questi clienti uno storage che consente di caricare su di esso tutti i tipi di workload, garantendo loro le prestazioni richieste. Vediamo come.
Secondo NexGen, il problema risiede nel fatto che le prestazioni sono regolate solitamente dagli algoritmi di caching e tiering, e non dai requisiti di business e dalle policy di utilizzo dei vari workload.
Attualmente, sebbene il sistema operativo ioControl di NexGen permetta controlli molto fini e granulari, all’utente finale sono stati risparmiati eccessivi parametri, e il tutto è consolidato in sole 5 policy che è possibile applicare. Queste vengono attivate in modo istantaneo e dinamico.
Un altro elemento di aumento delle prestazioni è la deduplica. Per ora implementata ad uno stadio iniziale, permette di risparmiare scritture e quindi accelerare l’uso dei dischi, e risparmiare il consumo delle celle delle Fusion-IO.
Infine, è molto interessante l’aver realizzato un sistema operativo molto customizzato, partendo non da una classica distribuzione Linux (parlavamo prima delle origini LeftHand, beh li si usava una CentOS…) ma direttamente dai sorgenti. Sempre nell’ottica di garantire prestazioni costanti e prevedibili, i ragazzi di NexGen hanno creato un OS che parte e viene eseguito totalmente in RAM; questo permette di non usare le Fusion-IO per le attività del sistema operativo stesso, e quindi ancora una volta preservarne la durata.
L’interfaccia
Anche l’iterfaccia è stata disegnata mantenendo come obiettivo principale le prestazioni. Questo ha significato due cose: l’interfaccia stessa è quando più leggera e compatibile con i vari browser, evitando elementi problematici come javascript e similii; e uno degli elementi fondamentali dell’interfaccia è la sua funzione di gateway verso l’analisi dei dati.
Puntando infatti molto sulle prestazioni e sul QoS, il sistema deve essere in grado di mostrare tutti i dati di performance disponibili, poterne personalizzare la visualizzazione. Per fare ciò, si è scelto un approccio molto radicale ma perfettamente coerente con gli obiettivi: tutta l’interfaccia è basata su JSON e REST APIs, che coprono il 100% dei comandi disponibili sia in GUI che in CLI. Questo vuol dire che sia la riga di comando che l’interfaccia grafica, in realtà sono soltanto dei framework per accedere alla vera interfaccia, che è appunto basata su API.
La cosa che più mi ha affiscinato dell’interfaccia è la sua estrema semplicità: pochi pulsanti, subito disponibili le funzioni necessarie e l’accesso alle metriche, e un senso generale di estrema pulizia e velocità.
Integrazione con VMware
Per quanto riguarda l’integrazione con VMware, innanzitutto è bene ricordare che questo storage è di tipo active-active, o per dirla ancora meglio ALUA. Non esiste un controller che diventa l’unico proprietario delle LUN, ma piuttosto un path preferito rispetto ad un altro. L’I/O può invece sopraggiungere da qualsiasi path.
Detto ciò, ad oggi l’integrazione è principalmente affidata al plugin per vCenter. E’ interessante l’astrazione che è stata portata in questo elemento, cercando di nascondere il più possibile lo storage e permettere a un amministratore vSphere di usare termini cui è abituato. Per esempio, è possibile dal plugin creare e mappare un nuovo datastore (e assegnargli una della policy definite), mentre il termine Volume è lasciato solo all’interfaccia nativa.
Oltre questo, ad oggi non è disponibile altro. Lo storage non supporta le librerie VAAI ad esempio, e sebbene le attività intensive siano in parte gestite comunque in modo efficiente dall’uso di tecnologie di replica dei dati di tipo redirect-on-write, il supporto a queste librerie sarebbe auspicabile. Vedremo nelle prossime versioni del loro software. Stesso discorso per il supporto a SRM: quando lo storage possiederà funzionalità di replica, sicuramente il plugin per SRM diventerà a questo punto praticamente obbligatorio.
Conclusioni
Lo sviluppo iniziale dello storage NexGen si è concentrato sulla realizzazione di un sistema molto prestazionale, ma che garantisse allo stesso tempo un costo per IO vantaggioso per i propri clienti. A vedere le cifre indicate da NexGen questo risultato sembrerebbe essere stato decisamente raggiunto. Nel futuro, dovremo attenderci ulteriori migliorie alle funzioni oggi disponibili, ma soprattutto una maggiore integrazione con altri sistemi, VMware prima di tutti, ma magari anche Hyper-V o altro. In quanto tempo queste integrazioni saranno disponibili non mi è dato saperlo, ma ritengo che l’acquisizione da parte di Fusion-IO porterà tra le altre cose un aumento del budget disponibile per accelerare questi sviluppi. Vedremo nei prossimi rilasci di software le novità che verranno introdotte.