Ściągawka z projektowania systemów z 28 rozdziałami dla tych, którzy nie chcą czytać dwóch tomów Alexa Xu
Pamiętam kilka lat temu, gdy po raz pierwszy zasiadłem do przygotowań na rozmowę kwalifikacyjną z projektowania systemów. Otwierasz popularną dwutomową książkę Alexa Xu „System Design Interview" i orientujesz się, że ma prawie tysiąc stron. Zwykle masz tydzień, najwyżej dwa, przed rozmową, a głowa już kręci się od nadmiaru diagramów. I niedawno natknąłem się na repozytorium liquidslr/system-design-notes w moich zakładkach.
Autor projektu wykonał za nas całą żmudną pracę. Zabrał obie części książki, usunął zbędne ozdobniki i uporządkował 28 tematów z gotowymi rozwiązaniami architektonicznymi. Projekt zdobył już prawie 15 000 gwiazdek na GitHubie, i są ku temu wyraźne powody.
Co znajdziesz w środku
Nie ma tutaj abstrakcyjnych dyskusji o czystej architekturze. Repozytorium ściśle trzyma się struktury oryginalnych książek i dzieli się na dwie główne grupy tematyczne: podstawowe elementy składowe oraz projektowanie konkretnych usług.
Pierwsza część obejmuje podstawową mechanikę, bez której nie da się zaprojektować żadnego niezawodnego backendu:
- Szacunki na serwetce. Umiejętność obliczenia przychodzącego RPS, przestrzeni dyskowej dla terabajtów logów i wymaganej przepustowości sieci w kilka minut.
- Algorytmy rate limitingu do ochrony publicznych API przed przeciążeniem i spamem.
- Spójne hashowanie, które ratuje sytuację przy dynamicznym shardingowaniu baz danych i równoważeniu cache.
- Generowanie unikalnych ID w środowisku rozproszonym bez blokad, jak Twitterowy Snowflake czy serwery biletów Flickr.
Druga grupa tematów poświęcona jest analizie pełnoprawnych usług. Autor rozbija zadania najczęściej spotykane w rozmowach kwalifikacyjnych w dużych firmach technologicznych:
- Architektura skracacza URL z obliczeniami kolizji haszy.
- Skalowalny czat na poziomie Slacka lub Discorda z utrzymywanymi połączeniami WebSocket.
- Hosting wideo jak YouTube z asynchronicznym potokiem transkodowania dla różnych rozdzielczości.
- Bramki płatnicze i portfele cyfrowe, gdzie idempotencja operacji i dwufazowy commit są krytycznie ważne.
Prawdziwe artykuły inżynieryjne zamiast suchej teorii
Główną zaletą repozytorium nie jest nawet zwięzłe przedstawienie rozdziałów. Na końcu README autor zebrał linki do oryginalnych artykułów technicznych i publikacji od zespołów Discord, Uber, Netflix i Amazon.
Diagramy w książkach często wyglądają sterylnie. Na papierze wszystkie komponenty działają perfekcyjnie, kolejki nigdy nie zawodzą, a repliki baz danych synchronizują się natychmiast. Prawdziwa produkcja wygląda inaczej.
Gdy czytasz rozdział o systemach wiadomości, możesz od razu otworzyć artykuł inżynierów Discorda o tym, jak przechowywali miliardy wiadomości i dlaczego początkowo wybrali Cassandrę, a później przepisali storage na Rust i ScyllaDB. Jest też artykuł o architekturze Flannel od zespołu Slacka, wyjaśniający jak działa cache na poziomie aplikacji na krawędzi sieci.
Sekcja o wyszukiwaniu i autouzupełnianiu zawiera link do Prefixy i materiałów o Prefix Hash Tree. Dla zgłębiających rozproszone przechowywanie danych zebrano oryginalne publikacje o Google BigTable i Amazon Dynamo DB.
Takie podejście łączy teorię z książek z prawdziwym doświadczeniem dużych firm.
Jak czytać i korzystać z tych notatek
Materiały dostępne są w dwóch formatach. Możesz przeglądać foldery bezpośrednio w repozytorium GitHub, albo otworzyć wersję webową przez Pagefy, z linkiem na samym początku README. Druga opcja jest wygodniejsza do czytania na telefonie lub tablecie w podróży.
W każdym folderze znajdziesz:
- Opis problemu z wymaganiami funkcjonalnymi i niefunkcjonalnymi.
- Diagram komponentów wysokiego poziomu (load balancery, cache, bazy danych, kolejki).
- Szczegółową analizę wąskich gardeł architektonicznych i sposobów ich skalowania.
- Końcowe wnioski i kompromisy wybranego rozwiązania.
Nie ma tutaj kodu; skupiono się konkretnie na logice przepływu danych, protokołach komunikacji i wyborze typów storage dla różnych wzorców obciążenia.
Przy tym repozytorium ma pewien niuans: projekt jest wciąż oznaczony jako w trakcie realizacji. Niektóre rozdziały są szczegółowo sformatowane, z formułami i schludnymi diagramami, podczas gdy niektóre mają na razie tylko krótkie zarysy. Autor aktualizuje treść od czasu do czasu, ale przed poważną rozmową kwalifikacyjną najlepiej dodatkowo sprawdzić wspomniane artykuły z blogów inżynieryjnych.
Komu projekt zaoszczędzi czas
Jeśli przygotowujesz się do zmiany pracy na stanowisko Mid+ lub Senior, to repozytorium zaoszczędzi ci dziesiątki godzin.
Notatki będą też przydatne dla tych, którzy:
- Projektują nową usługę w pracy i wybierają między SQL, NoSQL a storage klucz-wartość.
- Chcą zrozumieć szczegóły działania usług geograficznych (wyszukiwanie pobliskich obiektów lub znajomych na mapie) przez GeoHash i QuadTree.
- Piszą integracje z systemami płatniczymi i chcą uniknąć podwójnych obciążeń podczas awarii sieci.
- Są zmęczeni typowymi zadaniami i chcą poprawić swoje rozumienie systemów rozproszonych w ogóle.
Jeśli czas jest ograniczony, polecam zacząć od pierwszych trzech tematów: skalowania od zera do milionów użytkowników, szybkich obliczeń szacunkowych i krok po kroku frameworka do odpowiadania na pytania z projektowania systemów. To stworzy solidny fundament, na którym później można nakładać dowolne specjalistyczne scenariusze.
Powiązane projekty