| Tytuł: | Mikroserwisy, Python i DDD - kompendium |
| Kod: | python-ddd5 |
| Kategoria: | Python |
| Forma: | 40% wykłady, 60% warsztaty |
| Czas trwania: | 5 dni |
| Odbiorcy: | architekci, developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Kompleksowe, 5-dniowe szkolenie z budowania rozproszonych systemów informatycznych w Pythonie w oparciu o Domain-driven design.
Szkolenie kładzie nacisk na zaprojektowanie modularności, a następnie integrowanie komponentów w niezawodny sposób.
Koncentrujemy się na rozwiązywaniu rozmaitych problemów związanych z komunikacją asynchroniczną oraz poznawanie wzorców wspomagających - jak Saga czy CQRS.
Ostatniego dnia zajmujemy się tematyką monitorowania z klasycznymi metrykami oraz Distributed Tracing. Uzupełnimy też wiadomości z testowania, zapewniając jakość w budowanym systemie.
- Dzień 1: Wyznaczanie granic i projektowanie modularności
- Dzień 2: Wzorce taktyczne DDD
- Dzień 3: System rozproszone i architektura sterowana zdarzeniami
- Dzień 4: Niezawodność w systemach rozproszonych
- Dzień 5: Testowanie, monitorowanie i zapewnienie jakości
Wyróżniki szkolenia
- Pragmatyczne podejście
- Szukanie granic autonomicznych modułów
- Sprawdzone wzorce architektoniczne
Program Szkolenia
Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.-
Wprowadzenie do Domain-Driven Design- Dlaczego potrzebujemy modularności?
- Utrzymywalność oprogramowania
- Skalowanie wytwarzania oprogramowania
- Łatwiejsze rozbijanie projektu na mniejsze
- Pogodzenie różnych perspektyw
- Pogodzenie różnych interesariuszy
- Utrzymywalność oprogramowania
- Jak DDD pomaga modularyzować?
- Jeden model to z mało…
- …zamiast tego używamy kilku, wokół których organizujemy usługi / komponenty
- DDD, a organizacja zespołów
- Jeden model to z mało…
- Dlaczego potrzebujemy modularności?
-
Event Storming - analizujemy system- Zastosowania Event Stormingu
- Poziomy Event Stormingu
- Myślenie zdarzeniami
- Big Picture - pierwszy rzut oka na system z lotu ptaka
- Zdarzenie
- Zdarzenie
- Process Level Event Storming - odkrywamy procesy i proponujemy Bounded Contexty
- Komenda
- Aktor
- Hotspot
- Komenda
- Zastosowania Event Stormingu
-
DDD i modularność w praktyce - szukamy Bounded Contextów- Poddomeny - problem space
- Bounded Contexty - solution space
- Heurystyki znajdowania Bounded Contextów
- Budujemy mapę kontekstów
- Poddomeny - problem space
-
Drivery architektoniczne- Specyfika technologii
- Specyfika biznesowa
- Wymagania funkcjonalne
- Wymagania niefunkcjonalne
- Inne
- Specyfika technologii
-
Inne heurystyki wspomagające projektowanie modularności- Zgodność z regulacjami
- Security
- Częstość zmian
- Ryzyko
- Wydajność
- Model współbieżności
- Zgodność z regulacjami
-
Zapachy architektury świadczące o nieoptymalnym designie- Cyclic dependency
- Feature / data envy
- God component
- Dense Structure
- Cyclic dependency
-
Projektujemy system składający się z mikroserwisów- Założenia
- Projektowanie z myślą o awariach
- Podejście ewolucyjne
- Decentralizacja zarządzania danymi
- Projektowanie z myślą o awariach
- Jak określić granicę serwisów
- Podejście Bounded Context z DDD
- Antywzorzec: Nanoservice
- Antywzorzec: Rozproszony CRUD
- Podejście Bounded Context z DDD
- Założenia
-
Pułapki czyhające przy projektowaniu systemu rozproszonego- Współdzielona baza danych
- Nadużywanie synchronicznej komunikacji
- Pojedynczy punkt awarii
- Źle wyznaczone granice
- Brak możliwości niezależnego wdrożenia
- Współdzielona baza danych
-
Agregaty- Heurystyki projektowania
- Gwarancja spójności reguł biznesowych
- Granica spójności transakcji
- Preferowanie małych agregatów
- Przechowywanie tożsamości innych agregatów
- Używanie eventual consistency do synchronizacji stanu agregatów
- Gwarancja spójności reguł biznesowych
- Kiedy łamiemy zasady? Na co uważać?
- Walidowanie zaprojektowanych agregatów
- Upewnienie się, że problemy z początku szkolenia nam nie grożą
- Upewnienie się, że problemy z początku szkolenia nam nie grożą
- Heurystyki projektowania
-
Value objects- Odpowiednie do modelowania konceptów
- Odpowiednie do modelowania konceptów
-
Serwisy Domenowe- Model procedur biznesowych
- Model procedur biznesowych
-
Fabryki- Walidacja
- Logika biznesowa podczas składania obiektów
- Wsparcie testowalności
- Walidacja
-
Polityki (strategie)- Modelowanie w stylu funkcyjnym
- Open Close Principle (SOLID) w praktyce
- Modelowanie w stylu funkcyjnym
-
Zdarzenia dziedzinowe- Wyzwalanie akcji w ramach tego samego Bounded Contextu
- Event Bus
- Integrowanie Bounded Contextów
- Wyzwalanie akcji w ramach tego samego Bounded Contextu
-
Czysta architektura / Porty i Adaptery- Logika orkiestracji - Przypadek użycia / Serwis aplikacyjny
- Logika zmiany - encje oraz wzorce taktyczne z DDD
- Logika walidacji - specyfikacja, DTO
- Logika orkiestracji - Przypadek użycia / Serwis aplikacyjny
-
Integrowanie Bounded Contextów- Kierunek zależności
- Komendy
- Zdarzenia
- Komendy
- Anticorruption Layer
- Open Host / Published Language
- Customer - Supplier
- Shared Kernel
- Kierunek zależności
-
Komunikacja synchroniczna - API- REST API
- Podstawy projektowania API
- Model dojrzałości Richardsona
- Dokumentowanie na przykładzie OpenAPI
- Podstawy projektowania API
- Wady i pułapki komunikacji synchronicznej
- Zwiększanie podatności na awarie
- Temporal coupling
- Zwiększanie podatności na awarie
- REST API
-
Komunikacja asynchroniczna - Wiadomości- Asynchroniczne komendy
- Zdarzenia
- Asynchroniczne komendy
-
CQRS- Ogólne założenia
- Wertykalny podział
- Model zapisu
- Model odczytu
- Wertykalny podział
- Przykładowe zastosowania
- widok dla panelu administracyjnego
- raportowanie
- audit log
- widok dla panelu administracyjnego
- Read model tylko na poziomie kodu
- Budowanie read modeli - synchronicznie
- Budowanie read modeli - asynchronicznie
- Radzenie sobie z opóźnieniem odświeżenia read modelu
- Ogólne założenia
-
Wzorce Sagi i Process Managera- Orkiestracja kontra choreografia w architekturach sterowanych zdarzeniami
- Stanowy Process Manager czy bezstanowa Saga?
- Zarządzanie długim procesem
- Kompensacja
- Obsługa timeoutów
- Orkiestracja kontra choreografia w architekturach sterowanych zdarzeniami
-
Gwarancje dostarczenia- Najczęściej uzyskiwana - at-most-once
- Najczęściej potrzebna - at-least-once
- Najczęściej pożądana - exactly-once
- Wybór właściwej gwarancji
- Najczęściej uzyskiwana - at-most-once
-
Outbox Pattern- Pułapka wysłania za wcześnie - przed zatwierdzeniem transakcji
- Pułapka wysłania później - po zatwierdzeniu transakcji
- Gwarancja wysłania wiadomości
- Implementacja z relacyjną bazą danych
- Skalowanie z relacyjną bazą danych
- Pułapka wysłania za wcześnie - przed zatwierdzeniem transakcji
-
Radzenie sobie z nieprawidłowymi wiadomościami- Walidacja
- Odrzucanie
- Kolejka na nieprawidłowe wiadomości
- Walidacja
-
Dead Letter i finalizacja wiadomości- realizacja na wybranym brokerze
- ponowne próby
- backoff
- ilość maksymalna
- backoff
- polityka finalizacji i retencji nieskonsumowanych wiadomości
- realizacja na wybranym brokerze
-
Wzorzec Idempotent Receiver i deduplikacja wiadomości- Ignorowanie duplikatów
- Ponowne przetworzenie tych samych wiadmości
- Strategie deduplikacji
- Identyfikator wiadomości
- Wersja
- Idempotentna wiadomość
- Identyfikator wiadomości
- Ignorowanie duplikatów
-
Ewolucja i wersjonowanie zdarzeń- Potrzeba wersjonowania
- Serializacja wspierające ewolucję - Apache Avro, Protobuf, JSON Schema
- Przykład implementacji Schema Registry
- Jak wdrażać serwisy, by bezpiecznie migrować do nowszych wersji?
- Potrzeba wersjonowania
-
Testowanie- Testowanie akceptacyjne serwisu / komponentu
- Testy end-to-end
- Testy kontraktowe
- Consumer-driven Contract Testing
- Consumer-driven Contract Testing
- Rodzaje test doubles i ich wpływ na test
- Mock
- Stub
- Dummy
- Fake
- Mock
- Wzorce wspomagające
- Fabryki
- Warstwy w testach, DSL
- Fabryki
- Testy syntetyczne
- Testowanie akceptacyjne serwisu / komponentu
-
Metryki- Prometheus i Grafana
- Wsparcie w popularnych bibliotekach
- Budowanie własnych metryk
- Co warto mierzyć? Co dostajemy za darmo?
- Prometheus i Grafana
-
Distributed Tracing- opentelemetry
- Biblioteki
- Wsparcie
- Własna instrumentacja
- Dodawanie własnych danych do trace’ów
- Dodawanie własnych danych do trace’ów
- Biblioteki
- Wizualizacja przepływów w systemie
- Znajdowanie źródła problemu wydajnościowego
- opentelemetry
Pobierz program w formacie PDF
Trenerzy
Poznaj ekspertów, którzy mogą poprowadzić Twoje szkolenie.