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.
Nella discussione abbiamo caratterizzato la problematica in quasti termini:
- Minimizzare l'impatto sui server di produzione, bufferizzaddo i messaggi di log in memoria e scrivedoli su disco a blocchi
- Minimizzare l'impatto sui dischi usando un sistema di rotazione dei files
- Minimizzare l'impatto sulla rete spostando log files non troppo grossi per una successiva processazione
- Non filtrare per severita' a priori. Il logging serve a capire che cosa e' successo port-mortem, se si filtra si perdono informazioni preziose
- Arricchire i protocolli di comunicazione fra componenti in modo da permettere la tracciabilita' (correlazione)
- Accettare perdite di dati (logs)
Nel nostro team usaimo un sistema proprietario (MS) consolidato da altri servizi. Detto cio', credo che siamo ancora abbastanza lontano da una soluzione generalizzata per i cloud services.