S+S o SaaS che sia, attenti alle performance del DB!
Ok, siamo una società che sviluppa software per qualche genere di utilizzo, abbiamo capito che oltre ad offrire la versione "installata" fisicamente sui server dei clienti potremmo aprire nuove prospettive commerciali alla nostra azienda offrendo anche l'alternativa del servizio "hosted" direttamente da noi o da altri partner, ad un costo (mensile per utente? per transazione?) sostenibile anche da realtà che in precedenza non avrebbero potuto permetterselo, almeno per quanto riguarda le funzionalità "top" della gamma. Abbiamo iniziato a progettare ("to design", dall'inglese.. :)) la nostra soluzione e dopo esserci letti tutti i libri possibili su Domain Driven Design, Pattern e anti-Pattern, O/RM come la salvezza del mondo civilizzato (just kidding...), dobbiamo iniziare a lavorare... ehm... a pensare a come strutturare i dati gestiti dal nostro sistema. Siamo dunque in un mondo "multi-tenant" visto che dovremo gestire le informazioni dei nostri clienti garantendo il miglior rapporto possibile tra isolamento e prestazioni (perchè sappiamo bene che tutto ha un costo, vero? soprattutto quando parliamo di gestione dati..). Abbiamo quindi una serie di possibilità, oggi ulteriormente estese dalle tecnologie di virtualizzazione, che vanno dal dedicare un singolo DB server fisico per cliente, uno virtualizzato (dimensionando correttamente il rapporto fisico/virtuale, ovviamente), sfruttare le capacità multi-instanza di SQL Server e dedicare una istanza per cliente, ridurre ad un database per cliente, oppure arrivare ad un unico database partizionandolo logicamente per garantire l'isolamento necessario. Ognuna di queste alternativa ha pregi e difetti, difficile trovare LA soluzione, a seconda di quali sono i requisiti tecnici ed economici del progetto. Ovviamente l'ultima soluzione è quella potenzialmente più scalabile a parità di hw, ma è anche quella che richiede un approccio più complesso in fase di progettazione ("to design", sempre in inglese...). E che succede se vogliamo dare agli utenti finali la possibilità di personalizzarsi lo schema del database aggiungendo qualche campo custom? Quale applicazione realizzata dai nostri ISV "nostrani" non lo fa? Le cose si complicano ancora di più...
I colleghi Eugenio Pace e Gianpaolo Carraro ed il loro team nello sviluppo della ormai famosa applicazione LitwareHR hanno analizzato in dettaglio le performance delle diverse alternative legate all'utilizzo di un database condiviso e alle relative tecniche principali per realizzare uno schema "dinamico". Quello che ne è uscito è una interessantissima guida al testing di questa tipologia di soluzioni che permette a chiunque abbia dubbi in questo ambito di provare sul campo la bontà delle diverse scelte nei diversi ambiti della gestione dati.
I risultati non sono stupefacenti, uno schema tradizionale, senza il ricorso a tecniche quali i "campi dinamici" o l'XML, è di gran lunga la soluzione più scalabile, anche se i requisiti a volte potrebbero spingere verso scelte diverse. L'XML è buon ultimo anche se in alcuni ambiti non mi sentirei di sconsigliarlo per partito preso. Suggerisco comunque una lettura attenta, visto che gli spunti interessanti sono molti.
Comments
New Comments to this post are disabled
About scoriani
Silvano Coriani fa parte del gruppo Developer and Platform Evangelism di Microsoft per l’Italia, dove si occupa come attività principale del supporto e della divulgazione di contenuti tecnici riguardanti le varie componenti della piattaforma per lo sviluppo di applicazioni sui sistemi operativi Windows, con una particolare predilezione per SQL Server ed il .NET Framework. In precedenza, si è occupato di consulenza, formazione e sviluppo software, in collaborazione con Mondadori Informatica Education, partecipando anche come speaker a diverse conferenze a livello nazionale, come la WPC. Ha iniziato ad occuparsi di informatica con la comparsa dei primi home computer, prima con il Commodore Vic20 poi con il C64, preferendo da subito la lettura dei manuali ai vari videogame disponibili. Dopo aver completato anche gli studi formali sulla materia, ha iniziato la sua carriera occupandosi dello sviluppo di firmware su microprocessori a 8 e 16 bit, in Assembler e C, soprattutto nell’area dell’automazione industriale e del controllo di processo. È passato poi al mondo dello sviluppo su PC, iniziando con applicazioni in C su MS-DOS e proseguendo su quasi tutte le versioni di Windows, prima in C++ per la creazione di componenti e device driver, e successivamente affiancando a quest’ultimo l’utilizzo di Microsoft Visual Basic per la realizzazione di interfacce utente. Da qui poi sono iniziati i primi contatti con SQL Server (6.0 all’epoca) e con gli altri prodotti server della piattaforma Microsoft, utilizzati per lo sviluppo di soluzioni prima client/server e poi distribuite, con l’introduzione di MTS e COM+. L’incontro con il .NET Framework è avvenuto alla sua prima apparizione pubblica, nel Luglio 2000, ed è stato l’inizio di un nuovo corso di studio e approfondimento su questa affascinate piattaforma, sulla quale poi ha realizzato diverse applicazioni commerciali. Nel 2002, insieme a quattro amici, ha fondato DevLeap, un gruppo di professionisti che si occupano di approfondire le tecnologie di sviluppo, di produrre documenti e libri su argomenti di alto livello per la comunità degli sviluppatori, di fornire servizi di consulenza e mentoring alle aziende. Nel 2003 ha scritto il libro “ADO.NET Full Contact”, pubblicato da Mondadori Informatica