SpringCloud实战-Sentinel简介

SpringCloud实战-Sentinel简介

什么是Sentinel?

通过Sentinel官方的介绍,我们知道Sentinel是一个面向分布式服务架构的轻量级的高可用流量控制组件,其主要以流量为切入点,从流量的控制、服务熔断降级、服务负载保护等多个方面来提升系统的稳定性。

要理解Sentinel所提供的功能,第一需要了解关于Sentinel中提到的资源的概念。在Sentinel架构中,资源可以用来表明一个Java程序中的任何的内容。例如在服务程序中提供的一段代码或者是是一个URL地址,这些都可以作为是Sentinel所要去监控的资源。

在定义了资源之后,需要在Sentinel中去定义以什么样的方式去保护这些资源,这个整个的过程就是Sentinel定义规则的过程。开发者可以围绕着这些资源的使用方式来设定对应的使用规则,包括流量规则、熔断规则、服务保护规则等等。在这些规则之上,还可以进行动态调整规则,可以做到实时的流控和熔断服务降级。

SpringCloud实战-Sentinel简介

从功能实现的方面来看,Sentinel与Hystrix超级接近,其比较如下。(图片来源网络)

SpringCloud实战-Sentinel简介

从整体比较来看,Sentinel相对于Hystrix功能上是比较强劲一些,并且在常用框架的支持上也比Hystrix要多。

Sentinel的核心功能

SpringCloud实战-Sentinel简介

图片来源网络

根据上图所示,我们可以知道Sentinel的功能,大致可以分为控制台和核心库支持两个主要部分。具体功能如下

控制台

Sentinel控制台主要用来完成管理规则的推送、资源使用监控、集群限流、机器发现等内容。

1、实时监控

支持对于集群中的机器的自动发现,并且对服务的健康状态、失败情况、QPS等内容进行图表统计操作。

2、规则管理推送

支持在页面上对流控、服务降级、热点规则等内容进行管理,并且将这些规则实时的推送到服务集群中。

3、鉴权服务

支持在控制台中实现自定义的接口鉴权,并且提供了基本的登录管理等功能。

核心库

在Sentinel中不会依赖其他的第三方库或者是框架,它能够稳定的运行在Java7以上的版本环境中。并且对于Dubbo、Spring Could等框架也有比较好的支持。

1、应用流控

可以根据规则对指定的实例进行流量控制,监控服务实例的QPS或者是并发线程数等,当并发达到指定的阈值的时候,对流量进行控制,这样可以有效的避免由于瞬时的流量高峰导致应用不可用的情况发生。

2、集群流控

应用流控是对单个的应用服务做的流控操作,而集群流控则是对整个的服务集群进行的流量控制操作,它能够准确的控制集群的访问总量,然后结合每个机器得到一个比较合理的流控方案,这样可以更好的实现集群中的流量控制。

3、网关流控

Sentinel还支持了对于Spring Cloud Gateway、Zuul等API网关进行流量控制。

4、服务熔断

在一条调用链路上,发现了某个服务无法提供服务的时候,或者是由于网络异常、逻辑异常等导致的服务不可用。就可以通过熔断机机制来让请求快速失效,从而避免发生大面积的服务雪崩的情况。

5、热点参数限流

所谓的热点及短期内被频繁访问的数据,而对热点参数限流访问则是对请求中包含热点数据的请求进行流量统计,并且根据预先配置的阈值或者是流控等规则,对包含热点参数的资源调用进行限流。

6、系统自适应限流

系统自适应限流方案是可以根据当前系统的流量来对各种资源进行均衡操作,并且在动态运行过程中寻找一个动态的平衡点,将所有的指标配置到一个合适的阈值来达到高效流控的效果。而不是对某个指标来进行单方面的提高或者是降低,来达到限流操作的目的。

7、黑白名单流控

所谓的黑白名单就是指支持那些IP或者是那些规则的请求可以去访问。

Sentinel核心概念

Entry

在对Sentinel的资源发起调用的时候,每次的调用都会创建一个Entry对象,并且在当前对象内部会保存当前调用的所有信息。

Slot

Entry对象被创建的同时,Sentinel会创建一系列的功能卡槽Slot,这些卡槽有着各自不同的功能。通过责任链设计模式将这些Slot串联到一起,然后利用不同的Slot来分工合作完成对于流量控制的核心功能,如下图所示(图片来源网络),Slot可以大致分为两种一种是统计类的Slot一种是决策类的Slot。

SpringCloud实战-Sentinel简介

滑动窗口

一般的我们常用的限流算法主要有三种,漏斗桶算法、令牌桶算法以及滑动窗口算法。Sentinel采用的是滑动窗口的方式来实现对于流量的控制。

这里所说的“窗口”,是指一段可以访问的时间。根据上图可以知道,无论是限流还是服务降级,都要统计过去一段时间内的流量,根据对应的访问流量来进行决策。从这个角度上来讲,为什么要使用窗口这个概念就容易理解了。

假设有1分钟的访问时间,我们将1秒钟看做一个窗口,那么1分钟就有60个窗口,然后对于每个窗口期的流量进行统计,来决定下一个窗口期采用什么样的流量策略。在整个过程中窗口规则是不变的,我们可以通过时间机制来讲一个窗口移动到下一个窗口,整个的过程就被称为是滑动窗口算法。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...