印度做网站,wordpress 锁定地址,厦门网站制作公司,中小企业官方网站基本介绍
Sentinel中的簇点链路是由一个个的Node组成的#xff0c;Node是一个接口。Node中保存了对资源的实时数据的统计#xff0c;Sentinel中的限流或者降级等功能就是通过Node中的数据进行判断的。
Sentinel中是这样描述Node的#xff1a;
Holds real-time statistics…基本介绍
Sentinel中的簇点链路是由一个个的Node组成的Node是一个接口。Node中保存了对资源的实时数据的统计Sentinel中的限流或者降级等功能就是通过Node中的数据进行判断的。
Sentinel中是这样描述Node的
Holds real-time statistics for resources. 保存资源的实时统计信息。 Node继承结构体系图 所有的节点都可以记录对资源的访问统计数据所以都是StatisticNode的子类。
按照作用分为两类Node DefaultNode代表链路树中的每一个资源一个资源出现在不同链路中时会创建不同的DefaultNode节点。而树的入口节点叫EntranceNode是一种特殊的DefaultNode ClusterNode代表资源一个资源不管出现在多少链路中只会有一个ClusterNode。记录的是当前资源被访问的所有统计数据之和。
DefaultNode记录的是资源在当前链路中的访问数据用来实现基于链路模式的限流规则。
ClusterNode记录的是资源在所有链路中的访问数据实现默认模式、关联模式的限流规则。 链路模式只针对从指定链路访问到本资源的请求做统计判断是否超过阈值。 StatisticNode
StatisticNode实现了Node接口其他的Node都继承了该接口。所以这个Node是一个最基础的NodeStatisticNode中保存了资源的实时统计数据基于滑动时间窗口机制通过这些统计数据sentinel才能进行限流、降级等一系列操作。StatisticNode属性如下
public class StatisticNode implements Node {/*** 秒级的滑动时间窗口时间窗口单位500ms*/private transient volatile Metric rollingCounterInSecond new ArrayMetric(SampleCountProperty.SAMPLE_COUNT,IntervalProperty.INTERVAL);/*** 分钟级的滑动时间窗口时间窗口单位1s*/private transient Metric rollingCounterInMinute new ArrayMetric(60, 60 * 1000, false);/*** The counter for thread count. * 线程个数用户触发线程数流控*/private LongAdder curThreadNum new LongAdder();
}
public class ArrayMetric implements Metric {private final LeapArrayMetricBucket data;
}
public class MetricBucket {
// 保存统计值private final LongAdder[] counters;
// 最小rtprivate volatile long minRt;
} 在Sentinel中单独使用StatisticNode来作为统计节点的地方是统计来源节点相关的指标的时候来源节点创建则是在ClusterBuilderSlot中。 DefaultNode DefaultNode 由俩个类EntranceNode跟DefaultNode继承
EntranceNode该类的创建是在初始化Context时完成的ContextUtil.trueEnter方法注意该类是针对Context维度的也就是一个context有且仅有一个EntranceNode。DefaultNode该类的创建是在NodeSelectorSlot.entry完成的当不存在context.name对应的DefaultNode时会新建new DefaultNode(resourceWrapper, null)对应resouce并保存到本地缓存NodeSelectorSlot中private volatile MapString, DefaultNode map获取到context.name对应的DefaultNode后会将该DefaultNode设置到当前context的curEntry.curNode属性也就是说在NodeSelectorSlot中是一个context有且仅有一个DefaultNode。
DefaultNode结构如下
public class DefaultNode extends StatisticNode {private ResourceWrapper id;/*** The list of all child nodes.* 子节点集合*/private volatile SetNode childList new HashSet();/*** Associated cluster node.*/private ClusterNode clusterNode;
} DefaultNode持有指定的Context和指定的Resource的统计数据意味着DefaultNode是以Context和Resource为维度的统计节点。这一点非常的重要因为如果想对某个Context中某个Resource的进行限流等操作就需要使用DefaultNode类型的节点来统计数据。源码中还描述到多次在同一个上下文中获取资源会产生一些子节点这些子节点保存在DefaultNode的childList中。 EntranceNode代表调用链的入口节点持有某个Context中调用的信息同一个Context共享一个EntranceNode。EntranceNode的统计维度为Context。需要注意的是EntranceNode继承了DefaultNode。 ClusterNode
ClusterNode保存的是同一个Resource的相关的统计信息是以Resource为维度的不区分Context这个是和DefaultNode的区别。 ClusterNode簇点用于统计每个资源全局的数据不区分调用链路以及存放该资源的按来源区分的调用数据类型为 StatisticNode。特别地Constants.ENTRY_NODE 节点用于统计全局的入口资源数据。