阿里面试:Sentinel熔断降级,是如何实现的?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 :

免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备
免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领
免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领

免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取


阿里面试:Sentinel熔断降级,是如何实现的?

尼恩说在前面

在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题:

问题1:Sentinel高可用熔断降级,是如何实现的?

问题2:Sentinel底层滑动时间窗限流算法怎么实现的?

最近又有小伙伴在面试阿里,遇到了相关的面试题。

小伙伴说,Sentinel是自己的盲区,可以说一脸懵逼,面试官不满意,面试挂了,非常可惜,如果早点看看这尼恩的面试宝典,年薪60W+的offer就到手了。

亡羊补牢、为时不晚。

在这里,尼恩给大家做一下系统化、体系化的Sentinel 梳理,使得大家内力猛增,展示一下雄厚的 “技术肌肉、技术实力”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提,offer自由”。

当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V162版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

最新《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请关注本公众号【技术自由圈】获取,后台回复:领电子书

本文目录

阿里面试:Sentinel熔断降级,是如何实现的?

在微服务架构中,Sentinel 作为一种流量控制、熔断降级和服务降级的解决方案,得到了广泛的应用。

Sentinel是一个开源的流量控制和熔断降级库,用于保护分布式系统免受大量请求的影响。

尼恩建议大家,从以下的几个维度去作答:

第一个维度,Sentinel主要功能:

一:熔断机制

  1. Sentinel使用滑动窗口统计请求的成功和失败情况。这些统计信息包括成功的请求数、失败的请求数等。

  2. 当某个资源(例如一个API接口)的错误率超过阈值或其他指标达到预设的条件,Sentinel将触发熔断机制。

  3. 一旦熔断触发,Sentinel将暂时阻止对该资源的请求,防止继续失败的请求对系统造成更大的影响。

二:降级机制

  1. Sentinel还提供了降级机制,可以在资源负载过重或其他异常情况下,限制资源的访问速率,以保护系统免受过多的请求冲击。

  2. 降级策略可以根据需要定制,可以是慢调用降级、异常比例降级等。

三:高可用性机制

Sentinel的高可用性主要通过以下方式来实现:

  1. 多节点部署:将Sentinel配置为多节点部署,确保即使一个节点发生故障,其他节点仍然能够继续工作。

  2. 持久化配置:Sentinel支持将配置信息持久化到外部存储,如Nacos、Redis等。这样,即使Sentinel节点重启,它可以加载之前的配置信息。

  3. 集群流控规则:Sentinel支持集群流控规则,多个节点可以共享流量控制规则,以协同工作来保护系统。

  4. 实时监控:Sentinel提供了实时监控和仪表板,可以查看系统的流量控制和熔断降级情况,帮助及时发现问题并采取措施。

四:自适应控制

Sentinel具有自适应控制的功能,它可以根据系统的实际情况自动调整流量控制和熔断降级策略,以适应不同的负载和流量模式。

总的来说,Sentinel的高可用性熔断降级机制是通过多节点部署、持久化配置、实时监控、自适应控制等多种手段来实现的。

这使得Sentinel能够在分布式系统中保护关键资源免受异常流量的影响,并保持系统的稳定性和可用性。

那么,Sentinel是如何实现这些功能的呢?在说说 Sentinel 的基本组件。

第二个维度, Sentinel 的基本组件:

Sentinel 主要包括以下几个部分:资源(Resource)、规则(Rule)、上下文(Context)和插槽(Slot)。

  • 资源是我们想要保护的对象,比如一个远程服务、一个数据库连接等。

  • 规则是定义如何保护资源的,比如我们可以通过设置阈值、时间窗口等方式来决定何时进行限流、熔断等操作。

  • 上下文是一个临时的存储空间,用于存储资源的状态信息,比如当前的 QPS 等。

  • 插槽属于责任链模式中的处理器/过滤器, 完成资源规则的计算和验证。

第三个维度, Sentinel 的流量治理几个核心步骤:

在 Sentinel 的运行过程中,主要分为以下几个核心步骤:

  1. 资源注册:当一个资源被创建时,需要将其注册到 Sentinel。在注册过程中,会为资源创建一个对应的上下文,并将资源的规则存储到插槽中。

  2. 流量控制:当有请求访问资源时,Sentinel 会根据资源的规则进行流量控制。如果当前 QPS 超过了规则设定的阈值,Sentinel 就会拒绝请求,以防止系统过载。

  3. 熔断降级:当资源出现异常时,Sentinel 会根据规则进行熔断或降级处理。熔断是指暂时切断对资源的访问,以防止异常扩散。降级则是提供一种备用策略,当主策略无法正常工作时,可以切换到备用策略。

  4. 规则更新:在某些情况下,我们可能需要动态调整资源的规则。Sentinel 提供了 API 接口,可以方便地更新资源的规则。

