Komponentowe systemy rozproszone kilka patentów
Michael T. Nygard, Release It
Punkty integracji?
Punkt upadku? Każdy punkt integracji kiedyś sprawi problem. Nie wiadomo tylko: Kiedy Jak często to się powtórzy Jakie będą objawy… Błąd przewidywalny Błąd nieprzewidziany Duże opóznienie Zwis totalny… Mega wielki zwrot
Punkt integracji czyli co jest po tamtej stronie…
Warto rozmawiać… Należy Poszukać Punktów integracji i zastanowić się: Jakie błędy są obsługiwane? Co jeśli pojawi się nieoczekiwany błąd? Co jeśli sterowanie nie wróci w ogóle? Co gdy nie bedzie błędu ale dane będą bez sensu –np. pusty zwrot? Co gdy zwrot będzie olbrzymi? Co będzie gdy będziemy coś zmieniać w serwisie?
Brak odpowiedzi
Brak odpowiedzi… 99.999% vs 88% Czy możemy żyć bez działającej usługi? czyli jaka jest różnica między 5x9 a 2x8 99.999% vs 88%
Dostępność systemu Różnica między 99.999% a 88% wynosi 1051h w skali roku Przy koszcie opóźnień rzędu 1k$/h daje to kwotę ponad milion $* *Wiele firm wycenia 1h na 100k$
Czy to naprawdę potrzebne? DB - klienci Serwis obsługa klientów DB - księgowość Serwis księgowy Serwis reklamowy DB - cennik Aplikacja WWW Przeglądarka
Czy to naprawdę potrzebne? Czy do pokazania towarów potrzeba aktualnych reklam ? Promocji? Czy można żyć np. bez danych klientów? Czasem można – czasem mamy je w cisteczkach i w sytuacji wyjątkowej możemy ich nie doczytywać z serwisu.
Fail Fast
Fail Fast Dużo lepiej szybko zasygnalizować błąd niż próbować obsłużyć go na niskim poziomie np. przez powtórzenia Dla bazy danych czasami powtórzenie może mieć sens (np. w przypadku deadlock-ów) Lepiej zwalidować dane przed a nie na końcu transakcji Lepiej upewnić się, że mamy potrzebne wszystkie zasoby zanim rozpoczniemy czasochlonne przetwarzanie (np. zawołamy zewnętrzne serwisy)
Fail Fast – czarny scenariusz baza serwisu obsługa klientów ledwo żyje (właśnie liczony jest roczny raport). próbujemy kupić coś w sklepie (jak wielu innych) ?
Time Out Zawsze gdy tylko można powinien być ustawiany Zwykle warto dać możliwość konfiguracji
Circuit Breaker Jeśli serwis np. marketingu stwierdza, że ma problem z baza (np długi czas odpowiedzi) od razu raportuje błąd np. przez 1 min żeby dać czas bazie na podniesienie się.
Hand Shaking Zamiast od razu pytać serwis o pot. duże dane (zwłasza na starcie lub po jakimś czasie bezczynności) można najpierw zapitać go o status Start systemu – po restarcie …
Slow responses Ulubione zajęcie znudzonego klienta: “Odśwież” Długi czas odpowiedzi: Blokuje łańcuch pytających - wątki, pamięć Ew. timeout i ponowienie nie anulują poprzedniego żądania, czyli jest jeszcze gorzej. Co z pomysłem by nie obsługiwać kolejnyć żadań z tego samego IP?
Co to jest? Zasada odwróconego SLA.
Użytkownicy to zło ... konieczne Są różni – wielu przegląda mało kupuje Dodatkowo są: promocje boty hakerzy
Sesje Pyt: długie czy krótkie ? Odp: Lekkie, a najlepiej wcale Użytkownik nie wie co to zamykanie sesji – ulubiony sposób wyjścia to przejście gdzie indziej, a nie wyloguj Bot nie obsługuje ciastek – co oznacza … domyślnie nową sesję dla każdego żądania – np. żeby odpowiedzieć “temu panu dziękujemy”
Reakcja łańcuchowa Przetwarzanie 33% zleceń obciąż. 90% Aplikacja WWW Przeglądarka
Czy system musi znieść wszystko ? Powinien dobrze działać w typowych warunkach przetrwać (niekoniecznie super wydajnie) ektremalne warunki – promocje, święta
Bulkheads? Warto rozważyć oddzielne QoS dla różnych typów klientów, usług itd np. przez wydzielenie oddzielnych podsystemów Kompromis: skalowanie vs. stabilność
Wycieki Pamięć Połączenia do bazy, Wątki Duży problem dla długo działających aplikacji
Diagnostyka Monitorowanie: pamięć, dysk, zasoby, sieciowe wołania, wolumen danych, stan punktów integracji, Logowanie: wyjątki, błędne wołania, problemy sieciowe (+ kontekst), ale bez ujawniania szczegłów użytkownikom Charakterystyki komponentów: liczba wołań, wolumen danych, itd Integracja danych z komponentów – concordance ID
Fiddling Aplikacja wymaga restartów Aplikacja wymaga czyszczenia dysku (rolowanie logów) Skomplikowany start/restart Trudna konfiguracja
Health Check Strona z syntetyczną prezentacją stanu systemu Self testy
Test Harnes Przy testowaniu (manualnym) testujemy nie tylko “heapy path” Staramy się dociekliwi, nieprzewidywalni, po prostu wredni Testy automatyczne nie zastąpią testerów Np. Wyjmowanie kabelkow sieciowych to wcale nie taki zły pomysł. złośliwe generowanie dużych zwrotów czy psucie danych może być trudne do uzyskania w normalnym trybie testowania
Kto za to zapłaci? Budując “proof of concept” systemu musimy zbudować go tanio – to tylko makieta Żaden działający komercyjny duży system nie był pisany jako duży system… R 1.0 to poczatek życia systemu (a nie koniec) Nie można dodać wszystkiego na raz, ale to nie znaczy, że można nie dodawać wcale Różnica między stanem obecnym a docelowym to … dług techniczny?
Z drugiej strony? Często jest tak ze decyzje podjete na poczatku determinuja kształt (i stabilnosc) Na początku wiemy o systemie najmniej..
Do poczytania Michael T. Nygard, Release It