Projektowanie systemów rozproszonych

Book description

Nowoczesne oprogramowanie musi sprostać wyśrubowanym kryteriom: ma cechować się określoną niezawodnością i skalowalnością, a przy tym powinno korzystać z technologii chmury. Naturalnie powinien to być dobrze zaprojektowany system rozproszony. Dziś standardem jest korzystanie z aplikacji na wielu urządzeniach w różnych lokalizacjach. Niestety, mimo powszechności systemów rozproszonych ich projektowanie nader często przypomina coś w rodzaju czarnej magii, dostępnej dla nielicznych wtajemniczonych. W efekcie architektura każdego systemu jest unikatowa.

Ta książka jest praktycznym przewodnikiem dla projektantów systemów rozproszonych. Zaprezentowano tu kolekcję powtarzalnych wzorców oraz zalecanych praktyk programistycznych, dzięki którym rozwijanie niezawodnych systemów rozproszonych stanie się bardziej przystępne i wydajne. Poza podstawowymi wzorcami systemów rozproszonych przedstawiono tu również techniki tworzenia skonteneryzowanych komponentów wielokrotnego użytku. Znalazło się tu także omówienie zagadnień rozwoju kontenerów i orkiestratorów kontenerów, które zasadniczo zmieniły sposób budowania systemów rozproszonych. Książka ta jest lekturą obowiązkową dla każdego projektanta aplikacji, który chce efektywnie budować niezawodne aplikacje rozproszone!

Najważniejsze zagadnienia:

wprowadzenie do systemów rozproszonych
znaczenie wzorców i komponentów wielokrotnego użytku
jednowęzłowe wzorce Przyczepa, Adapter i Ambasador
wielowęzłowe wzorce dla replikowania, skalowania i wybierania węzłów głównych
wzorce wsadowego przetwarzania danych na dużą skalę
Twórz systemy rozproszone: skalowalne, elastyczne, niezawodne!

