Sentinel源码分析总结

简介: 写作目的最近在看Sentinel源码,遇到了几个问题,想再此记录和分享一下遇到的几个问题,方便读者看到我的文章后就不用在继续搜索了。

环境搭建


Nacos服务注册中心安装:https://cbeann.blog.csdn.net/article/details/105435181


sentinel安装:https://cbeann.blog.csdn.net/article/details/105461870


服务:https://gitee.com/cbeann/Demooo/tree/master/sentinel-provider-demo


注意:版本要和链接中的一致


源码分析总结


限流算法分析


经典的限流算法有:漏斗算法、令牌桶算法和滑动窗口算法

Sentinel使用的是滑动窗口算法


Sentinel实现原理


AOP


向容器里添加一个Aspect


//SentinelAutoConfiguration
@Bean
  @ConditionalOnMissingBean
  public SentinelResourceAspect sentinelResourceAspect() {
    return new SentinelResourceAspect();
  }


而该Aspect是环绕通知


@Aspect
public class SentinelResourceAspect extends AbstractSentinelAspectSupport {
  @Pointcut("@annotation(com.alibaba.csp.sentinel.annotation.SentinelResource)")
    public void sentinelResourceAnnotationPointcut() {
    }
    @Around("sentinelResourceAnnotationPointcut()")
    public Object invokeResourceWithSentinel(ProceedingJoinPoint pjp) throws Throwable {
    //do something
  }
}


责任链


11.png


里面有很多Slot,每一个Slot的作用无非就是统计和拦截,我们以拦截为例,当经过AuthoritySlot、SystemSlot等规则时,当每一个Slot判断不通过时抛异常,在最外层捕获不同的异常再进行统计,从而实现拦截。


未解决的问题


Sentinel中有一个CommonFilter才是拦截的入口。我debug的时候如果把QPS设置为0.01,那么其实请求是走不到SentinelResourceAspect 的invokeResourceWithSentinel方法的,但是还是抛出了Sentinel的异常,后来发现是在CommonFilter中也执行了


SphU.entry


那么此时问题来了,在Filter中执行一遍上面的方法,又在进入Controller之前的AOP方法中又执行了一遍,这是为什么呢?这个点没有get到。


参考


Nacos服务注册中心安装:https://cbeann.blog.csdn.net/article/details/105435181


sentinel安装:https://cbeann.blog.csdn.net/article/details/105461870


服务:

https://gitee.com/cbeann/Demooo/tree/master/sentinel-provider-demo


目录
相关文章
|
4月前
|
存储 监控 测试技术
深入理解Sentinel系列-2.Sentinel原理及核心源码分析(上)
深入理解Sentinel系列-2.Sentinel原理及核心源码分析
88 0
|
Sentinel
通俗易懂的阿里Sentinel源码分析:如何向控制台发送心跳包?
// 在Env类的静态代码块中, // 触发了一系列初始化操作, // 其中就包括发送心跳包的初始化。 // 如果Env类一直没有被用到, // 那么不会触发该初始操作。 // 这也印证了官方的“确保客户端有访问量, // 才开始向控制台发送心跳包”的说法, // 因为有访问量就会用到Env类。
392 0
|
缓存 调度 Sentinel
源码分析 Sentinel DegradeSlot 熔断实现原理
源码分析 Sentinel DegradeSlot 熔断实现原理
源码分析 Sentinel DegradeSlot 熔断实现原理
|
SQL Dubbo 应用服务中间件
源码分析 Sentinel 之 Dubbo 适配原理
源码分析 Sentinel 之 Dubbo 适配原理
源码分析 Sentinel 之 Dubbo 适配原理
|
监控 算法 数据可视化
微服务架构 | 5.4 Sentinel 流控、统计和熔断的源码分析
调用链路是 Sentinel 的工作主流程,由各个 Slot 槽组成,将不同的 Slot 槽按照顺序串在一起,从而将不同的功能(限流、降级、系统保护)组合在一起; 本篇《2. 获取 ProcessorSlot 链》将从源码级讲解如何获取调用链路,接着会以遍历链表的方式处理每一个 Slot 槽,其中就有:FlowSlot、StatisticSlot、DegradeSlot 等。分别对应本篇《3. 流控槽实施流控逻辑》、《4. 统计槽实施指标数据统计》和《5. 熔断槽实施服务熔断》;
253 0
微服务架构 | 5.4 Sentinel 流控、统计和熔断的源码分析
|
14天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
15天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
27 0
|
1月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
2月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
225 0
|
2月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
28 0