ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-08 20:37:05  阅读:227  来源: 互联网

标签:降级 请求 NetCore 计数器 算法 熔断 服务器 限流


 

1.NetCore Web服务器介绍

.Net Core有俩种web服务

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

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

http大致处理流程

 

因此,当有大批量的慢处理堆积在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开始计算

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

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

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

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

3.2滑动窗口计数器算法

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

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

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

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

3.3漏桶算法

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

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

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

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

3.4令牌桶算法

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

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

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

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

 

4.总结

 

 

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

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

标签:降级,请求,NetCore,计数器,算法,熔断,服务器,限流
来源: https://www.cnblogs.com/pengboke/p/15769129.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有