微服务之流控、容错组件sentinel

news2024/11/20 7:05:12

背景

2012年阿里巴巴研发的流量治理组件,核心功能流控、容错

有什么功能

流量控制

流量控制
网关控制
黑白名单

熔断降级

熔断

保护分布式系统防止因为调用下有服务时产生故障或者请求超时等异常影响上游服务,使用熔断方案,类似断路器,一旦达到异常或超时规则阈值,则会断开链接,一定时间后重新连接

降级

分布式服务中,当负载过多或者资源不足时,防止大量请求累积消耗资源,拖垮核心服务,当触发降级规则(一般是超过设置的资源负载),则会抛弃边缘服务的调用,节省资源。

实现原理—职责链模式(做什么)

职责链模式简介

请求沿着处理者链进行发送,每个处理者都可以对请求进行处理,或者将台传递给恋上的下一个 处理者

在这里插入图片描述

特点

每个处理者都可以处理请求
每个处理者都必须有下一个处理者的引用

优点

  • 解耦:请求的发送者和处理者解耦
  • 简化:简化对象,对象可以不知道链的结构
  • 灵活:增加给对象指派指责的灵活性,可改变链的顺序,动态新增或删除

缺点

可能循环调用
可能链路太长,影响排错

场景

  • 有多个对象可以处理同一个请求,运行时刻决定那个对象处理请求。
  • 可动态指定一组对象处理请求。

sentinel框架

在这里插入图片描述

核心原理

Sentinel 中最核心的功能都是通过一套处理链(责任链)来实现,处理链中的每一个处理单元被称为一个 Slot。每个 Slot 执行完业务逻辑处理后,都会触发下一个节点的处理方法,如此往复直到最后一个Slot,由此就形成了sentinel的责任链。这里我们先简单地回顾一下各个 Slot 的职责:

  • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
  • ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
  • StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息;
  • FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
  • AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
  • DegradeSlot 则通过统计信息以及预设的规则,来做熔断降级;
  • SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;

特点

应用场景丰富

经历阿里巴巴十年双十一场景考验

丰富的开源生态

在这里插入图片描述

实时监控

类似组件

  • Hystrix(Netflix Hystrix): Hystrix是Netflix开源的一种用于容错和故障处理的库。它提供了类似的功能,包括熔断、限流、降级和故障处理。Hystrix已经停止维护,但仍然广泛使用。
  • Resilience4j: Resilience4j是一种用于容错和故障处理的Java库,具有类似于Hystrix的功能,但更加轻量级和模块化。它支持熔断、限流、重试等功能。
  • Circuit: Circuit是Go语言中的一个库,用于实现断路器模式。它提供了熔断、限流和故障处理功能,适用于构建可靠的分布式系统。
  • Prometheus: Prometheus是一种开源的监控和警报工具,用于监视应用程序的性能和状态。它可以帮助您收集和分析指标,并设置警报规则以便在问题发生时采取行动。
  • Istio: Istio是一个用于微服务的服务网格平台,它提供了流量控制、故障注入、监控和安全性等功能。Istio的Envoy代理可以用于流量控制和故障处理。
  • Zuul(Netflix Zuul): Zuul是Netflix开源的API网关,它可以用于路由、流量控制和故障处理。虽然主要用于API网关,但也可以用于一些类似的用例。

总结

sentinel 是流量整形,提升服务容错能力的组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市内涝监测预警系统:有效降低内涝风险,保障城市安全

近日,受台风“海葵”的影响,福建广东多地遭遇了持续性强降雨的袭击,道路积水严重,“城市看海”模式再次开启,不少网友纷纷调侃房子已经升级为海景房。近年来受极端天气影响,城市内涝灾害越发凸显&#xff0…

vscode 画流程图

文章目录 1、安装插件 draw2、新建文件3、开始画图4、另存为图片 vscode可以画流程图了,只需要安装插件就可以了。 1、安装插件 draw 2、新建文件 3、开始画图 4、另存为图片

小程序中如何查看会员的等级及变更记录

会员等级变更记录是了解用户购买行为和消费习惯的重要依据。下面就将介绍如何怎么查看会员的等级以及等级变更记录。 1. 找到指定的会员卡。在管理员后台->会员管理处,找到需要查看等级和记录的会员卡。也支持对会员卡按卡号、手机号和等级进行搜索。在这个页面…

后端太卷,我不玩了!

作者:阿秀 InterviewGuide大厂面试真题网站:https://top.interviewguide.cn 这是阿秀的第「303」篇原创 小伙伴们大家好,我是阿秀。 校招岗位形势是一直在变化的,并不是一成不变的,从18、19、20年这三年里的算法岗大热…

1-2 AUTOSAR规范文档

目录 一、AUTOSAR文档下载 二、AUTOSAR文档分类 三、软件设计规范文档解读(SWS) 一、AUTOSAR文档下载 AUTOSAR规范文档下载可以到AUTOSAR官网(Home AUTOSAR)进行下载。 下载操作如下图所示: 二、AUTOSAR文档分类 AU…

golang面试题:json包变量不加tag会怎么样?

问题 json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段? 怎么答 如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。 不加tag&#xff0c…

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

