使用混沌候攻擊測試Spring Boot應用

banq發表於2018-08-25
在編寫了許多單元和整合測試後,程式碼覆蓋範圍從70%到80%,但是還是存在一種焦慮,我們的寶寶在生產中的表現如何?

許多問題仍然沒有答案:
1. 我們的後備工作會起作用嗎?
2. 應用程式如何處理網路延遲?
3. 如果我們的某項服務出現故障怎麼辦?
4. 服務發現是否有效,但我們的客戶端負載平衡是否也有效?

如果你開始在你的公司實施混沌工程,那麼你必須是一個非常社交和溝通的人。為什麼,因為當你的混亂實驗發生時,你會在很短的時間內親自認識你的許多同事。

您的服務是否具有彈性並可以處理故障?如果沒有,請不要開始混亂實驗!

不要在生產環境啟用混沌候!

Spring Boot Chaos Monkey是一個小型庫(30kb),可以使用以下選項將Chaos Monkey整合到Spring Boot App中:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>chaos-monkey-spring-boot</artifactId>
    <version>X.X.X</version>
</dependency>
<p class="indent">

對於Spring Boot 2.0.x:

<dependency>
  <groupId>de.codecentric</groupId>
  <artifactId>chaos-monkey-spring-boot</artifactId>
  <version>2.0.0-SNAPSHOT</version>
</dependency>
<p class="indent">

使用Spring Profile chaos-monkey啟動應用程式以初始化Chaos Monkey,從版本1.5.0和2.0.0 開始,它預設不會對應用啟動攻擊,需要在執行時動態啟用它。
java -jar your-app.jar --spring.profiles.active=chaos-monkey

也可以透過Spring Boot PropertiesLauncher注入外部JAR檔案方式啟用:

java -cp your-app.jar
  -Dloader.path=chaos-monkey-spring-boot-X.X.X.jar
    org.springframework.boot.loader.PropertiesLauncher
    --spring.profiles.active=chaos-monkey
<p class="indent">

或者透過 loader.path系統設定與 Spring Boot PropertiesLauncher啟動:

java \
  -Xbootclasspath/a:aspectjrt-1.9.1.jar \
  -cp your-app.jar \
  -Dloader.path=chaos-monkey-spring-boot-X.X.X.jar \
  -Dspring.profiles.active=chaos-monkey \
  org.springframework.boot.loader.PropertiesLauncher
<p class="indent">

透過環境變數 LOADER_PATH和Spring Boot PropertiesLauncher啟用:

LOADER_PATH=chaos-monkey-spring-boot-X.X.X.jar \
java \
  -Xbootclasspath/a:aspectjrt-1.9.1.jar \
  -Dspring.profiles.active=chaos-monkey \
  -cp your-app.jar \
  org.springframework.boot.loader.PropertiesLauncher
<p class="indent">


在所有情況下:
無論你如何嵌入Chaos Monkey,只要不將屬性“ chaos.monkey.enabled ”設定為“ true ”,就什麼都不會發生!

無需更改原始碼就能啟用!

執行時的動態配置
從版本1.5.0和2.0.0開始,可以透過Spring Boot Actuator Endpoint在執行時配置Chaos Monkey for Spring Boot。

工作原理
如果Spring Boot Chaos Monkey在類路徑中並使用配置檔名稱“chaos-monkey”啟用,它將自動掃描應用程式以查詢以下使用Spring註釋的所有類:

@Controller
@RestController
@Service
@Repository
@Component
<p class="indent">

透過配置可以定義啟用哪些攻擊和監視器,預設情況下僅啟用@Service觀察器和延遲攻擊。

Watcher是一個Chaos Monkey for Spring Boot元件,它將掃描應用程式以獲取特定型別的註釋,在Spring AOP的幫助下,Chaos Monkey會識別出一個公共方法的執行,提供以下攻擊:

1. 延遲攻擊
2. Exception 攻擊
3. AppKiller攻擊


Chaos Monkey for Spring Boot

相關文章