1. 引言
在本教程中,我們將討論用於 Spring Boot 的 混沌猴。
該工具通過向我們的 REST 端點添加延遲、拋出錯誤或甚至終止應用程序,幫助我們將 混沌工程 的一些原則引入 Spring Boot 應用程序。
2. 安裝準備
為了將 Chaos Monkey 添加到我們的應用程序中,我們需要在項目中添加一個 Maven 依賴項:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>chaos-monkey-spring-boot</artifactId>
<version>2.0.0</version>
</dependency>3. 配置
一旦我們在項目中完成了依賴項設置,我們就需要配置並啓動混沌實驗。
我們可以通過以下幾種方式進行操作:
- 在應用程序啓動時,使用 chaos-monkey Spring 配置文件(推薦)
- 使用 chaos.monkey.enabled=true 屬性
通過使用 chaos-monkey Spring 配置文件,我們無需在應用程序運行時停止和啓動它,即可啓用或禁用它 。
java -jar your-app.jar --spring.profiles.active=chaos-monkey另一個有用的屬性是 management.endpoint.chaosmonkey.enabled。 將此屬性設置為 true 將啓用管理端點,用於我們的 Chaos Monkey:
http://localhost:8080/chaosmonkey通過此端點,我們可以查看我們的庫的狀態。以下是完整的 端點列表及其描述,這將幫助您修改配置、啓用或禁用 Chaos Monkey 以及其他更精細的控制。
利用所有可用的 屬性,我們可以對生成的混沌事件進行更精細的控制。
4. 工作原理
Chaos Monkey 由 Watcher 和 Assaults 組成。Watcher 是一個 Spring Boot 組件。它利用 Spring AOP,以監視在帶有以下 Spring 註解標記的類中執行的公共方法:
- Component
- Controller
- RestController
- Service
- Repository
根據我們的應用程序屬性文件中進行配置,我們的公共方法將由以下方法之一進行攻擊或不進行攻擊:
- 延遲攻擊 – 為請求添加隨機延遲
- 異常攻擊 – 拋出隨機 Runtime 異常
- AppKiller 攻擊 – 簡單來説,應用程序會崩潰
讓我們看看如何配置我們的 Watcher 和 Assaults 以實現更受控的攻擊。
5. 觀察者 (Watcher)
默認情況下,觀察者僅啓用於我們的 服務。這意味着我們的攻擊只會被執行到標記為 @Service 的類中的公共方法。
但是,我們可以通過配置屬性輕鬆更改它:
chaos.monkey.watcher.controller=false
chaos.monkey.watcher.restController=false
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=false
chaos.monkey.watcher.component=false請注意,一旦應用程序啓動後,就無法使用 Chaos Monkey 動態更改 Spring Boot 管理端口,正如我們之前討論的。
6. 攻擊
攻擊是指我們希望在應用程序中測試的場景。讓我們逐一分析每種攻擊類型,瞭解其作用以及如何配置它。
6.1. 延遲攻擊
這種攻擊方式會向我們的通話添加延遲。 通過這種方式,我們的應用程序響應速度變慢,並且我們可以監控它在例如數據庫響應變慢時表現的情況。
我們可以使用應用程序的屬性文件配置和啓用或禁用這種攻擊類型。
chaos.monkey.assaults.latencyActive=true
chaos.monkey.assaults.latencyRangeStart=3000
chaos.monkey.assaults.latencyRangeEnd=15000通過混沌猴的管理端點,還可以配置和啓用/禁用這種類型的攻擊。
讓我們啓用延遲攻擊,並設置兩個到五個秒之間的延遲範圍:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false
}'6.2. 異常攻擊 (Exception Assault)
本測試旨在評估我們的應用程序處理異常的能力。 根據配置,啓用後將隨機拋出一個 Runtime 異常。
我們可以使用類似於我們延遲攻擊的 curl 調用來啓用它:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": true,
"killApplicationActive": false
}'6.3. 應用終止攻擊 (AppKiller Assault)
這個功能,我們的應用程序會在隨機時刻終止。我們可以通過簡單的 curl 調用,如同前兩種攻擊類型一樣,啓用或禁用它:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true
}'7. 結論
在本文中,我們討論了 Chaos Monkey 在 Spring Boot 中的應用。我們瞭解到它借鑑了 混沌工程 的一些原則,並使我們能夠將其應用於 Spring Boot 應用程序。