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

文章目录

线程隔离

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

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

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

相关推荐
疯狂打码的少年2 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
Mr数据杨4 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
2601_962056234 小时前
Spring Boot 入门 与 无法解析符号 springframework 的解决
java·spring boot·后端
国医中兴4 小时前
电子病历的时序数据分析:ClickHouse在临床指标监控中的落地
微服务·云原生·容器·kubernetes·k8s
Thomas21435 小时前
Java scala 数组 链表
java·链表·scala
亚历克斯神5 小时前
低代码与 AI 的融合趋势——从可视化搭建到自然语言生成应用
java·spring·微服务
学长毕业设计5 小时前
基于SpringBoot的瑜伽馆网站的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
一嘴一个橘子5 小时前
nginx 常用命令(在 nginx 目录下执行)
java
leonkay5 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
harmful_sheep6 小时前
java group by常见用法
java·开发语言·python