Хаос-тестирование сети в Windows
Хаос-тестирование означает намеренно что-то ломать на ваших глазах, чтобы выяснить, как ведёт себя ваше ПО. На сетевом уровне именно этим и является этот инструмент: способом внести сбой в одно приложение и посмотреть, выживет ли оно.
Сбои, которые можно внести
| Сбой | Что он моделирует |
|---|---|
| Потери, порча, дублирование | Ухудшенный путь. Пакеты исчезают, приходят повреждёнными или приходят дважды. |
| Задержка, джиттер, всплески | Медленный или нестабильный путь, включая многосекундное зависание, которое ломает таймауты. |
| Сбросы соединений | Брандмауэр или балансировщик нагрузки, обрывающий соединения посреди передачи. |
| Обрывы канала | Путь пропадает и возвращается по циклу. |
| Заблокированный адрес или порт | Одна зависимость недоступна, пока всё остальное работает. |
| Интернета нет, LAN жива | Форма «закрытого портала»: локальное работает, внешний мир нет. |
Что отличает хаос от шума: повторяемость
Случайный сбой, который нельзя повторить, даёт байку, а не отчёт об ошибке. Каждое случайное решение здесь берётся из seed, поэтому одна и та же команда воспроизводит тот же запуск: те же потерянные пакеты, тот же джиттер, в том же порядке:
BeanNetworkTester.exe --loss 15 --rst-prob 5 --seed 42 --target myapp.exe --duration 120
В этом и разница между «один раз упало в прошлый вторник» и падающим тестом, который может запустить кто-то другой.
В пайплайне
Командная строка сообщает о результате кодами завершения, поэтому сборка может отличить «приложение упало» от «инструмент не смог запуститься», а сеанс заканчивается сам: нет шага очистки, о котором можно забыть:
BeanNetworkTester.exe --loss 10 --rst-prob 5 --target myapp.exe --duration 90 --format json > chaos.ndjson
Последовательность сбоев вместо одного это файл сценария, и такие запуски тоже повторяемы. Коды завершения и нужный раннер описаны в разделах сценарии во времени и тесты сети в CI.
Где заканчивается радиус поражения
Два ограничения, и оба намеренные. Помехи достигают одного процесса, PID, адреса или порта, когда вы на них нацеливаетесь, поэтому машина, на которой вы работаете, продолжает работать. И это одна машина: это внесение сбоев для клиента и его соединения, а не для кластера. Если вам нужен хаос между службами и узлами, это инструмент другого рода, а этот является той частью, которая ломает сеть под одним приложением Windows.
Всё обратимо на месте. STOP восстанавливает сеть, ограничение по времени делает то же самое, а сторожевой таймер внутри инструмента останавливает перехват, если сам инструмент умрёт: внесённый вами сбой не должен пережить запуск, который его внёс.