什么是Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,不可避免的会产生调用失败,比如调用超时,异常等,Hystrix能够保证在一个以来出问题的情况下,整个服务不会失败,避免级联故障以提高分布式系统的弹性
**断路器:**本身是一种开关装置,当某个服务单元发生故障后,通过断路器的故障监控,像被调用方返回一个可预期的,可处理的备选选项,而不是长时间等待或者处理无法处理的异常这样就保证了服务不会因为一点问题而出现了服务雪崩
主要能做什么
服务降级 fallback
服务熔断 break
接近实时的监控
服务限流等 flowlimit
新建一个服务,并添加依赖
编写启动类
编写service层,一个成功的方法,一个失败的方法
编写controller层
访问测试一下有没有错误:
用jmeter进行压力测试。20000个并发,发现ok原本是瞬间成功的变成了需要加载了
使用feign调用,新建order80
创建controller并调用
启动并调用测试功能
启动jmeter测试,发现也开始转圈了
解决方案:
服务降级:
1 超时导致
修改等待时间,3秒改为5秒
编写一个响应时间过长的备用方法@HystrixCommand
设置属性:这个线程是3秒钟
主启动类加上
能看到已经实现了服务降级,用到了备用的方法
原先的办法已经超时了
超时试过了试一试报错:
也是直接调用的备用的方法
修改一下配置
启动访问
修改调用端80的yml
在controller层也添加一个备用的容错方法
启动运行发现超过1.5秒,也进入了容错的方法
编写一个错误测试
启动运行:也是进入了容错方法
编写一个全局的fallback
在类头上添加@DefultProperties并指定方法
再添加对应的方法
取消指定的容错方法,编写标签
添加这个标签就是表明这个方法需要服务降级,没有特别指明就是默认的配置的全局降级的方法
启动运行测试
测试客服端去调用服务端,然后服务端宕机或者关闭了
添加容错方法的类
新建该类并继承PaymentHystrixService,当出错时就会找到容错类的相关方法:
启动服务:
关闭端口8001的服务
再次访问,能看到虽然服务是断开了,但是有容错方法,所以已经访问到容错的方法了
2 服务熔断
应该雪崩效应的一种微服务链路保护机制,当扇出链路不可用或者响应时间过长时,会进行服务的降级,进而熔断该节点的调用,快速返回错误的响应信息,当检测该节点微服务调用响应正常时,恢复调用链路。
修改
修改PaymentService
在controller层调用
然后启动运行测试
先测试正确的:
再测试一个错误的:
然后狂点负数错误的,启动断路器
在狂点之后启动了断路器,再输入正确的id就是还是错误的,等一段时间再访问
等了一段时间后访问,发现又能成功了
服务监控:dashboard:监控界面的图形化展示:
新建一个服务。9001,添加pom:
编写主启动类,并编写注解:
忘了说了,想要监控都必须依赖以下注解(监控和被监控都需要):
启动9001:看到了豪猪哥就监控程序搭建成功了
修改8001:
并添加方框里的配置。不然会报404,查了网上说是springcloud升级留下的坑
启动8001进行测试:
测试:狂点几次
左上角的圈很大28,Cricuit是绿色的
不点了过去左上角的圈就慢慢消失了
点错误的访问,63%超过了我当初设置熔断的60%,熔断器启动,并且Ciruit是红色的了