服务雪崩对应策略

什么是服务雪崩:分布式系统中经常会出现某个基础服务不可用造成整个系统不可用,这种现象称为服务雪崩

断路器(Hystrix)的出现就是为了解决服务雪崩

服务雪崩对应策略:

1、流量控制:网关限流、用户交互限流、关闭重试

2、改进缓存模式

3、服务自动扩容

4、服务调用者降级服务

服务雪崩的原因:

1、机器故障:机器的硬驱动引起的错误

2、服务器负载均衡发生变化:用户请求量,如阿里的双十一活动,若没有提前增加机器预估流量则会造服务器压力会骤然增大而挂掉

3、程序错误:项目中某段代码有bug

解决或缓解服务雪崩:

1、熔断模式:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

2、隔离模式:这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心

3、限流模式:上述的熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应

熔断设计:

在熔断设计中主要参考hystrix的做法

1、熔断请求判断机制算法:使用无锁循环队列计数,每个熔断器默认维护10个bucket,每1秒一个bucket,每个bucket记录请求的成功、失败、超时、拒绝的状态,默认错误超过50%且10秒内超过20个请求进行终端拦截

2、熔断恢复:对于被熔断的请求,每隔5秒允许部分请求通过,弱请求都是健康的则对请求健康恢复

3、熔断报警:对于熔断的请求打印日志,异常请求超过某些设定则报警

隔离设计:

1、线程池隔离模式:使用一个线程池来存储当前的请求,线程池对请求作处理、设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可将数据存储到线程池队里慢慢处理)

2、信号量隔离模式:使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,请求来先判断计数器的数值,若超过最大的线程个数则丢弃改类型的新请求,若不超过则执行计数操作请求来计数+1,请求返回计数器-1,这种方式是严格的控制且立即返回模式,无法应对突发流量(流量洪峰来临时,处理的线程超过数量,其它的请求直接返回,不继续去请求依赖的服务)

超时机制: 

等待超时:在任务入队列时设置任务入队列时间,并判断队头的任务入队列时间是否大于超时时间,超过则丢弃任务

运行超时:直接可使用线程池提供的get方法

服务降级:

所谓的降级指的是当服务的提供方不可使用的时候,程序不会出现异常,而会出现调用本地的操作

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值