>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Unknown

Ś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