gitmyhub

system-design-primer

Python ★ 354k updated 3mo ago

Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

Study guide and reference for designing large-scale software systems and preparing for system design interviews at tech companies.

Pythonsetup: easycomplexity 1/5

This repository is a free, community-maintained study resource for learning how to design large software systems. It is aimed at two audiences: engineers who want to get better at building software that runs at scale, and candidates preparing for the system design portion of a tech interview. The author frames it as an organized collection of resources, gathering material that is otherwise scattered across the web.

The README is mostly a long index that links into the deeper guide. The opening sections include study guides, advice on how to approach a system design interview question, and pointers to sample interview questions with worked solutions, both for system design and for object-oriented design. A sister repository called Interactive Coding Challenges is also referenced for coding-interview prep.

The index then walks through the main concepts you would meet on the job or in interviews. Topics include performance versus scalability, latency versus throughput, availability versus consistency, the CAP theorem, consistency patterns (weak, eventual, strong), availability patterns (fail-over, replication, availability in numbers), DNS, content delivery networks (push and pull), load balancers (active-passive, active-active, layer 4 vs layer 7, horizontal scaling), reverse proxies, the application layer (microservices, service discovery), databases (relational systems with replication, federation, sharding, denormalization and SQL tuning; NoSQL key-value, document, wide column, and graph stores), caching (client, CDN, web server, database, application, query- and object-level, plus cache-aside, write-through, write-behind, and refresh-ahead update strategies), and asynchronous work via message queues, task queues, and back pressure.

The repo also ships Anki flashcard decks, which use spaced repetition to help you remember the material. There are three decks: a system design deck, a system design exercises deck, and an object-oriented design exercises deck. The README is translated into many languages (Japanese, Simplified and Traditional Chinese, Arabic, Bengali, Brazilian Portuguese, German, Greek, Hebrew, Italian, Korean, Persian, Polish, Russian, Spanish, Thai, Turkish, Vietnamese, French), with open issues tracking each translation effort.

Where it fits