微服务容错限流Hystrix架构和实践

微服务容错限流Hystrix架构和实践

1、容错限流的需求

  • 微服务化后,存在多个服务,若果其中某一个服务响应很慢,阻塞了所有的请求,导致系统雪崩

2、基本的容错模式

  • 超时
  • 限流:限制最大并发数
  • 熔断:错误达到阈值时,类似保险丝熔断
  • 隔离:隔离不同的依赖调用
  • 降级:服务降级(大量用户请求进入时候,优先保证vip用户请求)

3、Hystrix设计原理(自适应反馈机制)

在这里插入图片描述

  • 依赖的调用使用了Hystrix后,首先会被封装在一个HystrixCommond的类里。

  • execute同步执行方式,queue一步执行方式,最新的版本支持响应式执行。

  • circult open开关不通,不同的时候判断是否存在降级函数,没有降级函数直接抛出异常

    有降级函数就执行,存在执行成功(返回降级响应),执行失败抛出异常

  • circult open开关通,如果用的是线程隔离,去判断线程池是否满,如果满了是走降级流程

  • 线程池如果没满,就真正的执行run方法,调用封装方法,超时或执行失败也是走降级流程,

    如果成功响应,就是report Metrics,就是把执行情况做一个记录

  • Metrics会把成功或失败的情况报告给Health组件,health组件相当于一个脑袋,他会计算Hystrix的执行情况,用来判定开关是打开还是闭合

4、断路器内核设计

在这里插入图片描述

  • 基于滚筒式的统计方式,每一秒产生一个桶,每个桶里记录相关的Metrics的成功或失败,

    没过一秒产生一个通,前面的桶丢弃,所有的计算都是基于这10个桶

  • 当HystricsCommond请求过来的时候,首先判断是否允许请求通过,允许通过的话就直接执行

  • 不允许通过的时候,会判断sleep time passed(睡眠周期)是否已过,熔断之后会有一个睡眠周期,如果没过睡眠周期,拒绝访问,如果过会放一个请求过来尝试,试通了电路就会打开

  • 判断是否打开时,计算失败数/(成功数+失败数),大于设定的错误阈值时,会触发熔断(根据10个桶的值计算)

5、Hystrix的主要概念

  • HystrixCommond

在这里插入图片描述

业务逻辑实现要集成HystrixCommond基类,业务逻辑写在run方法里

  • Fail fast 快速失败:run方法里直接抛异常

在这里插入图片描述

  • Fail silent 安静失败:getFailBack降级函数里,放回一个null或空值

    在这里插入图片描述

  • Static fallback:也是降级函数返回一个缺省值,true或缺省对象
    在这里插入图片描述

  • fallback via network 通过防落进行降级,主服务失败了,降价方法里调用一个辅助服务,通过缓存之类的

在这里插入图片描述

  • primary+secondary with fall back(主次降级机制)

在这里插入图片描述
就是一个功能有一个老版本,一个新版本,都放在开关后边,用那个开那个

6、Hystrix请求合并

  • 很多小请求过来的时候,会做一个请求Batch合并,例如把 10毫秒的请求合并打包发给服务器,

    响应成功后拆解响应给用户

7、Hystirx请求缓存

8、Hystrix隔离机制

8.1、线程隔离
  • 为每个调用的服务建立单独的线程池,每次调用都发生在单独的线程里,通过线程池里的线程去调用服务,线程池里可以设置线程数量,比如设置10个线程,线程数量消耗光了,就不能再调用了
8.2、信号量隔离
  • 信号量隔离,简单来讲就是一个计数器,比如设置为10个信号量,进来一个请求会消耗一个信号量,请求结束将信号量还回去,10的信号量消耗完了,就不能再请求了
8.3 信号量隔离 vs 线程隔离
  • 信号量隔离

    优点:轻量,无额外开销

    不足: 不支持任务排队和主动超时,不支持一步调用

    适用:守信客户(自己开发的服务)、高扇出(网关上使用)、高频高速调用(调用缓存cache)

  • 线程隔离

    优点:支持排队和超时,支持异步调用

    不足:线程调用会产生额外的开销

    使用:不受信的客户、有限的扇出

9、Hystrix主要配置项

在这里插入图片描述
maxQueueSize:为 -1的时候表示是同步队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值