NetCore微服务 限流、降级、熔断基本概念

 

1.NetCore Web服务器介绍

.Net Core有俩种web服务

(1)Kestrel服务器是默认跨平台HTTP服务器实现。Kestrel提供了最佳性能和内存利用率,但它没有HTTP.Sys中的某些高级功能。

(2)HTTP.sys服务器仅用于Windows的HTTP服务器,它是基于HTTP.sys核心驱动程序HTTP服务器API

http大致处理流程NetCore微服务 限流、降级、熔断基本概念

 

因此,当有大批量的慢处理堆积在ThreadPool上时,后续所有的请求都会变慢,慢慢的导致整个站点不可用。(当有一个接口满时,会导致整个站点响应速度慢,并且会影响到整个站点不可用)

 

2.Web服务器质量(QoS)保障利器

简介

QoS的英文全称为"QUality of Service",中文名为"服务质量"。

QoS是网络安全的一种机制,是用来解决延迟和阻塞等问题的一种技术。

当网络过载或拥塞时,QoS能确保重要业务不受延迟或丢弃,同时保证网络高效运行。

当Web服务器请求过载或拥塞时,QoS能确保重要业务不受延迟或丢弃,所谓弃车保帅。

2.1降级

服务降级时当服务器压力剧增时,根据当前业务情况及流量对一些服务和页面有策略降级,以此释放服务器资源以保证核心任务的正常运行。

可以拒接服务,也可以延迟服务,也可以随机服务。

总体来讲,根据业务需求和服务器当前状况来采用不同的降级策略。

(1)自动降级

超时、失败次数、故障、限流

a.设置超时时间

b.不稳定的api调用次数达到一定数量进行降级

c.调用远程服务出现故障(dns、http服务错误状态码、网络故障、Rpc服务异常),直接降级

(2)人工降级

降级非要的任务

2.2限流

限流可以任务是服务降级的一种,限流就是限制系统的输入和输出流量以达到保护系统的目的。

一般来说系统的吞吐量(tps,qps)是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。

比如:延迟处理、拒绝处理、或者有部分拒绝处理等

2.3熔断

服务熔断是应对微服务雪崩效应的一种链路保护机制,类似股市、保险丝。

当下游服务因访问压力过大,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用,直接返回,快速释放资源。

如果目标服务情况好转则恢复调用。

熔断器三种状态:

(1)Close:熔断器最初是处于Close状态,所有请求会正常通过和执行,当检测错误到达一定阈值时,便转为Open状态

(2)Open:所有请求都会被拒绝,当到Reset time时便转为Half Open状态

(3)Half Open:尝试放行一部分请求到后端,一旦检测成功便回到Close状态

 

3.限流算法

限流常见的算法有四个:固定窗口计数器、滑动窗口计数器、漏桶算法、令牌桶算法

3.1固定窗口计数器算法

将某一个时间段当做固定窗口,在这个时间段每请求一次,计数器+1,当请求次数超过设定阈值时,

则将接下来的请求直接拒绝,不在往下走。当时间段结束后,计数器会被初始化,从0开始计算

NetCore微服务 限流、降级、熔断基本概念

固定窗口计数器限流算法无法保证限流速率,因而无法保证突然激增的流量

比如我们限制一个接口一分钟只能访问500次的话,在第15分钟前半分钟一个请求没有接收,

后半分钟接收了500个请求,第16分钟前半分钟接受到500个请求。

那么在15分钟后30秒和16分钟前30秒累计通过了1000个请求。有可能就会让服务器处理过载状态。

3.2滑动窗口计数器算法

滑动窗口计数器算法算是固定窗口计数器算法升级版。滑动窗口计数器算法把时间以一定比例分片。

例如我们的接口限流每分钟处理12个请求,我们把一分钟分为6个小窗口,

每6个相邻的小窗口请求数量之和不能超过12,超过第12个的请求被直接拒绝。

NetCore微服务 限流、降级、熔断基本概念

当滑动窗口划分的越多,限流处理越是平滑也越精确。但是当窗口设置的越多,占用内存也越大,也有可能会引发内存溢出

3.3漏桶算法

我们可以把接受请求的动作比作成注水到桶中,我们处理请求的过程可以比喻为漏桶漏水。

我们往桶中以任意速率流入水,以一定速率流出水。当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率。

NetCore微服务 限流、降级、熔断基本概念

漏桶算法能强行限制数据的传输速率。假如业务要求能够限制数据的平均传输速率外,

还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。

3.4令牌桶算法

令牌桶算法分为2个动作,动作1(固定速率往桶中存入令牌)、动作2(客户端如果想访问请求,先从桶中获取token)。

能获取到token的则可以继续往下执行,没有获取的则被拒绝。

令牌桶有一个初始值,桶内令牌初始数量。假如初始数量为500,每1分钟往桶放60个令牌。

它可以瞬间处理500个请求,接下来每分钟处理60个请求,超过60的则被拒绝。

NetCore微服务 限流、降级、熔断基本概念

 

4.总结

NetCore微服务 限流、降级、熔断基本概念

 

 

参考地址:https://github.com/DonetSchool/Core

                  https://www.bilibili.com/video/BV1t44y1r7U5?from=search&seid=2365333665537656204&spm_id_from=333.337.0.0

上一篇:.NetCore第一天


下一篇:个人年度总结-2021