Alibaba Sentinel源码解析连载专栏
文章平均质量分 62
91猿说编程
从业15年,精通Java开发,微服务,网络,分布式高并发等技术。
展开
-
15. 滑动时间窗口在流控FlowSlot中的使用源码解析
15. 滑动时间窗口在流控FlowSlot中的使用源码解析1. 分析入口源码之前我们通过分析源码已经知道了滑动窗口算法在Sentinel中的应用,那么这节课我们来研究一下流控的FlowSlot是如何使用的// FlowSlot.java@Overridepublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boole原创 2022-04-11 11:47:06 · 704 阅读 · 0 评论 -
14. Sentinel滑动时间窗口算法源码解析
上节课我们分析了Sentinel的滑动时间窗口算法原理,那么这节课我们来研究一下源码中的具体实现1. Sentinel中使用滑动时间窗的流程图从图中可以看出Sentinel在各种地方都使用了时间窗提供的数据。 也是依赖Sentinel的StatisticSlot提供数据由时间窗记录下来。2. 源码入口分析首先看StatisticSlot.entry方法中node.addPassRequest(count)方法,这里我之前就提到过用到了滑动窗口算法,那我们来具体分析// Stat..原创 2022-04-11 11:47:41 · 1033 阅读 · 0 评论 -
13. 滑动时间窗口算法概念原理
1. 时间窗介绍在之前的学习中,我们已经学习完成了Sentinel源码的Node关系、责任链调用,那么这节课我们就要学习Sentinel核心源码中的一个非常重要的算法“滑动时间窗口算法”,也就是结构图中的WindowLeapArray,它为Sentinel提供当前时间的数据支撑, 如当前QPS,请求数,异常数等。2. 固定时间窗口算法要学习滑动窗口,我们先要学习时间窗口算法,以循序渐进的方式了解滑动窗口,时间窗口算法也可以称之为:固定时间窗算法概念:固定时间窗口计数器算法思想:在固定..原创 2022-04-11 11:46:23 · 15402 阅读 · 5 评论 -
12. 熔断DegradeSlot解析
1. 介绍上一篇我们分析了流控FlowSlot的源码,接下来就是熔断DegradeSlot了,熔断通常是发生在调用其他服务时发生慢调用,或异常比例超过多少,或异常数超过多少,那就会通过Sentinel提供的熔断机制, 不调用远程的服务,使用一个兜底的熔断效果来替代。以保证系统的可用性。2. 代码分析//DegradeSlot.java@Overridepublic void entry(Context context, ResourceWrapper resourceWrapper, ..原创 2022-04-11 11:46:16 · 326 阅读 · 0 评论 -
11. 流控FlowSlot源码解析
介绍这个slot 对应我们在Dashboard中设定的流控规则, 主要根据预设的规则资料信息来进行流控,按照固定的次序,依次生效。如果一个资源对应两条或者多条流控规则,则会根据如以下次序依次检验,直到全部通过或者有一个规则生效为止: 指定应用生效的规则,即针对调用方限流的; 调用方为 other 的规则; 调用方为 default 的规则。 代码解析public class FlowSlot extends AbstractLinkedProcessorSlo..原创 2022-04-11 11:46:05 · 622 阅读 · 0 评论 -
10. 统计StatisticSlot源码解析
StatisticSlot 简介StatisticSlot 是 Sentinel 最为重要的类之一,其功能主要是各种维度的数据收集,之前两个Slot(NodeSelectorSlot和ClusterBuilderSlot)相当于都是检查并创建数据收集器, 而StatisticSlot 则是通过数据收集器来添加各种维度的数据,以便于给下次流控做数据参考。 这里的收集是发生在本次请求流控之后进行,会根据本次流控结果来进行收集。如下几种情况:记录数据时机没有产生流控: 记录请求线程数increaseT原创 2022-04-10 11:00:13 · 562 阅读 · 0 评论 -
9. ClusterBuilderSlot源码解析
ClusterBuilderSlot简介ClusterBuilderSlot是用于创建用于存储资源的统计信息以及调用者信息的ClusterNode ,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;那我们来进行分析源码说明//ClusterBuilderSlot.javaprivate static volatile Map<ResourceWrapper, ClusterNode> clusterNodeMap = new原创 2022-04-10 10:59:40 · 374 阅读 · 0 评论 -
8. NodeSelectorSlot源码解析
官网有给出解释是:这个 Slot 主要负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级。这里是指的是我们在结构图中的Node的树状结构,这个树上的各种Node用于收集在不同维度上的数据,以供给流控使用。而NodeSelectorSlot是负责创建DefaultNode并添加到树结构中当请求进入流控逻辑后,会在内存中生成如下的结构 machine-root /原创 2022-04-10 10:58:33 · 277 阅读 · 0 评论 -
7. Sentinel SlotChain的创建和调用源码解析
7. Sentinel SlotChain的创建和调用源码解析1. 入口简介通过5小节,我们知道了是同SphU.entry方法来作为流控的入口的,也就是说该方法会执行流控相关逻辑,那么它是如何实现的呢? 通过Sentinel结构图我们知道它里面应该会构建一个调用链,这个调用链就是SlotChain,那么我们接下来着重解析这个调用链。2. 各种Slot介绍在 Sentinel里面,所有的资源都对应一个资源名称(resourceName),每次资源调用都会创建一个 Entry 对象,Entry原创 2022-04-10 10:57:42 · 424 阅读 · 0 评论 -
6. Sentinel构建上下环境Context源码解析
说明上下文Context是一次请求需要流控所需要的相关数据的封装, 这个对于流控来说至关重要。通过上节我们知道了,微服务中Sentinel如何开始流控的,但并没有创建上下文Context,我们知道没有创建时,它是会创建一个默认的Context,那么我们Sentinel是如何创建的呢?我们继续跟踪代码。跟踪步骤进入SphU.entry方法 进入Env.sph.entryWithType方法 通过跟踪,我们来到了CtSph.entryWithPriority方法中public class原创 2022-04-10 10:55:39 · 310 阅读 · 0 评论 -
5. SpringBoot项目的源码入口源码解析
微服务自动装配在微服务的使用Sentinel实际工作场景中,我们只需要引入对应依赖:spring-cloud-starter-alibaba-sentinel,就能使用流控了, 原因是引入后利用SpringBoot自动装配功能,所以在META-INF/spring.factories中有SentinelAutoConfiguration来实现流控Sentinel的自动装配。SentinelAutoConfiguration自动装配类中有如下代码自动注入Bean SentinelResourceA原创 2022-04-10 10:55:04 · 709 阅读 · 0 评论 -
4. 各种Node之间的关系说明
简要说明Node 接口定义了一个 Node 类所需要提供的各项指标数据统计的相关功能,为外部屏蔽滑动窗口的存在。提供记录请求被拒绝、请求被放行、请求处理异常、请求处理成功的方法,以及获取当前时间窗口统计的请求总数、平均耗时等方法。StatisticNode:统计节点,是Node的实现类,用于完成数据统计,是DefaultNode和ClusterNode的父类 EntranceNode:DefaultNode的子类,入口节点,一个Context会有一个入口节点,用于统计当前Context的总体流量数原创 2022-04-10 10:53:30 · 529 阅读 · 0 评论 -
3.核心入口代码SphU.entry说明
SphU是Alibaba Sentinel流控的入口类,用于对资源的访问控制, 简单使用如下@Testpublic void requestTest() { // Entry就是一个资源操作对象 Entry entry = null; try { //对资源(resource)进行检查,如果流控则抛出BlockedException //"resource"一般是请求路径或有SentinelResource注解类定义的访问资源原创 2022-04-10 10:51:13 · 3390 阅读 · 0 评论 -
2. 工作原理和核心概念
介绍Sentinel 的核心是将不同的 Slot 按照顺序串在一起(使用了责任链模式),这些不同的 Slot实现了不同的功能(限流、降级、熔断、系统保护)。Slot Chain 主要可以分为两部分:统计数据构建部分(statistic)和判断部分(rule checking)。核心结构如下图结构图说明通过上图可以看出,整个结构分为几大块Invocation Tree Node接口是Sentinel 里面的各种种类的统计节点,Invocation Tree 中就是各种Node,不同..原创 2022-04-10 10:48:37 · 238 阅读 · 0 评论 -
1. 源码下载使用IDEA打开
下载地址GitHub - alibaba/Sentinel at release-1.8https://github.com/alibaba/Sentinel/tree/release-1.8使用IDEA打开这里我们以版本1.8为例下载研究分析,下载完成后通过IDEA打开根目录下的pom.xml以项目的形式打开,会自动加载所有的依赖,完成后应该如下图:版本对照说明由于各种版本的差异和兼容性问题,微服务需要的各种组件的版本最好是官方推荐对应的版本,避免出现其他各种问题。具体参考如下..原创 2022-04-10 10:45:51 · 775 阅读 · 0 评论