>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Unknown

Cheat Sheet di System Design con 28 Capitoli per Chi Non Vuole Leggere Due Volumi di Alex Xu

Ricordo un paio di anni fa quando mi sono seduto per prepararmi per un colloquio di system design. Apri il popolare libro in due volumi di Alex Xu "System Design Interview" e ti rendi conto che ha quasi mille pagine. Di solito hai una settimana, al massimo due, prima del colloquio, e la testa ti sta già girando per l'abbondanza di diagrammi. E di recente, mi sono imbattuto nel repository liquidslr/system-design-notes nei miei segnalibri.

L'autore del progetto ha fatto tutto il lavoro di routine per noi. Ha preso entrambe le parti del libro, rimosso il contenuto inutile e organizzato 28 argomenti con soluzioni architetturali pronte all'uso. Il progetto ha già raccolto quasi 15.000 stelle su GitHub, e ci sono ragioni chiare per questo.

Cosa C'è Dentro le Note

Non ci sono discussioni astratte sull'architettura pulita qui. Il repository segue rigorosamente la struttura dei libri originali ed è diviso in due grandi gruppi di argomenti: blocchi costruttivi di base e progettazione di servizi specifici.

La prima parte copre la meccanica di base senza la quale è impossibile progettare qualsiasi backend affidabile:

  • Stima approssimativa. La capacità di calcolare gli RPS in entrata, lo spazio su disco per terabyte di log e la larghezza di banda di rete richiesta in un paio di minuti.
  • Algoritmi di rate limiting per proteggere le API pubbliche da sovraccarichi e spam.
  • Hashing coerente, che salva la situazione quando si partizionano dinamicamente i database e si bilancia la cache.
  • Generazione di ID unici in un ambiente distribuito senza lock, come Twitter's Snowflake o i server ticket di Flickr.

Il secondo gruppo di argomenti è dedicato all'analisi di servizi completi. L'autore analizza compiti che sono più comunemente visti nei colloqui delle grandi aziende tech:

  • Architettura del servizio di URL shortener con calcoli delle collisioni degli hash.
  • Chat scalabile a livello di Slack o Discord con connessioni WebSocket persistenti.
  • Hosting video come YouTube con una pipeline di transcoding asincrono per diverse risoluzioni.
  • Gateway di pagamento e portafogli digitali, dove l'idempotenza delle operazioni e il commit in due fasi sono estremamente importanti.

Articoli di Ingegneria Reali Invece di Teoria Secca

Il vantaggio principale del repository non è nemmeno il riassunto condensato dei capitoli. Alla fine del README, l'autore ha raccolto link ad articoli tecnici originali e paper dei team di Discord, Uber, Netflix e Amazon.

I diagrammi dei libri spesso sembrano sterili. Sulla carta, tutti i componenti funzionano perfettamente, le code non falliscono mai e le repliche del database si sincronizzano istantaneamente. La produzione reale è diversa.

Quando leggi il capitolo sui sistemi di messaggistica, puoi immediatamente aprire l'articolo degli ingegneri di Discord su come hanno memorizzato miliardi di messaggi e perché inizialmente hanno scelto Cassandra, per poi riscrivere lo storage in Rust e ScyllaDB. C'è anche un articolo sull'architettura di Flannel del team di Slack, che spiega come funziona la cache a livello di applicazione al bordo della rete.

La sezione sulla ricerca e l'autocomplete include un link a Prefixy e materiali su Prefix Hash Tree. Per chi si addentra nello storage distribuito dei dati, sono raccolti paper originali su Google BigTable e Amazon Dynamo DB.

Questo approccio collega la teoria dei libri con l'esperienza reale delle grandi aziende.

Come Leggere e Usare Queste Note

I materiali sono disponibili in due formati. Puoi studiare le cartelle direttamente nel repository GitHub, oppure aprire la versione web tramite Pagefy, con un link all'inizio del README. La seconda opzione è più comoda per la lettura su smartphone o tablet in movimento.

In ogni cartella troverai:

  • Definizione del problema con requisiti funzionali e non funzionali.
  • Diagramma dei componenti di alto livello (load balancer, cache, database, code).
  • Analisi dettagliata dei colli di bottiglia architetturali e dei modi per scalarli.
  • Conclusioni finali e trade-off della soluzione scelta.

Nessun codice è scritto qui; il focus è specificamente sulla logica del flusso di dati, sui protocolli di comunicazione e sulla scelta dei tipi di storage per diversi pattern di carico di lavoro.

Detto questo, il repository ha una sfumatura: il progetto è ancora segnato come work in progress. Alcuni capitoli sono formattati nei minimi dettagli, con formule e diagrammi ordinati, mentre alcuni capitoli attualmente hanno solo brevi schemi. L'autore aggiorna il contenuto di tanto in tanto, ma prima di un colloquio serio, è meglio controllare additionally gli articoli menzionati dai blog di ingegneria.

Chi il Progetto Farà Risparmiare Tempo

Se ti stai preparando per un cambio di lavoro a una posizione di livello Middle+ o Senior, questo repository ti farà risparmiare decine di ore.

Le note saranno utili anche per chi:

  • Sta progettando un nuovo servizio al lavoro e sta scegliendo tra SQL, NoSQL e storage key-value.
  • Vuole capire i dettagli di come funzionano i servizi geo (come trovare oggetti vicini o amici sulla mappa) attraverso GeoHash e QuadTree.
  • Sta scrivendo integrazioni con sistemi di pagamento e vuole evitare addebiti doppi durante guasti di rete.
  • È stanco dei compiti tipici e vuole migliorare la sua comprensione dei sistemi distribuiti in generale.

Se il tempo è scarso, consiglio di iniziare con i primi tre argomenti: scalare da zero a milioni di utenti, calcoli rapidi approssimativi e un framework passo-passo per rispondere alle domande dei colloqui di system design. Questo creerà una base solida su cui poi stratificare qualsiasi scenario specializzato.

Progetti correlati