通过以上分析,我们可以看出,Sentinel 的核心思想是通过规则来管理和控制资源。这种设计使得 Sentinel 具有很强的可扩展性和灵活性。我们可以根据业务需求,定制各种复杂的规则。

第四个维度, Sentinel 的源码层面的两个核心架构:

回到源码层面,在 Sentinel 源码,包括以下二大架构:

  • 责任链模式架构
  • 滑动窗口数据统计架构

尼恩说明: 两大架构的源码,简单说说就可以了,具体可以参见《Sentinel 学习圣经》 最新版本。

总指挥,Sentinel 是一种非常强大的流量控制、熔断降级和服务降级的解决方案。 已经成为了替代Hystrix的主要高可用组件。

有关Sentinel的系统化知识,请参见尼恩写的5W字PDF 《Sentinel学习圣经》

目录如下:

《Sentinel 学习圣经》 PDF 目录

- Sentinel 相关面试真题
- 尼恩说在前面
- 阿里面试:Sentinel 熔断降级,是如何实现的?
  - 第一个维度,Sentinel 主要功能:
  - 第二个维度, Sentinel 的基本组件:
  - 第三个维度, Sentinel 的流量治理几个核心步骤
  - 第四个维度, Sentinel 的源码层面的两个核心架构
- 说在最后: “offer自由” 很容易的
- 美团面试:Sentinel底层滑动时间窗限流算法怎么实现的?
  - 滑动窗口的核心数据结构
    - ArrayMetric 源码
    - LeapArray 源码
    - MetricBucket 源码
    - WindowWrap 源码
  - 滑动窗口 统计 源码实现
    - 如何 定位 Bucket?
- 《尼恩学习圣经 系列PDF》内容、目标、意义
- 《sentinel 学习圣经》说明:
  - hystrix 服务保护
  - Sentinel 服务保护
- 《Sentinel 学习圣经》版本升级说明
- 开始《sentinel 学习圣经》:一组核心基本概念
  - 1. 响应时间(RT)
  - 2. 吞吐量(Throughput)
  - 3. 并发用户数
- 什么是服务雪崩效应?
- 1、什么是Sentinel:
  - Sentinel 具有以下特征
  - Sentinel主要特性:
    - Sentinel与Hystrix的区别
    - Hystrix 迁移Sentinel 方案
  - sentinel组件介绍
    - Sentinel两个部分
    - sentinel 核心概念
  - Sentinel 的使用
  - Sentinel中的管理控制台
    - 1)获取 Sentinel 控制台
    - 2)sentinel服务启动
      - 启动 sentinel
      - 控制台端口:
      - 控制台登录
      - 启动日志
  - Sentinel 控制台使用
    - 默认用户名和密码都是 sentinel
    - 查看机器列表以及健康情况
  - SpringCloud客户端能接入控制台
- 2、使用 Sentinel 来进行熔断与限流
  - 2.1 Java普通应用限流
    - 1. 引入 Sentinel 依赖
    - 2. 定义资源
    - 3. 定义规则
    - 4. 检查效果
    - 5. 接入控制台
  - 2.1 定义资源
    - 资源注解@SentinelResource
    - @SentinelResource 注解
      - fallback 函数签名和位置要求
      - defaultFallback 函数签名要求
  - 2.3 定义规则
- 3、sentinel 熔断降级
  - 3.1 什么是熔断降级
  - 3.2 熔断降级规则
  - 3.3 几种降级策略
  - 3.4 熔断降级代码实现
  - 3.5 控制台降级规则
  - 3.6 与Hystrix的熔断对比
- 4、Sentinel 流控(限流)
  - 基本的参数
  - 流控的几种strategy
  - 4.1 直接失败模式
    - 使用API进行资源定义
    - 代码限流规则
    - 网页限流规则配置
    - 测试
  - 4.2 关联模式
    - 使用注解进行资源定义
    - 代码配置关联限流规则
    - 网页限流规则配置
    - 测试
  - 4.3 Warm up(预热)模式
    - 使用注解定义资源
    - 代码预热规则
    - 网页预热规则配置
  - 4.4 排队等待模式
    - 示例
    - 使用注解定义资源
    - 代码限流规则
    - 网页限流规则配置
    - 通过jmeter进行测试
  - 4.5 热点规则 (ParamFlowRule)
    - 自定义资源
    - 限流规则代码:
    - 网页限流规则配置
- 5、Sentinel 系统保护
  - - 系统保护的目的
    - 系统保护规则的应用
    - 网页限流规则配置
