首先了解一下分布式系统最常见的面临的问题:
介绍:(现在好像已经停止更新了)
hystrix可以用来做什么?
服务降级,服务熔断,接近实时的监控
服务降级:
现象:服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好提示,fallback
哪些情况会发出降级:程序运行异常,超时,服务熔断触发服务降级,线程池/信号量也会导致服务降级
服务熔断:
现象:类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示
就是保险丝,流程是:服务的降级->进而熔断->恢复调用链路
服务限流:秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行
服务降级:
怎么使用?:
1.在使用的方法上加上@HystrixCommand注解即可,一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbckMethod调用类中的指定方法
2.记得在主启动类中激活@EnableCircuitBreaker
如果是在消费端使用也是需要引入pom和修改yml的
pom:
<!--hystrix--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
yml:
server: port: 80 eureka: client: register-with-eureka: false fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka feign: hystrix: enabled: true
主启动类:@Enablehystrix
目前问题:
- 每个业务方法对应一个兜底的方法,代码膨胀.
- 统一和自定义的分开
解决办法:
每一个方法配置一个? 如果有多个就出现膨胀
服务熔断
断路器:一句话就是家里的保险丝
熔断是什么?
熔断的三种类型:
- 熔断打开:请求不再调用当前服务,内部设置一般为MTTR(平均故障处理时间),当打开长达导所设时钟则进入半熔断状态
- 熔断关闭: 熔断关闭后不会对服务进行熔断
- 熔断半开 :部分请求根据规则调用当前服务,如果请求成功且符合规则则认为当前服务恢复正常,关闭熔断
断路器打开之后:
服务监控 hystrixDashboard