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

文章目录

线程隔离

两种实现方式
线程池隔离(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 默认限流方式为基于滑动窗口算法,中断路器基于滑动窗口

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

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

相关推荐
一人の梅雨8 分钟前
化工网平台API接口开发实战:从接入到数据解析‌
java·开发语言·数据库
扫地的小何尚12 分钟前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu
Niuguangshuo22 分钟前
Python设计模式:克隆模式
java·开发语言·python
suimeng61 小时前
基本元素定位(findElement方法)
java·selenium
方渐鸿1 小时前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮1 小时前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试
uhakadotcom1 小时前
OpenAI 的 PaperBench:AI 研究复现基准测试工具
算法·面试·github
我要学编程(ಥ_ಥ)1 小时前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus
有来技术1 小时前
从0到1手撸企业级权限系统:基于 youlai-boot(开源) + Java17 + Spring Boot 3 完整实战
java·spring boot·后端
皮卡兔子屋1 小时前
java虚拟机---JVM
java·jvm