Cloud
La mia carriera e' iniziato con lo sviluppo client side, dopo pochi anni sono passato al server side e da circa 1 anno e mezzo sono nei cloud services. E' incredibile vedere quante differenti problematiche si debbano affrontare.
Recentemente abbiamo discusso del sistema di logging. Non tanto in termini di quale tecnologia quali .NET logging, NLog, ETW, o altro, quanto le problematiche da superare nel cloud. Uno dei probemi maggiori e la quantita'. Pensate a Facebook (http://idleprocess.wordpress.com/2009/11/24/presentation-summary-high-performance-at-massive-scale-lessons-learned-at-facebook/) il quale processa 25TB di messaggi al giorno. Solo nel nostro ambiente di test, con circa 300 utenti, generiamo circa 25MB di messaggi al minuto....
Mi sono assentato per in certo periodo in quanto aspettavo un buon momento per poter parlare di SDS (SQL Data Services). Purtroppo, non ne posso ancora parlare e quindi mi invento un'altro argomento, comunque fondamentale.
Una delle caratteristiche peculiari dello storage nel cloud e' quella di poter scalare, potenzialmente scalare indefinitivamente. Fino a qualche anno fa, scalare il database significava aggiungere dischi, e se la potenza di calcolo non era sufficiente, aggiungere nodi al cluster. Non vi e' dubbio che scalare con un cluster, oltre ad incrementare i costi esponenzialmente, presenta comunque un limite fisico oltre al quale non si puo'...
Nel post dedicato alla latenza, ho illustrato una delle tecniche per mitigare il piu' possibile i problemi legati al timeout. La tecnica si basa sostanzialmente sul riprovare.
L'algoritmo che ho implementato, NRetryPolicy, e' molto primitivo e presenta parecchie imperfezioni, oltre a non risolvere il problema e potenzialmente peggiorarlo. Il lettore attento infatti si sara' accorto che se riproviamo ad intervalli fissi potremmo avere un effetto a valanga generando, involontariamente, un attacco di DOS (Denial Of Service) al servizio stesso. Come?
Immaginiamo di avere un carico costante di chiamate di 100 RPS. Ad un certo punto il 20% di queste vanno in timeout....
Nel primo post dedicato all'argomento, ho elencato due servizi che verranno forniti da Microsoft nei prossimi mesi. Si tratta di Windows Azure Storage e SQL Server Data services (SSDS).
Che differenza c'e' fra questi servizi? Detto che saranno tutti in hosting presso i datacenter di Microsoft, possiamo dire che Windowas Azure Storage fornira' lo storage per blobs, queue e tables (non relazionali), mentre SSDS un database relazionale.
Chi ha avuto modo di guardare a SSDS in passato, si sara' reso conto che di relazionale ha ben poco a che fare, se non il legame fra authority, container ed entity. Bene, quella versione...
Immaginatevi una sera a casa, avete un problema con un servizio o un contratto e decidete di chiamare il call center. Un call center e' pensato e progettato per essere scalabile (ho detto scalabile, non cortese :-)), tutte le chiamate vengono accettate, accodate ed evase il prima possibile. Bene, chiamate e dopo un secondo inizia la musichetta che vi mette in attesa (coda). Se va male qualche cosa, cade la linea e riprovate. Se va bene iniziate a parlare con l'operatore. Se va bene finite la richiesta, avete la risposta e chiudete. se va male cade la linea con l'operatore e...
Il cloud computing non e' un'idea nuova, anzi l'idea nasce negli anni 60 dal computer scientist John McCarthy. Che cosa lo ha reso cosi' popolare cosi' recentemente? I motivi sono veramente innumerevoli e per ora sorvolero' rimandando nel prossimo futura l'analisi piu' approfondita.
Di certo uno dei motivi principali della popolarita' oggi e' il costo. Con pochi dollari al giorno si possono gestire milioni di transazioni business senza dover fare investimenti infrastrutturali ingenti a priori. Ecco che quindi possiamo iniziare a pensare a usufruire di public utilities installandoci i nostri servizi e mettendoci i nostri dati, senza preoccuparci di investire...