Windows 上的網路混沌測試
混沌測試,就是在你的注視下故意破壞某樣東西,看看你的軟體會如何應對。在網路層面,這個工具正是如此:向單一應用注入故障,看它能否存活。
你可以注入的故障
| 故障 | 它模擬什麼 |
|---|---|
| 封包遺失、資料損壞、重複封包 | 品質下降的鏈路。封包消失、到達時已損壞,或者到達兩次。 |
| 延遲、抖動、尖峰 | 緩慢或不穩定的鏈路,包括足以讓逾時失效的數秒停頓。 |
| 連線重置 | 防火牆或負載均衡器在傳輸中途切斷連線。 |
| 鏈路中斷 | 鏈路按週期消失又恢復。 |
| 被阻斷的位址或連接埠 | 某一個依賴無法存取,而其餘一切正常。 |
| 網際網路斷開,區域網路正常 | 強制門戶的典型形態:本地可用,外部世界不可用。 |
混沌與噪聲的區別:可重複性
無法重播的隨機故障只會產生一個故事,而不是一份 bug 報告。這裡每一個隨機決定都來自一個隨機種子,所以同一條命令會重現同一次執行:丟的是同樣的封包,抖動也是同樣的,順序也相同:
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會恢復網路,時間限制同樣可以,而且如果工具本身崩潰,其內部的看門狗會關閉擷取,你注入的故障絕不能比注入它的那次執行活得更久。