在微服务架构中,各个服务互相调用,底层的基础服务会被多个上层服务调用,这时如果底层服务出现故障,调用他的其他上层服务也会同时出现问题,最终导致整个系统的崩溃。这个逻辑其实和同步阻塞很类似,为了应对这个问题,Spring Cloud提供了Hystrix断路器,他可以指定服务的回退方法,当服务不可用时,他会调用回退方法,不至于使整个服务阻塞。
Hystrix入门:
Hystrix主要有以下作用:
1.在HystrixCommand 或者HystrixObservableCommand中对请求进行包裹,使其与外部隔离
2.对于每一个依赖维护一个小型的线程池,如果线程池满,对于该依赖的请求将会被立即拒绝,减少等待时间
3.对于请求的监控,包括成功、失败、耗时等
4.当服务错误率超过一定百分比时,手动或自动的在一段时间内停止对该服务的请求。
5.当服务失败时自定义回退逻辑。
6.实时监控配置的改变
使用Hystrix很简单,只需要俩个注解,一个是表示该方法需要被包裹的注解@HystrixCommond,我们可以指定被注解方法的回退方法,他表明当请求该方法失败时将会调用fallbackMethod方法。第二个是@EnableCircuitBreaker,标注于启动类上,表明开启Hystrix功能。
让我们编写代码进行测试
如图,我们指定defaultQuery为回退方法,意味着当item-service服务不可用,或者方法出现异常时,会调用defaultQuery作为返回结果,这里需要注意的一点是,回退方法的参数要与原来的方法相同。这里我们使用除0模拟出现异常的情况,通过前台调用,我们可以看到控制台做如下打印
表明我们的回退方法生效。@HystrixCommond注解中可以进行线程池参数、忽略异常等配置。
Dashboard搭建
从运维的角度,我们需要知道我们部署的服务的健康程度,当发现服务一段时间内大量请求失败,我们需要排查原因并进行替换,Spring-Cloud提供了Dashboard作为作为监控系统。
我们新建一个应用,要使用Dashboard,我们首先需要导入dashboard的依赖,然后在启动类上使用@EnableHystrixDashboard表明开启监控功能。
按照上面的配置启动成功后,我们进入http://localhost:8080/hystrix/,并在页面输入框中输入http://localhost:6865/hystrix.stream,表明对6865的服务消费方进行监控,点击monitor stream,即可进入监控面板
我们可以从上面看到详细的健康信息。100%是由于上面我们调用编写的测试Hystrix方法所致。具体面板中的参数代表什么意思,这里图方便就盗用网上的图片了。。。
这样一个基本的单体监控系统就搭建起来了。
Turbine搭建
在生产中,一个服务可能部署多份,Dashboard一次只能对单台应用进行监控,我们需要使用Turbin将多个Dashboard信息合并在一个面板供我们查看。
新建一个项目,导入turbine的依赖,按照官方文档进行配置
然后在启动类中开启turbine功能,好了,这样turbine就搭建好了,启动项目并启动俩个order-service消费方同于测试。这时我们访问之前启动的Dashboard项目,在输入框中输入http://localhost:6860/turbine.stream即可进入监控面板。
与之前的Dashboard面板信息对比,我们注意到他的hosts已经变成了2,即说明已经成功监控了俩个服务。
网友评论