Conoscendo la mia passione ed interesse per i sistemi distribuiti, un mio collega mi ha consigliato il libro di Martin Kleppmann “Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems” che, anche se di alcuni anni fa, secondo me è ancora molto attuale per chi sviluppa applicazioni back-end e architetti che vogliono migrare i loro sistemo on-promise verso il Cloud (es. Azure, AWS, etc).
Anche se lo scopo finale del libro è dare delle idee su come realizzare applicazioni affidabili che gestiscono notevoli moli di dati, anche lo sviluppatore back-end che lavora su sistemi più semplici – ad esempio semplici API – può trovarlo utile.
L’autore, Martin Kleppmann, che se non lo conoscete lo potrete apprezzare anche per il suo canale youtube che parla di sistemi distribuiti, ha la rarissima capacità di riuscire a spiegare in modo molto semplice concetti molto complessi. Devo dire uno scrittore fantastico.
Partendo da molto lontano, chiarisce i termini di uso più comune, come reliability, scalability, maintainability, ACID, ecc.
Inoltre spiega nel dettaglio come funzionano i database locali, quindi tutte i concetti di “transazione”, fino ad arrivare ai database distribuiti (es. CosmosDB, Key-Value stores, etc).
Passando dall’inutilità del termine ACID e del teorema CAP (che ci hanno abituato a pensare che fossero la “Bibbia”), alla spiegazione di 2PC (2 Phase Commit) e XA, serialization, partitioning, sharding, e il fondamentale concetto di “consensus”, riesce a chiarire le idee sui problemi più comuni che troviamo al lavoro.
Parlando di sistemi distribuiti, spiega i pro e contro di sistemi di messaggistica come RabbitMQ e Kafka, gli errori da non fare e che le cose non sono semplici come sembrano. Il livello di dettaglio che riesce a raggiungere è impressionante, grazie anche agli esempi semplici, reali, e facili da capire.
Non mostra codice (Java, C#, etc) ma rimane a un livello più alto. Un libro quindi adatto a Architetti, ma anche a sviluppatori back-end appassionati che vogliono essere più coinvolti nelle discussioni/progettazione.
Dopodichè mette tutto assieme per proporre una sua visione di come implementare un sistema complesso che sia però, anche affidabile e mantenibile nel tempo.
NB. per ogni capitolo riporta circa un centinaio di link/riferimenti per chi volesse approfondire un argomento specifico, una cosa di immenso valore, perchè avere il giusto riferimento nel mare delle informazioni disponibili non ha prezzo.
Mi sono chiarito come funzionano molte cose che davo “per scontato”, come i “transaction isolation level” di SQL Server e per quale motivo è importante il “Transaction log” e come funziona.
Già durante la lettura mi sono trovato ad affrontare discussioni al lavoro in modo molto più sicuro e con le idee chiare di cosa stavo dicendo, avvertendo i pro e contro delle diverse soluzioni, e soprattutto proponendo alternative.
Non l’hai ancora letto? Non sai cosa ti perdi!