有多少人从未在生产环境中遇到系统崩溃或故障?当然,你们每个人迟早都会经历它。如果我们无法避免失败,那么解决方案似乎是将我们的系统维持在永久性故障状态。Chaos Monkey - 这个概念是Netflix发明的工具,用于测试其IT基础架构的弹性。几天前,我根据Netflix工具背后的想法找到了解决方案,该工具旨在测试Spring Boot应用程序。Codecentric已经实现了这样的库。到目前为止,我认为它们只是作为Spring Boot生态系统专用的其他有趣解决方案的作者 - Spring Boot Admin。我已经在之前的一篇文章中描述了这个库使用 Monitoring Microservices With Spring Boot Admin。 今天我将向您展示如何在Spring Boot应用程序中包含Codecentric的Chaos Monkey,然后在一些微服务示例系统中实现混沌工程。Chaos Monkey库可以与Spring Boot 2.0一起使用,它的当前发行版本是1.0.1。但是,我将使用2.0.0-SNAPSHOT版本实现示例,因为它具有此库的早期版本中不能用的一些新的有趣功能。为了能够下载Codecentric的Chaos Monkey库的SNAPSHOT版本,您必须记住包含Maven存储库https://oss.sonatype.org/content/repositories/snapshots到您的pom.xml存储库中。
1.为应用程序启用Chaos Monkey
为Spring Boot应用程序启用Chaos Monkey 有两个必需的步骤。首先,让我们将chaos-monkey-spring-boot库添加到项目的依赖项中。
de.codecentric
chaos-monkey-spring-boot
2.0.0-SNAPSHOT
然后,我们应该在应用程序启动时激活chaos-monkey文件。
$ java -jar target/order-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
2.样本系统架构
我们的示例系统由三个微服务组成,每个微服务都在两个实例中启动,还有一个服务发现服务器。微服务将自己注册到发现服务器,并通过HTTP API相互通信。Chaos Monkey库包含在所有正在运行的微服务的每个实例中,但不包含在发现服务器中。下面是用于说明示例系统架构的图表。
样本应用程序的源代码可以在GitHub的仓库 sample-spring-chaosmonkey中找到。克隆此存储库并使用mvn clean install命令构建它之后,您应该首先运行discovery-service。然后通过-Dserver.port使用适当的数字设置属性,在不同端口上运行每个微服务的两个实例。下面是我的一组运行命令。
$ java -jar target/discovery-service-1.0-SNAPSHOT.jar
$ java -jar target/order-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
$ java -jar -Dserver.port=9091 target/order-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
$ java -jar target/product-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
$ java -jar -Dserver.port=9092 target/product-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
$ java -jar target/customer-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
$ java -jar -Dserver.port=9093 target/customer-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
3.流程配置
在版本2.0.0-SNAPSHOT的chaos-monkey-spring-boot库中,C