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


目录
相关文章
|
6月前
|
存储 监控 测试技术
深入理解Sentinel系列-2.Sentinel原理及核心源码分析(上)
深入理解Sentinel系列-2.Sentinel原理及核心源码分析
458 0
|
Sentinel
通俗易懂的阿里Sentinel源码分析:如何向控制台发送心跳包?
// 在Env类的静态代码块中, // 触发了一系列初始化操作, // 其中就包括发送心跳包的初始化。 // 如果Env类一直没有被用到, // 那么不会触发该初始操作。 // 这也印证了官方的“确保客户端有访问量, // 才开始向控制台发送心跳包”的说法, // 因为有访问量就会用到Env类。
480 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. 熔断槽实施服务熔断》;
319 0
微服务架构 | 5.4 Sentinel 流控、统计和熔断的源码分析
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
83 1
|
5月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
151 3
|
30天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
4月前
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
229 0