Table of contents

  1. Przedmowa
    1. Kto powinien przeczytać tę książkę?
    2. Dlaczego napisałem tę książkę?
    3. Obecny świat systemów rozproszonych
    4. Poruszanie się po książce
    5. Konwencje stosowane w książce
    6. Źródła online
    7. Przykłady kodu do pobrania
    8. Podziękowania
  2. Rozdział 1. Wprowadzenie
    1. Krótka historia rozwoju systemów
    2. Krótka historia wzorców w rozwoju oprogramowania
      1. Formalizacja programowania algorytmicznego
      2. Wzorce programowania obiektowego
      3. Rozwój otwartego oprogramowania
    3. Wartość wzorców, praktyk i komponentów
      1. Stojąc na ramionach gigantów
      2. Wspólny język do dyskusji na temat naszych praktyk
      3. Współdzielone komponenty do łatwego ponownego wykorzystania
    4. Podsumowanie
  3. Część I. Wzorce jednowęzłowe
    1. Motywacje
    2. Podsumowanie
  4. Rozdział 2. Wzorzec Przyczepa
    1. Przykład przyczepy: dodawanie HTTPS do starszej usługi
    2. Dynamiczna konfiguracja za pomocą przyczepy
    3. Modułowe kontenery aplikacji
      1. Część praktyczna: wdrażanie kontenera topz
    4. Budowanie prostej usługi PaaS za pomocą przyczepy
    5. Projektowanie przyczep pod kątem modułowości i ponownego użycia
      1. Parametryzacja kontenerów
      2. Definiowanie API każdego kontenera
      3. Dokumentowanie kontenerów
    6. Podsumowanie
  5. Rozdział 3. Wzorzec Ambasador
    1. Używanie ambasadora do fragmentowania usługi
      1. Część praktyczna: implementacja pofragmentowanej usługi Redis
    2. Używanie ambasadora do pośredniczenia między usługami
    3. Używanie ambasadora do eksperymentowania lub rozdzielania żądań
      1. Część praktyczna: implementacja 10% eksperymentów
  6. Rozdział 4. Wzorzec Adapter
    1. Monitorowanie
      1. Część praktyczna: monitorowanie za pomocą systemu Prometheus
    2. Rejestrowanie
      1. Część praktyczna: normalizowanie różnych formatów rejestrowania za pomocą fluentd
    3. Dodawanie monitora poprawności działania
      1. Część praktyczna: dodawanie wszechstronnego monitorowania kondycji MySQL
  7. Część II. Wzorce serwowania usług
    1. Wprowadzenie do mikrousług
  8. Rozdział 5. Zreplikowane usługi o zrównoważonym obciążeniu
    1. Usługi bezstanowe
      1. Sondy gotowości dla mechanizmu równoważenia obciążenia
      2. Część praktyczna: tworzenie zreplikowanej usługi w Kubernetes
    2. Usługi ze śledzeniem sesji
    3. Zreplikowane usługi warstwy aplikacji
    4. Wprowadzenie warstwy buforowania
      1. Wdrażanie pamięci podręcznej
      2. Część praktyczna: wdrażanie warstwy buforowania
    5. Rozszerzanie warstwy buforowania
      1. Ograniczanie przepustowości i obrona przed atakiem DoS
      2. Przerywanie połączenia SSL
      3. Część praktyczna: wdrażanie serwera nginx i przerywania połączenia SSL
    6. Podsumowanie
  9. Rozdział 6. Usługi pofragmentowane
    1. Pofragmentowane buforowanie
      1. Dlaczego możesz potrzebować pofragmentowanej pamięci podręcznej?
      2. Znaczenie pamięci podręcznej dla wydajności systemu
      3. Zreplikowane pofragmentowane pamięci podręczne
      4. Część praktyczna: wdrożenie ambasadora i systemu memcached dla pofragmentowanej pamięci podręcznej
    2. Funkcja fragmentująca
      1. Wybór klucza
      2. Spójne funkcje haszujące
      3. Część praktyczna: budowanie spójnego fragmentującego pośrednika HTTP
    3. Pofragmentowane zreplikowane serwowanie usług
    4. Systemy fragmentowania na gorąco
  10. Rozdział 7. Wzorzec Rozrzucaj-Zbieraj
    1. Wzorzec Rozrzucaj-Zbieraj z węzłem głównym jako dystrybutorem
      1. Część praktyczna: rozproszone wyszukiwanie dokumentów
    2. Rozrzucaj-Zbieraj z fragmentowaniem liści
      1. Część praktyczna: pofragmentowane wyszukiwanie dokumentów
      2. Wybieranie odpowiedniej liczby liści
    3. Skalowanie wzorca Rozrzucaj-Zbieraj pod kątem niezawodności i skali obliczeniowej
  11. Rozdział 8. Funkcje i przetwarzanie oparte na zdarzeniach
    1. Kiedy FaaS ma sens
      1. Zalety FaaS
      2. Wyzwania FaaS
      3. Potrzeba przetwarzania w tle
      4. Potrzeba przechowywania danych w pamięci
      5. Koszty ciągłego przetwarzania opartego na żądaniach
    2. Wzorce dla usług FaaS
      1. Wzorzec Dekorator: transformacja żądań lub odpowiedzi
      2. Część praktyczna: ustawianie wartości domyślnych żądania przed jego przetworzeniem
      3. Obsługa zdarzeń
      4. Część praktyczna: implementowanie uwierzytelniania dwuetapowego
      5. Potoki oparte na zdarzeniach
      6. Część praktyczna: implementowanie potoku w celu rejestracji nowego użytkownika
  12. Rozdział 9. Wybór własności
    1. Czy musisz wybierać węzeł główny?
    2. Podstawy wyboru węzła głównego
      1. Część praktyczna: wdrażanie etcd
      2. Implementacja blokad
      3. Część praktyczna: implementowanie blokad w etcd
      4. Implementowanie własności
      5. Część praktyczna: implementowanie dzierżaw w etcd
    3. Obsługa jednoczesnej manipulacji danymi
  13. Część III. Wzorce przetwarzania wsadowego
  14. Rozdział 10. Systemy kolejek roboczych
    1. Ogólny system kolejki roboczej
      1. Interfejs kontenera źródłowego
      2. Interfejs kontenera roboczego
      3. Infrastruktura współdzielonej kolejki roboczej
    2. Część praktyczna: implementacja generowania miniaturek plików wideo
    3. Dynamiczne skalowanie węzłów roboczych
    4. Wzorzec Wiele Węzłów Roboczych
  15. Rozdział 11. Przetwarzanie wsadowe oparte na zdarzeniach
    1. Wzorce przetwarzania opartego na zdarzeniach
      1. Kopiarka
      2. Filtr
      3. Rozdzielacz
      4. Fragmentator
      5. Scalanie
    2. Część praktyczna: budowanie przepływu opartego na zdarzeniach dla rejestracji nowego użytkownika
    3. Infrastruktura „publikuj-subskrybuj”
    4. Część praktyczna: wdrażanie Kafki
  16. Rozdział 12. Skoordynowane przetwarzanie wsadowe
    1. Łączenie (czyli synchronizacja barierowa)
    2. Redukcja
      1. Część praktyczna: zliczanie
      2. Suma
      3. Histogram
    3. Część praktyczna: znakowanie obrazów i potok przetwarzania
  17. Rozdział 13. Wniosek: nowy początek?

Product information

  • Title: Projektowanie systemów rozproszonych
  • Author(s): Brendan Burns
  • Release date: October 2018
  • Publisher(s): Helion
  • ISBN: 9781098125271