微服务之服务保护策略【持续更新】

文章目录

线程隔离

两种实现方式
线程池隔离(Hystix隔离),每个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但隔离性更强;
信号量隔离(Sentinel隔离),不用创建线程池,性能较好,但隔离性一般。

服务保护算法

一、滑动窗口算法

固定窗口算法

1、其将时间划分为多个窗口,窗口时间跨度为Interval;

2、每个窗口分别计数统计,每有一次请求就将计数器+1,限流就是设置计数器阈值;

3、如果计数器超过限流阈值,则超过阈值的请求都被丢弃;

缺点:在特殊情况,在前一间隔中间 和 后一间隔中间,组成完整的间隔。

实现步骤

1、将窗口划分为n个更小的区间,窗口的时间跨度interval为1秒,区间数量n=2,则每个区间的时间跨度为500ms,每个区间都有计数器;

2、限流阈值依然是3,时间窗口内请求超过阈值时,超出的请求被限流;

3、窗口会根据当前请求所在时间currentTime移动,窗口范围从currentTime - interval 之后的第一个时区开始,到currentTime所在时区结束。

二、漏桶算法

实现步骤

1、将每个请求视做水滴放入漏桶进行存储;

2、漏桶以固定速率向外进行漏出请求执行,如果漏桶空了,则停止漏水;

3、如果漏桶满了,则将多余的水滴进行直接丢弃。

桶的容量取决与限流的QPS阈值和允许等待的最大超时时间。

三、令牌桶算法

实现步骤

1、以固定速率生成令牌,存入令牌桶中,如果令牌桶满了,则停止生成;

2、请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理;

3、如果令牌桶中没有令牌,则请求等待或丢弃

设置的令牌的速率不能设置为服务器处理的上限

适应场景:热点参数限流

面试题

1、Sentinel 限流和Gateway限流的区别

Gateway采用基于Redis实现的令牌桶算法
Sentinel 默认限流方式为基于滑动窗口算法,中断路器基于滑动窗口

限流后可快速失败和排队等等待,其中排队等待是基于漏桶算法

热点参数限流则是基于令牌桶算法

相关推荐
没有bug.的程序员8 分钟前
JVM 运行时数据区详解:内存模型与对象生命周期全景解析
java·jvm·运行时数据区·内存模型·对象生命周期
一语长情24 分钟前
Netty流量整形:保障微服务通信稳定性的关键策略
java·后端·架构
Dignity_呱1 小时前
如何在不发版时,实现小程序的 AB 测试?
前端·面试·微信小程序
盖世英雄酱581361 小时前
第一个RAG项目遇到的问题
java·spring boot
最初的↘那颗心1 小时前
Flink Stream API - 源码开发需求描述
java·大数据·hadoop·flink·实时计算
华仔啊1 小时前
别学23种了!Java项目中最常用的6个设计模式,附案例
java·后端·设计模式
在路上`1 小时前
前端学习之后端小白java的一些理论知识(框架)
java·学习
练习时长两年半的Java练习生(升级中)2 小时前
从0开始学习Java+AI知识点总结-18.web基础知识(Java操作数据库)
java·学习·web
计算机程序员小杨2 小时前
计算机专业的你懂的:大数据毕设就选贵州茅台股票分析系统准没错|计算机毕业设计|数据可视化|数据分析
java·大数据
y1y1z2 小时前
EasyExcel篇
java·excel