阿里sentinel分析

一、这是什么?可以做什么?

sentinel可以对接口、系统提供限流,熔断降级,系统保护等功能的一个工具。

二、跟网关、hystrix区别

网关区别:网关虽然也可以做到限流,但是只是做到client到server的限流,我们服务一般是由一条链路组成,链路之间无法限流,也无法做到熔断等功能。

hystrix区别:没啥区别,真要看区别可以百度去。不过我之前使用刺猬感觉就一点不如sentinel,就是代码入侵性太强。假设我们现在维护一套古董代码,或者是你仅仅有一个jar包无法修改代码,这时候hystrix将无法使用。

三、流程源码解析

sentinel除了提供原生方式,还提供很多适配器,这里我主要介绍dubbo。

(1)项目结构

从结构可以看出会自动加载3个过滤器,分别是生产者,消费者,设置消费者信息。这里我只讲生产者。

(2)SentinelDubboProviderFilter

dubbo适配器支持2个维度监控,一个是接口级别(一个类下所有接口),一个是方法级别(针对每个接口)。根据代码可以看出所有的控制都是由SphU.entry开启的,所以就跟进去看看。

(3)SphU.entry最后会进入CtSph.entry

这里简单的把name和type做了个包装。name是资源名(默认为接口的全路径),type(生产者为IN,消费者为OUT)。继续跟进去!

(4)entry进入后会调用一个私有方法entryWithPriority

 

此方法是最最最核心的代码。

① context:sentinel的上下文,用threadlocal存储,里头存有如下字段:

这里最重要就是这个责任链怎么找,和怎么执行,跟进去看看。

(5)lookProcessChain

这里用了二次确认,如果没有就创建一个责任链,并且做缓存。从key可以看出来责任链是根据资源(接口或者方法)来缓存的。

看看newSlotChain方法:

(6)chain.entry 执行方法

 

(7)checkDegrade方法

 

四、细节概念

上面只是大致介绍了流程,sentinel有很多自由概念。比如node、slot

①slot:就是责任链的每一个环节

②node:这个总结一句话来说就是用来做数据统计的。

sentinel有一个Node接口。还有4个子类:DefaultNode、StatisticNode、ClusterNode、EntranceNode

(1)StatisticNode实现了Node接口,封装了基础的流量统计和获取方法
(2)EntranceNode代表入口节点,每个上下文都会有一个入口节点,用来统计当前上下文的总体流量情况
(3)DefaultNode代表同个资源在不同上下文中各自的流量情况
(4)ClusterNode代表同个资源在不同上下文中总体的流量情况

关于node有一篇很好的文章,https://blog.csdn.net/u013160932/article/details/87927884

五、坑

1、目前如果用dashboard配置的规则是存在调用方的内存里,也就是说重启项目配置丢失。官方建议接入配置中心或者zk,但是这样需要修改源码,不利于后期升级。我在官方群里问了,也莫得答案。。。

2、官方文档启动方式过于老旧,要在启动时候参数。可以用如下的方法代替。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值