在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题:
问题1:Sentinel高可用熔断降级,是如何实现的?
问题2:Sentinel底层滑动时间窗限流算法怎么实现的?
最近又有小伙伴在面试阿里,遇到了相关的面试题。
小伙伴说,Sentinel是自己的盲区,可以说一脸懵逼,面试官不满意,面试挂了,非常可惜,如果早点看看这尼恩的面试宝典,年薪60W+的offer就到手了。
亡羊补牢、为时不晚。
在这里,尼恩给大家做一下系统化、体系化的Sentinel 梳理,使得大家内力猛增,展示一下雄厚的 “技术肌肉、技术实力”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提,offer自由”。
当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V162版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】取
在微服务架构中,Sentinel 作为一种流量控制、熔断降级和服务降级的解决方案,得到了广泛的应用。
Sentinel是一个开源的流量控制和熔断降级库,用于保护分布式系统免受大量请求的影响。
尼恩建议大家,从以下的几个维度去作答:
Sentinel使用滑动窗口统计请求的成功和失败情况。这些统计信息包括成功的请求数、失败的请求数等。
当某个资源(例如一个API接口)的错误率超过阈值或其他指标达到预设的条件,Sentinel将触发熔断机制。
一旦熔断触发,Sentinel将暂时阻止对该资源的请求,防止继续失败的请求对系统造成更大的影响。
Sentinel还提供了降级机制,可以在资源负载过重或其他异常情况下,限制资源的访问速率,以保护系统免受过多的请求冲击。
降级策略可以根据需要定制,可以是慢调用降级、异常比例降级等。
Sentinel的高可用性主要通过以下方式来实现:
多节点部署:将Sentinel配置为多节点部署,确保即使一个节点发生故障,其他节点仍然能够继续工作。
持久化配置:Sentinel支持将配置信息持久化到外部存储,如Nacos、Redis等。这样,即使Sentinel节点重启,它可以加载之前的配置信息。
集群流控规则:Sentinel支持集群流控规则,多个节点可以共享流量控制规则,以协同工作来保护系统。
实时监控:Sentinel提供了实时监控和仪表板,可以查看系统的流量控制和熔断降级情况,帮助及时发现问题并采取措施。
Sentinel具有自适应控制的功能,它可以根据系统的实际情况自动调整流量控制和熔断降级策略,以适应不同的负载和流量模式。
总的来说,Sentinel的高可用性熔断降级机制是通过多节点部署、持久化配置、实时监控、自适应控制等多种手段来实现的。
这使得Sentinel能够在分布式系统中保护关键资源免受异常流量的影响,并保持系统的稳定性和可用性。
那么,Sentinel是如何实现这些功能的呢?在说说 Sentinel 的基本组件。
Sentinel 主要包括以下几个部分:资源(Resource)、规则(Rule)、上下文(Context)和插槽(Slot)。
资源是我们想要保护的对象,比如一个远程服务、一个数据库连接等。
规则是定义如何保护资源的,比如我们可以通过设置阈值、时间窗口等方式来决定何时进行限流、熔断等操作。
上下文是一个临时的存储空间,用于存储资源的状态信息,比如当前的 QPS 等。
插槽属于责任链模式中的处理器/过滤器, 完成资源规则的计算和验证。
在 Sentinel 的运行过程中,主要分为以下几个核心步骤:
资源注册:当一个资源被创建时,需要将其注册到 Sentinel。在注册过程中,会为资源创建一个对应的上下文,并将资源的规则存储到插槽中。
流量控制:当有请求访问资源时,Sentinel 会根据资源的规则进行流量控制。如果当前 QPS 超过了规则设定的阈值,Sentinel 就会拒绝请求,以防止系统过载。
熔断降级:当资源出现异常时,Sentinel 会根据规则进行熔断或降级处理。熔断是指暂时切断对资源的访问,以防止异常扩散。降级则是提供一种备用策略,当主策略无法正常工作时,可以切换到备用策略。
规则更新:在某些情况下,我们可能需要动态调整资源的规则。Sentinel 提供了 API 接口,可以方便地更新资源的规则。
通过以上分析,我们可以看出,Sentinel 的核心思想是通过规则来管理和控制资源。这种设计使得 Sentinel 具有很强的可扩展性和灵活性。我们可以根据业务需求,定制各种复杂的规则。
回到源码层面,在 Sentinel 源码,包括以下二大架构:
尼恩说明: 两大架构的源码,简单说说就可以了,具体可以参见《Sentinel 学习圣经》 最新版本。
总指挥,Sentinel 是一种非常强大的流量控制、熔断降级和服务降级的解决方案。 已经成为了替代Hystrix的主要高可用组件。
有关Sentinel的系统化知识,请参见尼恩写的5W字PDF 《Sentinel学习圣经》
目录如下:
- 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
Java Agent、Instrumentation、arthas 相关的面试题,是非常常见的面试题。
以上的内容,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。
最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。
在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典PDF》,里边有大量的大厂真题、面试难题、架构难题。很多小伙伴刷完后, 吊打面试官, 大厂横着走。
在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。
另外,如果没有面试机会,可以找尼恩来改简历、做帮扶。
尼恩指导了大量的小伙伴上岸,前段时间,刚指导一个40岁+被裁小伙伴,拿到了一个年薪100W的offer。
狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由” 。
……完整版尼恩技术圣经PDF集群,请找尼恩领取
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