Sentinel是阿里开源的一款高性能的限流框架。这里将对Sentinel的使用和实现进行介绍。
这里先介绍下Sentinel中涉及到的基本概念,包括使用上或者实现上。主要是笔者在阅读文档和源码时经常会接触到的对象。
Resource
资源是整个Sentinel最基本的一个概念。可以是一段代码,一个http请求,一个微服务,总而言之,他是Sentinel需要保证的实体。大部分情况下,我们可以使用方法签名,URL或者是服务名称来作为资源的名称。它在Sentinel中的体现是:ResourceWrapper,他有两个子类:
StringResourceWrapper 使用string来标识一个资源
MethodResouceWrapper 使用一个函数签名来标识一个资源
Node
节点是用来存储统计数据的基本数据单元,Node本身只是一个接口,它有多个实现:
StatisticNode 唯一的直接实现类,实现了流量统计的基本方法,在StatisticSlot中使用
ClusterNode 继承自StatisticNode,对于某一个资源的全局统计
DefaultNode 继承自StatisticNode,对于某一个资源在相应上下文中的实现,保存了一个指向ClusterNode的引用。另外还保存了子节点列表,当在同一个context下多次调用SphU.entry不同资源时会创建子节点
EntranceNode 继承自DefaultNode,代表一个调用的根节点,一个Context会对应到一个EntranceNode
Context
上下文是用来保存当前调用的元数据,存储在ThreadLocal中,它包含了几个信息:
Ent