Sentilnel是阿里开源的一个用于限流的组件,也是目前比较流行的,以下为官方文档
Sentinel官方文档,使用相对比较简单
使用方式
使用方式比较简单,目前有5种,官网也给出了比较详细的使用方式
有以下几种
方式一:主流框架的默认适配
方式二:抛出异常的方式定义资源
方式三:返回布尔值方式定义资源
方式四:注解方式定义资源
方式五:异步调用支持
这里就一一贴代码了,因为官网已经说到非常详情了,直接到上面参考使用样式即可,其中注解方式是比较常用的一种,只需要标记注解即可完成限流功能
同时Sentinel控制台更方便我们的配置,不过这种方式是基于内存进行实现的,不过也可以通过对应的方式实现nacos等动态配置刷新
基本概念
在sentinel主要的概念主要有资源和规则
资源:资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码
规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
sentinel的核心功能就是对流量进行控制,防止服务器在某个时间段内被大流量打崩掉,以下是官网的一个比较形象的图
规则类型
其实sentinel里面要做的就是定义各种规则,然后对这些规则进行校验,只要违反了定义的规则那就会进行拦截,源码逻辑并不复杂,复杂的反而是这些规则的校验逻辑,也就是算法,对于算法本人并不是很熟悉,所以本系列文章更多的只是在讲述逻辑,对于算法尽可能描述,如果是想看算法的读者就不需要在这里看了,本人这方面知识目前还有很大的缺失
官网对于规则的描述也是比较清楚的,可以参考这个
规则分类
流量控制规则:控制流量的,在我们能预知到系统承载的情况下进行的配置
熔断降级规则:也可以理解为容错,当某个服务挂掉以后为了不影响其他调用做的工作
系统保护规则:cpu,线程数,入口总算等限制
来源访问控制规则 :访问来源的控制
热点参数规则: 热点参数的特殊控制
以上只是简单的描述,具体后面再一个个进行说明,也可以参考官方文档的描述
源码位置
Sentinel源码位置在github上,地址为
里面主要有几个模块,见下图,其中比较核心的是core和dashboard
以上为基本的情况,本系列文章主要就是针对sentinel-core模块进行分析的,其他模块并不涉及,有兴趣的可以下载源码自己分析