🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] ## 基本概念 ### 资源 资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。 只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。 ### 规则 围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。 ### 什么是熔断降级 除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。 ## 源码阅读概念 ### Entry Entry在英文中直译为大门、入口,在很多源码中,被作为元素单位的存在。 在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)。 总结一下便是:`Entry是针对资源创建的限流实现,其具体功能由一系列功能插槽组成`。 ### Node ![](https://img.kancloud.cn/70/7f/707f027c6a49161b01c3a545a1715b7b_407x344.png) - StatisticNode: 统计节点,是Node接口的实现类,用于完成数据统计 - EntranceNode: 入口节点,一个Context会有一个入口节点,用于统计当前Context的总体流量数据 - DefaultNode: 默认节点,用于统计一 个资源在当前Context中的流量数据 - ClusterNode:集群节点,用于统计一个资源在所有Context中的总体流量数据 ![](https://img.kancloud.cn/1e/6b/1e6b9967ab0adb644657caef25ef861c_825x704.png) #### StatisticNode #### EntranceNode EntranceNode是NodeSelectorSlot中的调用路径节点。我们先来看一下EntranceNode中都有哪些数据: ``` EntranceNode: machine-root(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) -EntranceNode1: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) --nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) -EntranceNode2: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) --nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) ``` 其中: * t:threadNum * pq:passQps * bq:blockedQps * tq:totalQps * rt:averageRt * prq: passRequestQps * 1mp:1m-passed * 1mb:1m-blocked * 1mt:1m-total ![](https://img.kancloud.cn/b3/bb/b3bbaf6d837f0e05f15d7916de5da32e_2830x1961.png) 1. 滑动窗口实现原理 #### 什么是SPI接口? SPI接口是功能可扩展接口。 3. ## 参考资料 [官网:Sentinel工作流程](https://sentinelguard.io/zh-cn/docs/basic-implementation.html)