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

尼恩说在前面

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

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

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

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

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

亡羊补牢、为时不晚。

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

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

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】取

文章目录

    • 尼恩说在前面
    • 阿里面试:Sentinel 熔断降级,是如何实现的?
      • 第一个维度,Sentinel 主要功能:
        • 一:熔断机制
        • 二:降级机制
        • 三:高可用性机制
        • 四:自适应控制
      • 第二个维度, Sentinel 的基本组件:
      • 第三个维度, Sentinel 的流量治理几个核心步骤:
      • 第四个维度, Sentinel 的源码层面的两个核心架构:
    • 《Sentinel 学习圣经》 PDF 目录
    • 说在最后: “offer自由” 很容易的
    • 尼恩技术圣经系列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熔断降级,是如何实现的?_第1张图片

尼恩说明: 两大架构的源码,简单说说就可以了,具体可以参见《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主要特性:
    - SentinelHystrix的区别
    - 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.6Hystrix的熔断对比
- 4Sentinel 流控(限流)
  - 基本的参数
  - 流控的几种strategy
  - 4.1 直接失败模式
    - 使用API进行资源定义
    - 代码限流规则
    - 网页限流规则配置
    - 测试
  - 4.2 关联模式
    - 使用注解进行资源定义
    - 代码配置关联限流规则
    - 网页限流规则配置
    - 测试
  - 4.3 Warm up(预热)模式
    - 使用注解定义资源
    - 代码预热规则
    - 网页预热规则配置
  - 4.4 排队等待模式
    - 示例
    - 使用注解定义资源
    - 代码限流规则
    - 网页限流规则配置
    - 通过jmeter进行测试
  - 4.5 热点规则 (ParamFlowRule)
    - 自定义资源
    - 限流规则代码:
    - 网页限流规则配置
- 5Sentinel 系统保护
  - - 系统保护的目的
    - 系统保护规则的应用
    - 网页限流规则配置
- 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存储规则及双向同步
    - 1Sentinel 动态规则扩展
    - 2、规则管理及推送
    - 3DataSource 扩展
  - DataSource(接口)
    - 1、导入依赖
    - 2、配置
    - 3Nacos中创建限流规则的配置
- 12NacosSentinel互相同步限流规则
    - 1、流控推送规则
    - 2、改造sentinel-dashboard
- 13Sentinel+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自由” 。

尼恩技术圣经系列PDF

  • 《NIO圣经:一次穿透NIO、Selector、Epoll底层原理》
  • 《Docker圣经:大白话说Docker底层原理,6W字实现Docker自由》
  • 《K8S学习圣经:大白话说K8S底层原理,14W字实现K8S自由》
  • 《SpringCloud Alibaba 学习圣经,10万字实现SpringCloud 自由》
  • 《大数据HBase学习圣经:一本书实现HBase学习自由》
  • 《大数据Flink学习圣经:一本书实现大数据Flink自由》
  • 《响应式圣经:10W字,实现Spring响应式编程自由》
  • 《Go学习圣经:Go语言实现高并发CRUD业务开发》

……完整版尼恩技术圣经PDF集群,请找尼恩领取

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓

你可能感兴趣的:(面试,技术圣经,面试,sentinel,职场和发展,架构,重构,rocketmq)