服务如何做熔断,降级,限流?

本文介绍了服务降级、熔断和限流的基础概念,以及在实际应用中如何实施。服务降级是面对高负荷时确保核心功能的策略,而熔断则是在依赖服务故障时断开连接。Hystrix提供了线程隔离和信号量隔离的资源隔离方法。限流通过内部平台Rhino来实现。文章还提及了Alibaba Sentinel作为Hystrix的替代品。
摘要由CSDN通过智能技术生成

基础概念

降级(自身服务出现问题,降级)

降级也就是服务降级,当服务器压力剧增为了保证核心功能的可用性 ,而选择性的降低一些功能的可用性,或者直接关闭该功能。这就是典型的丢车保帅了。

服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。

一般而言都会建立一个独立的降级系统,可以灵活且批量的配置服务器的降级功能。当然也有用代码自动降级的,例如接口超时降级、失败重试多次降级等。具体失败几次,超时设置多久,由你们的业务等其他因素决定。开个小会,定个值,扔线上去看看情况。根据情况再调优。

熔断(依赖的外部接口出现故障的情况时,断绝和外部接口的关系)

在这里插入图片描述
那什么时候熔断合适呢?也就是到达哪个阈值进行熔断,5分钟内50%的请求都超过1秒?还是啥?参考降级。

限流

即限制流量。

我们是如何做的?

降级

  • 标记,灰度规则不执行
  • 指定规则,场景不执行/严格限制执行时间
  • 缓存不刷新
  • 不发日志 / 不记录 info 日志
  • 不重要业务方流量直接返回

熔断

  • 从用户层面来看,实现路径是:由用户针对 场景-规则 配置熔断规则,比如:最近10分钟命中量 >= 1000时,将规则由生效状态转为标记状态等等

后端服务是通过 Hystrix 做的熔断与降级

在这里插入图片描述

降级函数

在这里插入图片描述

  • fail fast :快速失败,直接在run方法中抛异常。
  • fail silent:安静失败,返回 null,空列表等等操作。
    在这里插入图片描述
  • static fallback :返回缺省值,或者是默认值。在这里插入图片描述

资源隔离:线程隔离,信号量隔离

● 线程隔离: Hystrix 会给每一 个 Command 分配一个单独的线程池, 这样在进行单个服务调用的时候,就可以在独立的线程池里面进行,而不会对其他线程池造成影响。
● 信号量隔离:客户端需向依赖服务发起请求时,首先要获取一个信号量才能真正发起调用,由于信号量的数量有限,当并发请求量超过信号量个数时,后续的请求都会直接拒绝,进入falback流程。信号量隔离主要是通过控制并发请求量,防止请求线程大面积阻塞,从而达到限流和防止雪崩的目的。
在这里插入图片描述

限流

通过内部平台 Rhino 做的限流。

Hystrix替代品之 Alibaba Sentinel 简介

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值