文章目录 1. C11简介2. 统一的列表初始化2.1 {}初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype 4. nullptr5. 范围for循环6. 智能指针7. C11STL中的一些变化8. 演示代码 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…

Kotlin面向对象基础使用方法(继承、接口、Lambda、空指针检查机制等)

三、面向对象 1、继承 1.1 open改变类的继承属性 在kotlin设计时默认所有的非抽象类是无法被继承的,如果想要使得一个非抽象类可以被继承,我们需要使用open关键字。 open class Person {var name "";var age 0;fun eat() {println(name …

入门人工智能 ——自然语言处理介绍,并使用 Python 进行文本情感分析(5)

入门人工智能 ——自然语言处理介绍,并使用 Python 进行文本情感分析(5)) 入门人工智能 ——自然语言处理介绍,并使用 Python 进行文本情感分析介绍自然语言处理的挑战NLP的基本任务NLP的基本技术NLP的应用领域 使用 P…

RHCSA Linux环境搭建

目录 一、安装Linux操作系统 二、创建虚拟机 1、成功激活后,开始“创建新的虚拟机” 新建虚拟机 2、自定义--根据我们的需求来创建 3、默认即可 4、选择稍后安装操作系统(可自定义设置某些选项) 5、选择Linux操作系统,版本…

Linux dup dup2函数

/*#include <unistd.h>int dup2(int oldfd, int newfd);作用&#xff1a;重定向文件描述符oldfd 指向 a.txt, newfd 指向b.txt,调用函数之后&#xff0c;newfd和b.txt close&#xff0c;newfd指向a.txtoldfd必须是一个有效的文件描述符 */ #include <unistd.h> #i…

Fourier傅里叶变换的线性性质和位移性质

Fourier傅里叶变换的线性性质和位移性质 为了阐述方便, 假定在这些性质中, 凡是需要求Fourier变换的函数都满足Fourier积分定理中的条件。在证明这些性质时, 不再重述这些条件。 一、线性性质 设 F 1 ( ω ) F [ f 1 ( t ) ] {F_1}(\omega ) {\mathscr F}[{f_1}(t)] F1​(…

2023/9/11 -- C++/QT

作业 仿照string类&#xff0c;完成myString 类 02mystring.h: #ifndef __02MYSTRING_H__ #define __02MYSTRING_H__#include <iostream> #include <cstring>using namespace std;class myString{ private:char *str;int size; public://无参构造myString();//有…

C++算法 —— 动态规划(5) 子序列

文章目录 1、动规思路简介2、最长递增子序列3、摆动序列4、最长递增子序列的个数5、最长数对链6、最长定差子序列7、最长斐波那契子序列的长度8、最长等差数列9、等差数列划分 II 每一种算法都最好看完第一篇再去找要看的博客&#xff0c;因为这样会帮你梳理好思路&#xff0c;…

Python 图形化界面基础篇:添加标签( Label )到 Tkinter 窗口

Python 图形化界面基础篇&#xff1a;添加标签&#xff08; Label &#xff09;到 Tkinter 窗口 引言什么是 Tkinter 标签&#xff08; Label &#xff09;&#xff1f;步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建标签&#x…

kafka管理工具之kafka-ui的环境搭建笔记

由于项目需要kafka支持认证功能&#xff0c;就把kafka升级到3.2.0了。之前一直使用的kafka tools(现在叫Offset Explorer&#xff0c;个人使用免费&#xff0c;商用付费)&#xff0c;开了认证之后就不好用了&#xff0c;卡的很&#xff0c;一点也不丝滑了&#xff0c;于是只好重…

pytorch代码实现之Partial Convolution (PConv卷积)

Partial Convolution (PConv卷积) Partial Convolution (PConv卷积)&#xff0c;有助于提升模型对小目标检测的性能。目前许多研究都集中在减少浮点运算&#xff08;FLOPs&#xff09;的数量上。然而FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运…

浅析建筑电气火灾问题和预防方案

安科瑞 华楠 摘要&#xff1a;近几年来随着技术化和信息化的不断发展&#xff0c;电器在建筑中的应用也是越来越广泛&#xff0c;电气也成为人们生活当中的一部分。现如今建筑物设计中都要增加电气线路的设计&#xff0c;几年电气引起的火灾也不在少数。建筑电气在运行的过程中…

OpenCV(三十七):拟合直线、三角形和圆形

1.点集拟合的含义 点集拟合是一种通过拟合函数或曲线来近似描述给定离散数据点的技术,在点集拟合中&#xff0c;可以使用不同的函数或曲线拟合方法来拟合直线、三角形和圆形。 直线拟合&#xff1a;对于给定的二维数据点集合&#xff0c;可以使用最小二乘法来拟合一条直线。 …

springboot之三:原理分析之自动配置condition

导入&#xff1a; SpringBoot是如何知道要创建哪个Bean的&#xff1f;比如Spring Boot是如何知道要创建RedisTemplate的&#xff1f; Condition&#xff1a; Condition是在Spring4.0增加的条件判断功能&#xff0c;通过这个可以实现选择性的创建Bean操作。 自定义条件&…