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

文章目录

线程隔离

两种实现方式
线程池隔离(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 分钟前
用Java实现单词搜索(LeetCode 79)——回溯算法详解
java·算法·leetcode
越来越无动于衷24 分钟前
手写tomcat:基本功能实现(3)
java·tomcat
Uranus^27 分钟前
使用Spring Boot和Spring Security构建安全的RESTful API
java·spring boot·spring security·jwt·restful api
qq_5432485228 分钟前
Tomcat的调优
java·tomcat
Mcworld85734 分钟前
String的一些固定程序函数
java
越来越无动于衷34 分钟前
手写tomcat:基本功能实现(4)
java·tomcat
编程乐学(Arfan开发工程师)35 分钟前
05、基础入门-SpringBoot-HelloWorld
java·spring boot·后端
小智学长 | 嵌入式36 分钟前
进阶-数据结构部分:2、常用排序算法
java·数据结构·算法
保利九里1 小时前
java中的包机制
java·开发语言
努力学习的明1 小时前
Spring MVC 中请求处理流程及核心组件解析
java·spring·mvc