Chaos testing sieci na Windows
Chaos testing to psucie czegoś celowo, gdy patrzysz, żeby dowiedzieć się, co Twoje oprogramowanie z tym zrobi. Na warstwie sieci to dokładnie to, czym jest ten program: sposób na wstrzyknięcie awarii jednej aplikacji i sprawdzenie, czy przeżyje.
Awarie, które można wstrzyknąć
| Awaria | Co odwzorowuje |
|---|---|
| Strata, uszkodzenie, duplikacja | Zdegradowaną ścieżkę. Pakiety znikają, docierają popsute albo docierają dwa razy. |
| Opóźnienie, jitter, skoki | Wolną albo niestabilną ścieżkę, razem z wielosekundowym zacięciem, które psuje timeouty. |
| Zrywanie połączeń | Firewall albo load balancer zabijający połączenia w środku transferu. |
| Przerwy w łączu | Ścieżkę, która znika i wraca, cyklicznie. |
| Zablokowany adres albo port | Jedną zależność nieosiągalną, gdy wszystko inne działa. |
| Brak internetu przy żywym LAN-ie | Kształt portalu logowania: lokalnie działa, świat nie. |
Co odróżnia chaos od szumu: powtarzalność
Losowa awaria, której nie da się odtworzyć, produkuje opowieść, nie zgłoszenie błędu. Każda losowa decyzja pochodzi tu z ziarna, więc ta sama komenda odtwarza ten sam przebieg - te same zgubione pakiety, ten sam jitter, w tej samej kolejności:
BeanNetworkTester.exe --loss 15 --rst-prob 5 --seed 42 --target myapp.exe --duration 120
To jest różnica między "wywaliło się raz w zeszły wtorek" a czerwonym testem, który ktoś inny potrafi uruchomić.
W pipeline
Linia komend raportuje kodami wyjścia, więc build rozróżni "aplikacja padła" od "narzędzie nie mogło wystartować", a sesja kończy się sama - nie ma kroku sprzątającego, o którym można zapomnieć:
BeanNetworkTester.exe --loss 10 --rst-prob 5 --target myapp.exe --duration 90 --format json > chaos.ndjson
Ciąg awarii zamiast jednej to plik scenariusza, i on też jest powtarzalny. Zobacz scenariusze w czasie oraz testy sieciowe w CI po kody wyjścia i po to, jakiego runnera to wymaga.
Gdzie kończy się promień rażenia
Dwa ograniczenia i oba są zamierzone. Zaburzenie sięga jednego procesu, PID-u, adresu albo portu, gdy je wycelujesz, więc maszyna, na której pracujesz, dalej działa. I jest to jedna maszyna: to jest wstrzykiwanie awarii klientowi i jego łączu, nie klastrowi. Jeśli szukasz chaosu w wielu usługach i węzłach, to inny rodzaj narzędzia, a to tutaj jest elementem, który psuje sieć pod jedną aplikacją na Windows.
Wszystko jest odwracalne na miejscu. STOP przywraca sieć, limit czasu robi to samo, a wewnętrzny nadzorca zamyka przechwyt, jeśli samo narzędzie padnie - awaria, którą wstrzyknąłeś, nie może przeżyć przebiegu, który ją wstrzyknął.