前些日子公司要求关键性服务达到99.95% 可用性。
然而高可用性很大程度上取决于你所依赖的服务,如果你依赖的服务只能做到99.95%,而你对服务的依赖处理的不好,那么即使你服务本身没有任何问题,最多也只能做到99.95的可用性;如果你依赖了N个服务,那你的可用性就是99.95的N次方。所以这个时候都要尽量做到即使你依赖的出了问题,你也可以用一些缓存或者降级的方法来尽可能的处理用户请求,而不至于完全无法响应。
我们这方面的做了很多考虑,但是一直没有全面的测试过我们依赖的服务真的出了问题,我们的方法会不会很好的生效。
搜了一些,下面的这个产品也许值得一试:https://github.com/codecentric/chaos-monkey-spring-boot
chaos-monkey-spring-boot可以通过AOP的方式在你的Service或者其他Component里面进行延迟、异常、Kill等攻击,这样你就可以测到在此类错误出现时你的程序的表现了。这个开源软件非常容易配置,可以参照下面的例子:
https://github.com/codecentric/chaos-monkey-spring-boot/tree/master/demo-apps/chaos-monkey-demo-app
目前它只能制定攻击Service、Component、Controller等大类,但是无法制定攻击某个Service或者某个Component。
大家如果有需求可以修改它的watcher类,比如修改de.codecentric.spring.boot.chaos.monkey.watcher.SpringServiceAspect,让它只攻击固定的Service。