- 6、黑白名单规则
  - 访问控制规则 (AuthorityRule)
- 7、如何定义资源
  - 方式一:主流框架的默认适配
  - 方式二:抛出异常的方式定义资源
  - 方式三:返回布尔值方式定义资源
  - 方式四:注解方式定义资源
  - 方式五:异步调用支持
- 8、核心组件 源码分析
  - Resource
  - Context
    - Context的创建与销毁
  - Entry
  - DefaultNode
  - StatisticNode
- 9、插槽Slot 源码分析
  - Sentinel中的责任链模式
  - 责任链SlotChain 如何创建?
  - 责任链模式的重要性
  - NodeSelectorSlot 原理分析+ 源码分析
    - 核心的概念1: Resource
    - 核心的概念2: Context
    - 核心的概念3: Entry
    - 核心的概念4: Node
  - 调用链树
    - 构造树干
      - 创建context
      - 创建Entry
      - 退出Entry
    - 构造叶子节点
    - 保存子节点
  - ClusterBuilderSlot
  - StatistcSlot
  - SystemSlot
  - AuthoritySlot
  - FlowSlot
  - DegradeSlot
  - DefaultProcessorSlotChain
  - slot总结
- 10、sentinel滑动窗口 sliding window 源码分析
  - 10.1 基本原理
  - 10.2 sentinel使用滑动窗口都统计啥
  - 10.3 滑动窗口源码实现
    - 3.1 MetricBucket 源码分析
    - 3.2 WindowWrap 源码分析
    - 3.3 LeapArray 源码分析
- 11、使用Nacos存储规则及双向同步
    - 1、Sentinel 动态规则扩展
    - 2、规则管理及推送
    - 3、DataSource 扩展
  - DataSource(接口)
    - 1、导入依赖
    - 2、配置
    - 3、Nacos中创建限流规则的配置
- 12、Nacos与Sentinel互相同步限流规则
    - 1、流控推送规则
    - 2、改造sentinel-dashboard
- 13、Sentinel+nacos实现集群限流
  - 使用集群的方式设置限流规则
  - 集群限流使用场景
  - 集群架构示意图
  - 建立 sentinel-token-sever
  - 进行客户端的限流参数上报
  - 未完待续.....
- 作者介绍
- 技术自由的实现路径 PDF
    - 实现你的 架构自由
    - 实现你的 响应式 自由
    - 实现你的 spring cloud 自由
    - 实现你的 linux 自由
    - 实现你的 网络 自由
    - 实现你的 分布式锁 自由
    - 实现你的 王者组件 自由
    - 实现你的 面试题 自由
- 免费获取11个技术圣经 PDF

说在最后: “offer自由” 很容易的

Java Agent、Instrumentation、arthas 相关的面试题,是非常常见的面试题。

以上的内容,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。

最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。

在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典PDF》,里边有大量的大厂真题、面试难题、架构难题。很多小伙伴刷完后, 吊打面试官, 大厂横着走。

在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。

另外,如果没有面试机会,可以找尼恩来改简历、做帮扶。

尼恩指导了大量的小伙伴上岸,前段时间,刚指导一个40岁+被裁小伙伴,拿到了一个年薪100W的offer。

狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由” 。

技术自由的实现路径:

实现你的 架构自由:

吃透8图1模板,人人可以做架构

10Wqps评论中台,如何架构?B站是这么做的!!!

阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了

峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?

100亿级订单怎么调度,来一个大厂的极品方案

2个大厂 100亿级 超大流量 红包 架构方案

… 更多架构文章,正在添加中

实现你的 响应式 自由:

响应式圣经:10W字,实现Spring响应式编程自由

这是老版本 《Flux、Mono、Reactor 实战(史上最全)

实现你的 spring cloud 自由:

Spring cloud Alibaba 学习圣经》 PDF

分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)

一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)

实现你的 linux 自由:

Linux命令大全:2W多字,一次实现Linux自由

实现你的 网络 自由:

TCP协议详解 (史上最全)

网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!

实现你的 分布式锁 自由:

Redis分布式锁(图解 - 秒懂 - 史上最全)

Zookeeper 分布式锁 - 图解 - 秒懂

实现你的 王者组件 自由:

队列之王: Disruptor 原理、架构、源码 一文穿透

缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)

缓存之王:Caffeine 的使用(史上最全)

Java Agent 探针、字节码增强 ByteBuddy(史上最全)

实现你的 面试题 自由:

4800页《尼恩Java面试宝典 》 40个专题

免费获取11个技术圣经PDF:

posted @ 2024-01-25 07:57  疯狂创客圈  阅读(281)  评论(0编辑  收藏  举报