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

news/2024/7/7 20:40:54 标签: 微服务, java, 面试

文章目录

  • 线程隔离
    • 一、滑动窗口算法
    • 二、漏桶算法
    • 三、令牌桶算法
  • 面试
    • 1、Sentinel 限流和Gateway限流的区别

线程隔离

两种实现方式
线程池隔离(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 默认限流方式为基于滑动窗口算法,中断路器基于滑动窗口
限流后可快速失败和排队等等待,其中排队等待是基于漏桶算法
热点参数限流则是基于令牌桶算法


http://www.niftyadmin.cn/n/5535286.html

相关文章

深度解析华为仓颉语言

什么是华为仓颉语言? 华为仓颉语言(Huawei Cangjie Language,HCL)是华为公司推出的一种新型编程语言,旨在解决大规模分布式系统开发中的复杂性问题。仓颉语言以高效、简洁和易用为设计目标,特别适用于云计…

6 矩阵相关案例

矩阵计算在CUDA中的应用是并行计算领域的典型场景 ; 矩阵算法题通常涉及线性代数的基础知识,以及对数据结构和算法的深入理解。解决这类问题时,掌握一些核心思想和技巧会非常有帮助。以下是一些常见的矩阵算法题解题思想: 动态规划…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中(不考虑缓存) 任何程序在运行之前都的加入到内存。 eip->pc指针,指明当前指令在什么位置。 代码大概率是从上往下执行的,基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

一文带你入门机器学习回归算法

专栏介绍 1.专栏面向零基础或基础较差的机器学习入门的读者朋友,旨在利用实际代码案例和通俗化文字说明,使读者朋友快速上手机器学习及其相关知识体系。 2.专栏内容上包括数据采集、数据读写、数据预处理、分类\回归\聚类算法、可视化等技术。 3.需要强调的是,专栏仅介绍主…

mongdb学习与使用

1. 基础概念 MongoDB简介: MongoDB是一个基于文档的NoSQL数据库,具有高性能、高可用性和易扩展性。数据存储在类似JSON的BSON格式中。 基本术语: Database(数据库): 集合的容器。Collection(集合…

Echarts折线+柱状图的多y轴

实现效果&#xff1a; 代码&#xff1a; <template><div class"test-echart"><div id"barLineChart" ref"barLineChart" :style"barLineStyle"></div></div> </template> <script> // imp…

Hutool构建树结构

引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version> </dependency>测试 SpringBootTest public class HutoolTest {private List<Menu> me…

VIM介绍

VIM&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的&#xff0c;后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名&#xff0c;是许…