Hystrix服务容错保护使用明细

来源:互联网 发布:李化宇李化雷炫踪网络 编辑:程序博客网 时间:2024/05/17 07:18
1.微服务服务依赖的风险

    在微服务架构中,系统被拆成了很多单元,各单元的应用间通过服务注册与订阅的方式互相依赖。依赖通过远程调用的方式来执行。
    有可能因为网络原因或者依赖服务自身问题出现调用故障或延迟,而这些问题也会导致调用方的对外服务也出现延迟,此时若调用方的请求不断增加,最后会导致自身服务的瘫痪

2.断路器模式

    断路器本身是一种开关装置,用于在电路上保护线路过载,当线路中有电路发生短路时,断路器能够及时切断故障电路,防止过载
    分布式架构的断路器模式也是类似的作用,当某个服务单元发生故障后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待,及时的释放了调用方线程。这样就避免了故障在分布式系统中的蔓延。


2.Hystrix的使用

    准备工作:
    * 启动一个高可用的Eureka-server
    * 创建一个服务应用,以对外提供接口服务
    * 创建项目part-1-website项目充当客户端(以下几种方式都是在该项目中实现,注意:同样需要注册到eureka中
    具体可参考笔者另一篇文章 http://blog.csdn.net/qq_26323323/article/details/78652849  

    1)在website项目中添加Hystrix依赖
<!-- spring-cloud-starter-hystrix --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-hystrix</artifactId></dependency>
    2)在Application中添加@EnableHystrix
@EnableHystrix@SpringBootApplication@EnableEurekaClientpublic class WebsiteApp {}
    3)创建Controller
@RestController@RequestMapping("/hystrix")public class TestHystrixController {@Autowiredprivate RestTemplate restTemplate;@Value("${part-1-sms}")private String part1sms;@RequestMapping("/test")@HystrixCommand(fallbackMethod="errorTest",commandKey="testKey",threadPoolProperties={@HystrixProperty(name="coreSize",value="20"),//命令执行最大并发数@HystrixProperty(name="maxQueueSize",value="50"),//线程池最大队列大小@HystrixProperty(name="queueSizeRejectionThreshold",value="30")//为队列设置拒绝阈值})public String testSms(){return restTemplate.getForObject("http://"+ part1sms +"/sms/test", String.class);}public String errorTest(){return "call test method error!";}}

    注意:
        * RestTemplate即使用了@LoadBalanced的
        * part1sms即提供服务的项目名称
        * 在调用sms服务的方法testSms上添加@HystrixCommand注解,要明确定义fallbackMethod方法,(注意:errorTest和testSms方法的参数和返回值类型要保持一致)
        * 一系列的HystrixProperties可参考其他文章自定义

    4)验证 启动sms服务时,每次都会正确返回,当关闭sms服务时,不会报其他异常或一直等待,而是报errorTest方法的返回信息

3.Hystrix仪表盘

    仪表盘以UI的方式展示关于请求命令的指标度量。
    SpringCloud亦完美整合了Hystrix仪表盘

    使用方式如下:
    1)创建一个新项目hystrix-dashboard,用于监控其他项目的hystrix使用情况,添加依赖如下
<!-- spring-cloud-starter-hystrix --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-hystrix</artifactId></dependency><!-- spring-cloud-starter-hystrix --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId></dependency>
    注意:同样需要引入parent依赖,为spring-cloud-starter-parent Brixton.SR5版本

    2)在Application上添加@EnableHystrixDashBoard,启动dashboard功能
@EnableHystrixDashboardpublic class WebsiteApp {}
    3)设置server.port=8080,用于访问该项目
    4)启动该项目,并访问http://localhost:8080/hystrix,可看到页面如下

    5)在输入框里添加需要进行监控的IP及host
        注意:
        * 可添加集群监控,此时需要整合Turbine
        * 也可添加单个应用监控,被监控的项目需要添加hystrix依赖,在相关方法上需要添加@HystrixCommand

    6)点击Monitor Stream,可看到以下界面
    注意:以上图片是笔者连续访问被监控项目的某个接口时形成的效果图
    效果图简介:实心圆和曲线是最重要的图形信息
    * 实心圆:通过颜色的变化代表了示例的健康程度,健康度从绿色、黄色、橙色、红色递减;实心圆越大,代表请求流量越大
    * 曲线图:用来记录2分钟内流量的相对变化
    * 其他信息



参考: Spring Cloud微服务实战
      http://blog.csdn.net/harris135/article/details/77879148?locationNum=3&fps=1 参数配置可参考此文 


阅读全文
0 0
原创粉丝点击