1.微服务服务依赖的风险
在微服务架构中,系统被拆成了很多单元,各单元的应用间通过服务注册与订阅的方式互相依赖。依赖通过远程调用的方式来执行。
有可能因为网络原因或者依赖服务自身问题出现调用故障或延迟,而这些问题也会导致调用方的对外服务也出现延迟,此时若调用方的请求不断增加,最后会导致自身服务的瘫痪
2.断路器模式
断路器本身是一种开关装置,用于在电路上保护线路过载,当线路中有电路发生短路时,断路器能够及时切断故障电路,防止过载
分布式架构的断路器模式也是类似的作用,当某个服务单元发生故障后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待,及时的释放了调用方线程。这样就避免了故障在分布式系统中的蔓延。
2.Hystrix的使用
准备工作:
*
启动一个高可用的Eureka-server
* 创建一个服务应用,以对外提供接口服务
* 创建项目part-1-website项目充当客户端(以下几种方式都是在该项目中实现,注意:同样需要注册到eureka中) 具体可参考笔者另一篇文章 http://blog.csdn.net/qq_26323323/article/details/78652849
1)在website项目中添加Hystrix依赖
org.springframework.cloud
spring-cloud-starter-hystrix
2)在Application中添加@EnableHystrix
@EnableHystrix
@SpringBootApplication
@EnableEurekaClient
public class WebsiteApp {
}
3)创建Controller
@RestController
@RequestMapping("/hystrix")
public class TestHystrixController {
@Autowired
private 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使用情况,添加依赖如下
org.springframework.cloud
spring-cloud-starter-hystrix
org.springframework.cloud
spring-cloud-starter-hystrix-dashboard
注意:同样需要引入parent依赖,为spring-cloud-starter-parent Brixton.SR5版本
2)在Application上添加@EnableHystrixDashBoard,启动dashboard功能
@EnableHystrixDashboard
public 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 参数配置可参考此文