Richard Rodger programuje od 1986 roku (zaczął od Sinclair ZX Spectrum) po dziś dzień. Współtworzył wiele firm produkujących oprogramowanie, przy okazji stając się niekwestionowanym autorytetem w dziedzinie Node.js i mikrousług. Twierdzi, że jego obsesja na punkcie JavaScript wzięła się z braku umiejętności kodowania w C++. Napisał kilka niezłych książek, a od czasu do czasu przemawia na różnych konferencjach technologicznych.
Spis treści
Przedmowa 11
Podziękowania 13
O książce 15
O autorze 19
O ilustracji na okładce 21
CZĘŚĆ I. BUDOWANIE MIKROUSŁUG 23
Rozdział 1. Odważny nowy świat 25
- 1.1. Kryzys długu technicznego 25
- 1.2. Studium przypadku: start-up mikroblogu 28
- 1.2.1. Iteracja 0.: publikowanie wpisów 28
- 1.2.2. Iteracja 1.: indeks wyszukiwania 32
- 1.2.3. Iteracja 2.: prosta kompozycja 35
- 1.2.4. Iteracja 3.: oś czasu 37
- 1.2.5. Iteracja 4.: skalowanie 40
- 1.3. Jak monolit sprzeniewierza się obietnicy komponentów 43
- 1.4. Idea mikrousługi 45
- 1.4.1. Podstawowe zasady techniczne 47
- 1.5. Praktyczne implikacje 51
- 1.5.1. Specyfikacja 51
- 1.5.2. Wdrożenie 52
- 1.5.3. Bezpieczeństwo 54
- 1.5.4. Ludzie 55
- 1.6. Co dostajesz za swoje pieniądze 56
- 1.7. Podsumowanie 57
Rozdział 2. Usługi 59
- 2.1. Definicje mikrousług 60
- 2.2. Studium przypadku: wydanie cyfrowe gazety 62
- 2.2.1. Cele biznesowe 62
- 2.2.2. Wymagania nieformalne 62
- 2.2.3. Podział funkcjonalny 63
- 2.3. Architektury mikrousług 64
- 2.3.1. Architektura miniserwerów webowych 65
- 2.4. Diagramy mikrousług 66
- 2.5. Drzewo zależności mikrousług 67
- 2.5.1. Architektura komunikatów asynchronicznych 71
- 2.6. Projekty monolityczne a projekty mikrousługowe 73
- 2.6.1. Jak mikrousługi zmieniają zarządzanie projektem 75
- 2.6.2. Jednolitość ułatwia estymację 75
- 2.6.3. Jednorazowy kod tworzy bardziej przyjazne zespoły 76
- 2.6.4. Homogeniczne komponenty pozwalają na heterogeniczną konfigurację 77
- 2.6.5. Istnieją różne rodzaje kodów 78
- 2.7. Jednostka oprogramowania 79
- 2.8. Wymagania dotyczące komunikatów do usług 80
- 2.9. Diagramy architektury mikrousług 83
- 2.9.1. Diagramy przepływów komunikatów 85
- 2.10. Mikrousługi to komponenty oprogramowania 87
- 2.10.1. Enkapsulacja 87
- 2.10.2. Wielokrotne użycie 87
- 2.10.3. Dobrze zdefiniowane interfejsy 88
- 2.10.4. Kompozycyjność 88
- 2.10.5. Mikrousługi jako komponenty w praktyce 89
- 2.11. Wewnętrzna struktura mikrousługi 91
- 2.12. Podsumowanie 92
Rozdział 3. Komunikaty 93
- 3.1. Komunikaty są obywatelami pierwszej klasy 93
- 3.1.1. Synchroniczne i asynchroniczne 95
- 3.1.2. Kiedy używać komunikacji synchronicznej 96
- 3.1.3. Kiedy używać komunikacji asynchronicznej 98
- 3.1.4. Rozproszone myślenie od pierwszego dnia 98
- 3.1.5. Taktyki ograniczające awarie 100
- 3.2. Analiza przypadku: obliczanie podatku od sprzedaży 102
- 3.2.1. Szerszy kontekst 102
- 3.3. Dopasowanie do wzorca 103
- 3.3.1. Podatek od sprzedaży: prosty początek 104
- 3.3.2. Podatek od sprzedaży: obsługa kategorii 106
- 3.3.3. Podatek od sprzedaży: obsługa przypadków globalnych 109
- 3.3.4. Wymagania biznesowe zmieniają się z definicji 109
- 3.3.5. Dopasowanie do wzorca obniża koszt refaktoryzacji 110
- 3.4. Niezależność od transportu 111
- 3.4.1. Przydatna fikcja: wszechmocny obserwator 112
- 3.5. Wzorce komunikatów 112
- 3.5.1. Wzorce bazowe: jeden komunikat/dwie usługi 113
- 3.5.2. Wzorce bazowe: dwa komunikaty/dwie usługi 116
- 3.5.3. Wzorce bazowe: jeden komunikat/n usług 118
- 3.5.4. Wzorce bazowe: m komunikatów/n usług 121
- 3.5.5. m/n: Łańcuch 121
- 3.5.6. m/n: Drzewo 122
- 3.5.7. Skalowanie komunikatów 122
- 3.6. Gdy komunikaty się zepsują 124
- 3.6.1. Typowe scenariusze awarii i co z nimi robić 125
- 3.6.2. Awarie dominujące w interakcji Żądanie-Odpowiedź 125
- 3.6.3. Awarie dominujące w interakcji Pocisk Samonaprowadzający 126
- 3.6.4. Awarie dominujące w interakcji Zwycięzca Bierze Wszystko 127
- 3.6.5. Awarie dominujące w interakcji Uruchom i Zapomnij 128
- 3.7. Podsumowanie 129
Rozdział 4. Dane 131
- 4.1. Dane nie oznaczają tego, co Twoim zdaniem oznaczają 132
- 4.1.1. Dane są heterogeniczne, a nie homogeniczne 132
- 4.1.2. Dane mogą być prywatne 134
- 4.1.3. Dane mogą być lokalne 135
- 4.1.4. Dane mogą być jednorazowe 137
- 4.1.5. Dane nie muszą być dokładne 138
- 4.2. Strategie danych dla mikrousług 138
- 4.2.1. Używanie komunikatów do ujawniania danych 138
- 4.2.2. Używanie kompozycji do manipulowania danymi 140
- 4.2.3. Używanie konfiguracji systemu do kontrolowania danych 144
- 4.2.4. Nałożenie słabszych ograniczeń na dystrybucję danych 149
- 4.3. Ponowne przemyślenie tradycyjnych wzorców danych 151
- 4.3.1. Klucze podstawowe 151
- 4.3.2. Klucze obce 152
- 4.3.3. Transakcje 153
- 4.3.4. Transakcje nie są tak dobre, jak Ci się wydaje 157
- 4.3.5. Schematy zaciągają dług techniczny 159
- 4.4. Praktyczny przewodnik decyzyjny dotyczący danych z mikrousług 160
- 4.4.1. Projekty od podstaw 161
- 4.4.2. Projekty zastane 162
- 4.5. Podsumowanie 163
Rozdział 5. Wdrażanie 165
- 5.1. Rzeczy się rozpadają 166
- 5.2. Nauka z historii 167
- 5.2.1. Three Mile Island 167
- 5.2.2. Model awarii w systemach oprogramowania 172
- 5.2.3. Redundancja nie działa tak, jak myślisz 176
- 5.2.4. Zmiana jest przerażająca 177
- 5.3. Centrala nie daje rady 180
- 5.3.1. Koszt doskonałego oprogramowania 181
- 5.4. Anarchia działa 181
- 5.5. Mikrousługi i redundancja 182
- 5.6. Ciągłe dostarczanie 183
- 5.6.1. System wdrażania 185
- 5.6.2. Proces 186
- 5.6.3. Ochrona 187
- 5.7. Uruchomienie systemu mikrousługowego 188
- 5.7.1. Niezmienność 188
- 5.7.2. Automatyzacja 191
- 5.7.3. Wytrzymałość 196
- 5.7.4. Walidacja 201
- 5.7.5. Wykrywanie usług 204
- 5.7.6. Konfiguracja 205
- 5.7.7. Bezpieczeństwo 206
- 5.7.8. Środowisko pomostowe 207
- 5.7.9. Rozwój oprogramowania 208
- 5.8. Podsumowanie 210
CZĘŚĆ II. MIKROUSŁUGI W AKCJI 211
Rozdział 6. Wdrażanie 213
- 6.1. Granice tradycyjnego monitoringu 214
- 6.1.1. Klasyczne konfiguracje 215
- 6.1.2. Problem z wartościami przeciętnymi 217
- 6.1.3. Używanie percentyli 218
- 6.1.4. Konfiguracje mikrousług 221
- 6.1.5. Potęga wykresów punktowych 221
- 6.1.6. Tworzenie panelu nawigacyjnego 223
- 6.2. Pomiary dla mikrousług 224
- 6.2.1. Warstwa biznesowa 224
- 6.2.2. Warstwa komunikatów 225
- 6.2.3. Warstwa usługi 233
- 6.3. Siła niezmienników 237
- 6.3.1. Wyszukiwanie niezmienników w logice biznesowej 238
- 6.3.2. Wyszukiwanie niezmienników w architekturze systemu 239
- 6.3.3. Wizualizacja niezmienników 241
- 6.3.4. Odkrywanie systemu 242
- 6.3.5. Walidacja syntetyczna 244
- 6.4. Podsumowanie 245
Rozdział 7. Migracja 247
- 7.1. Klasyczny przykład witryny e-commerce 248
- 7.1.1. Dotychczasowa architektura 248
- 7.1.2. Proces dostarczania oprogramowania 250
- 7.2. Przesuwanie słupków bramki 251
- 7.2.1. Praktyczne zastosowanie polityki 254
- 7.3. Rozpoczęcie podróży 255
- 7.4. Taktyka dusiciela 256
- 7.4.1. Częściowe proxy 257
- 7.4.2. Co robić, gdy nie można przeprowadzić migracji 258
- 7.4.3. Taktyka budowania od podstaw 260
- 7.4.4. Taktyka makrousługi 263
- 7.5. Strategia doskonalenia 265
- 7.6. Przejście od ogólnego do konkretnego 266
- 7.6.1. Dodawanie funkcjonalności do strony produktu 266
- 7.6.2. Dodawanie funkcjonalności do koszyka 269
- 7.6.3. Obsługiwanie zagadnień przekrojowych 271
- 7.7. Podsumowanie 272
Rozdział 8. Ludzie 275
- 8.1. Radzenie sobie z polityką organizacji 276
- 8.1.1. Akceptowanie twardych ograniczeń 276
- 8.1.2. Wyszukiwanie sponsorów 277
- 8.1.3. Budowanie sojuszy 279
- 8.1.4. Dostarczanie skoncentrowane na wartości 280
- 8.1.5. Dopuszczalne wskaźniki błędów 280
- 8.1.6. Odrzucanie funkcjonalności 280
- 8.1.7. Zatrzymanie abstrahowania 281
- 8.1.8. Oczyszczanie umysłów z uprzedzeń 282
- 8.1.9. Walidacja zewnętrzna 282
- 8.1.10. Solidarność zespołowa 283
- 8.1.11. Szanuj organizację 284
- 8.2. Polityka wynikająca ze stosowania mikrousług 284
- 8.2.1. Kto jest właścicielem i czego? 285
- 8.2.2. Kto jest pod telefonem? 286
- 8.2.3. Kto decyduje, co kodować? 288
- 8.3. Podsumowanie 292
Rozdział 9. Studium przypadku: nodezoo.com 295
- 9.1. Projektuj 296
- 9.1.1. Czym są wymagania biznesowe? 296
- 9.1.2. Czym są komunikaty? 298
- 9.1.3. Czym są usługi? 304
- 9.2. Dostarczaj 309
- 9.2.1. Iteracja 1.: rozwój lokalny 310
- 9.2.2. Iteracja 2.: testowanie, instalacja w systemie pomostowym i pomiar ryzyka 322
- 9.2.3. Iteracja 3.: droga do środowiska produkcyjnego 327
- 9.2.4. Iteracja 4.: poprawki i adaptacja 332
- 9.2.5. Iteracja 5.: monitorowanie i debugowanie 339
- 9.2.6. Iteracja 6.: skalowanie i wydajność 342
- 9.3. Odważny nowy świat 346
Skorowidz 348