深入理解Sentinel专栏封面

深入理解Sentinel

此专栏于2020年8月18日在GitChat上架,后由于GitChat被CSDN收购,专栏同步至CSDN。2021年笔者将此专栏改版成书,于2022年出版《实战Alibaba Sentinel》。2024年笔者将此专栏同步至个人博客网站,并免费公开,但禁止转载。


序言:为什么写这个专栏文章封面
序言:为什么写这个专栏

随着微服务的流行,很多公司也在逐渐的将单体架构项目重构为微服务项目,单体架构微服务化后也将面临更多的挑战。服务的调用错综复杂,如何保护自身不被其它服务打垮也是项目微服务化后重点需要考虑的问题。

01-分享一次服务雪崩问题排查经历文章封面
01-分享一次服务雪崩问题排查经历

笔者想跟大家分享笔者经历的一次服务雪崩事故,分析导致此次服务雪崩事故的原因。或许大多数读者都有过这样的经历,这是项目给我们上的一次非常宝贵的实战课程。

07-Java SPI及SPI在Sentinel中的应用文章封面
07-Java SPI及SPI在Sentinel中的应用

SPI全称是Service Provider Interface,直译就是服务提供者接口,是一种服务发现机制,是Java的一个内置标准,允许不同的开发者去实现某个特定的服务。

10-限流降级与流量效果控制器(上)文章封面
10-限流降级与流量效果控制器(上)

从这篇开始,我们学习Sentinel提供的几个实现降级功能的ProcessorSlot,这些ProcessorSlot检查实时指标数据是否达到规则所配置的阈值,当达到阈值时,或抛出Block异常或采取流量效果控制策略处理超阈值的流量。

11-限流降级与流量效果控制器(中)文章封面
11-限流降级与流量效果控制器(中)

QPS限流的默认算法是通过判断当前时间窗口(1秒)的pass(被放行的请求数量)指标数据判断,如果pass总数已经大于等于限流的QPS阈值,则直接拒绝当前请求,每通过一个请求当前时间窗口的pass指标计数加1。

12-限流降级与流量效果控制器(下)文章封面
12-限流降级与流量效果控制器(下)

冷启动并非只在应用重启时需要,在一段时间没有访问的情况下,连接池存在大量过期连接需要待下次使用才移除掉并创建新的连接、一些热点数据缓存过期需要重新查数据库写入缓存等,这些场景下也需要冷启动。

13-熔断降级与系统自适应限流文章封面
13-熔断降级与系统自适应限流

Sentinel支持对同一个资源配置多个相同类型或不同类型的规则,在配置了限流规则的基础上,我们还可以为同一资源配置熔断降级规则。当接口的QPS未达限流阈值却已经有很多请求超时的情况下,就可能达到熔断降级规则的阈值从而触发熔断,这就能很好的保护服务自身。

14-黑白名单限流与热点参数限流文章封面
14-黑白名单限流与热点参数限流

黑白名单过滤功能更像是一种授权机制,它简单的将权限分为有权限和无权限两种情况,如果支持冲突,可使用优先级策略解决冲突问题。

15-自定义ProcessorSlot实现开关降级文章封面
15-自定义ProcessorSlot实现开关降级

开关降级在我们公司的电商项目中是每个微服务都必须支持的一项功能,主要用于活动期间、每日流量高峰期间、主播带货期间关闭一些无关紧要功能,降低数据库的压力。

16-Sentinel动态数据源:规则动态配置文章封面
16-Sentinel动态数据源:规则动态配置

经过前面的学习,我们知道,为资源配置各种规则可使用Sentinel提供的各种规则对应的loadRules API,但这种以编码的方式配置规则很难实现动态修改。

17-Sentinel主流框架适配文章封面
17-Sentinel主流框架适配

为了节省这些步骤,Sentinel提供了对主流框架的适配,如适配Spring MVC、Webflux、Dubbo、Api Gateway等框架。

18-Sentinel集群限流的实现(上)文章封面
18-Sentinel集群限流的实现(上)

由于请求倾斜的存在,分发到集群中每个节点上的流量不可能均匀,所以单机限流无法实现精确的限制整个集群的整体流量,导致总流量没有到达阈值的情况下一些机器就开始限流。

19-Sentinel集群限流的实现(下)文章封面
19-Sentinel集群限流的实现(下)

集群限流,我们可以结合令牌桶算法去思考,服务端负责生产令牌,客户端向服务端申请令牌,客户端只有申请到令牌时才能将请求放行,否则拒绝请求。