sentinel限流原理,小米java校招面试题

Sentinel是一个关注应用流量控制的开源项目,本文详细介绍了Sentinel的核心概念,包括Resource、Context、Entry、DefaultNode、StatisticNode和Slot。Resource是Sentinel中保护业务的关键,而Context则代表操作上下文。Entry表示资源操作,而DefaultNode和StatisticNode用于统计资源的实时数据。Slot链是Sentinel工作流程的核心,每个插槽有不同的职责,共同协作实现限流、降级等功能。此外,文中还提到了Sentinel在Spring Cloud中的使用方法。
摘要由CSDN通过智能技术生成

五、核心概念


1、Resource

resource是Sentinel中最重要的一个概念,Sentinel通过资源来保护具体的业务代码或其它后方服务。Sentinel把复杂的逻辑给屏蔽了,用户只需要为受保护的代码或服务定义一个资源,然后定义规则就可以了,剩下的通通交给Sentinel来处理。并且资源和规则是解耦的,规则甚至可以在运行时动态修改。定义完资源后,就可以通过在程序中埋点来保护你自己的服务,埋点的方式有两种:

(1)try-catch方式(通过SphU.entry(…)),当catch到BlockException时执行异常处理或fallback。

(2)if-else方式(通过SphO.entry(…)),当返回false时执行异常处理或fallback。

以上两种方式都是通过硬编码的形式定义资源然后进行资源埋点的,对业务代码的侵入太大,从0.1.1版本开始,Sentinel加入了注解的支持,可以通过注解来定义资源,具体的注解为:SentinelResource。通过注解除了可以定义资源外,还可以指定blockHandler和fallback方法。

在Sentinel中具体表示资源的类:ResourceWrapper,它是一个抽象的包装类,包装了资源的Name和EntryType。他有两个实现类,分别是:StringResourceWrapper和MethodResourceWrapper。顾名思义,StringResourceWrapper是通过对一串字符进行包装,是一个通用的资源包装类,MethodResourceWrapper是对方法调用的包装。

2、Context

Context是对资源操作时的上下文环境,每个资源操作(针对resource的entry和exit)必须属于一个Context,如果程序中未指定Context,会创建name为“Sentinel_default_context”的默认Context。一个Context生命周期内可能有多个资源操作,Context生命周期内的最后一个资源exit时会清理该Context,这也预示着整个Context生命周期的结束。Context主要属性如下:

public class Context {

// context名字,默认名字 “sentinel_default_context”

private final String name;

// context入口节点,每个context必须有一个entranceNode

private DefaultNode entranceNode;

// context当前entry,Context生命周期中可能有多个Entry,所有curEntry会有变化

private Entry curEntry;

// The origin of this context (usually indicate different invokers, e.g. service consumer name or origin IP).

private String origin = “”;

private final boolean async;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值