服务容错的背景、方案及sentinel的流控和熔断

服务容错的背景

随着服务数量的增加,整个架构出现故障的概率提高了,所以服务容错的需求增加了。

在复的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败。高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。

1. 例如:一个依赖30个SOA服务的系统,每个服务99.99%可用。

2. 99.99%的30次方 ≈ 99.7% 0.3%不可用

3. 0.3% 意味着一亿次请求 会有 3,000,00次失败

4. 换算成时间大约每月有2个小时服务不稳定

5. 随着服务依赖数量的变多,服务不稳定的概率会成指数性提高

服务容错方案

  1. 超时:在调用方,一定时间内未得到响应则放弃请求;在异常时,确保资源的消耗有上限
  2. 限流:在提供方,限制进入系统的流量,确保在系统的负载范围内,保证系统能够正常运转
  3. 仓壁模式:资源隔离手段,在调用方使用线程池等方式,限制资源消耗在某个范围之内
  4. 熔断器: 在调用方,在系统上检测调用,如果发现了某个底层服务故障,则自动熔断,不再调用该服务,隔一段时间再次检测是否恢复,如果恢复则加入集群

 sentinel的流控和熔断

流控

资源名: 请求路径

针对来源: 来源系统

阈值类型:

  • QPS 每秒通过请求数
  • 线程数 处理请求所使用到的线程数量

单机阈值: 具体配置值

流控模式:

直接(默认):接口达到限流条件时,开启限流
关联:当关联的资源达到限流条件时,开启限流,适合做应用让步。例如为一个查询的接口添加关联流控,关联资源为一个更新的接口,当更新的接口达到阈值时,开启查询接口的限流,为更新接口让步服务器资源。

关联流控模式指的是,当指定接口关联的接口达到限流条件时,开启对指定接口开启限流。

配置限流规则

将流控模式设置为关联,关联资源设置为/doItT


链路:当从某个接口过来的资源达到限流条件时,开启限流

流控效果:

  • 快速失败:直接拒绝(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式。该方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。
  • warm up(预热):冷启动(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式。该方式主要用于系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮的情况。
    比如设置的阈值为100,预热时间10s,冷加载因子是3,那最初的阈值时100/3,逐步加大阈值,10s后达到100。阈值大小决定了流量大小,也就是逐步释放请求流量进入系统,让系统“冷启动”。
  • 排队等待:匀速器(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式。需要设置将阈值模式设置为QPS才能生效。这种方式严格控制了请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。

原文链接:https://blog.csdn.net/qq_31155349/article/details/108478190

熔断

  1. 熔断器默认关闭的
  2. 请求进入时,若失败低于开关阈值时保持关闭
  3. 达到开关阈值时,熔断器打开,熔断一个时间窗口(5s)
  4. 一个时间窗口过后,将会发一个探测请求,根据结果继续处理
    1. 若失败,则保持熔断器打开状态
    2. 若成功,则关闭熔断器

开关阈值:

  • 失败到达一定程度
  • 在一定的时间范围内失败一定次数熔断

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值