【关于服务熔断Hystrix】

服务熔断是什么?

服务熔断对应处理的现象是服务雪崩。当服务不可用或是响应时间过长,会进行服务降级,并对该节点进行熔断,后续检测到该节点微服务调用响应正常后,恢复链路的调用。
(其实服务熔断可以看作是服务降级的一种特殊操作)

服务雪崩是因为微服务架构中多服务中存在依赖关系,有时候因为网络关系,或者服务器原因造成服务不稳定,导致服务调用失败。这种服务故障会有A影响到B,再影响到C,像滚雪球一样,造成雪崩效应。

示例:

@HystrixCommand(fallbackMethod = "default_fallback_his",commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),//是否开启断路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),//时间窗口期
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),//失败率达到多少后跳闸
    })

快照时间窗为统计的时间窗口,为当前的最近10秒。

其中,default_fallback_his为自己定义的异常抛出方法

public String default_fallback_his(xxx默认参数xxx){
		return "xxxx";
		或者是
        throw new TimeoutException(ResponseCode.xxx定义错误码xxx);
    }

顺便说一下熔断和降级的区别

  • 触发原因不一样:服务熔断由链路上某个服务不可用引起的,服务降级是从整体的负载考虑
  • 管理目标层次不一样:服务熔断是一个框架层次的处理,服务降级是业务层次的处理
  • 实现方式不一样:服务熔断一般是自我熔断恢复,服务降级相当于人工控制

服务熔断是服务降级的一种特殊情况,他是防止服务雪崩而采取的措施。系统发生异常或者延迟或者流量太大,都会触发该服务的服务熔断措施,链路熔断,返回兜底方法。这是对局部的一种保险措施。

服务降级是对系统整体资源的合理分配。区分核心服务和非核心服务。在面对服务器压力激增时的一种全局性的考量,牺牲掉一些非核心的服务,使其不可访问或是延迟,保证核心服务的正常运行,实现对系统整体负荷进行管理。(常见大促活动)

总结

限流:限制并发的请求访问量,超过阈值则拒绝;

降级:服务分优先级,牺牲非核心服务(不可用),保证核心服务稳定;从整体负荷考虑;

熔断:依赖的下游服务故障触发熔断,避免引发本系统崩溃;系统自动执行和恢复

一些其他的实现方式

  1. hystrix接口实现
  2. 服务降级
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值