高可用流量管理框架 Sentinel

高可用流量管理框架 Sentinel

Apache 2.0
Java
跨平台
阿里巴巴
2018-08-06
小鼠标李豪

Sentinel 是面向微服务的轻量级流量控制框架,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 的历史

  • 2012 年,Sentinel 诞生,主要功能为入口流量控制。

  • 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。

  • 2018 年,Sentinel 开源。

Sentinel 基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

Sentinel 功能和设计理念

流量控制

什么是流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:


流量控制设计理念

流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;

  • 运行指标,例如 QPS、线程池、系统负载等;

  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

熔断降级

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段:

  • 通过并发线程数进行限制

和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

  • 通过响应时间对资源进行降级

除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

系统负载保护

Sentinel 同时对系统的维度提供保护。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

Sentinel 是如何工作的

Sentinel 的主要工作机制如下:

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。

  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。

  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

的码云指数为
超过 的项目
加载中

评论(3)

黑曼巴hy
黑曼巴hy
好用
parselife
parselife
有人用过吗
巴拉迪维
巴拉迪维
测试

Sentinel 发布 v1.4,添加集群流控功能

自去年10月底发布GA版本后,Sentinel在近期发布了另一个里程碑版本v1.4(最新的版本号是v1.4.1),加入了开发者关注的集群流控功能。 一、为什么需要集群流控功能? 假设我们希望给某个用户限...

阿里中间件开源组件 Sentinel 发布首个官方推荐可生产版本

近日,阿里中间件开源组件Sentinel 发布首个官方推荐可生产版本:1.3.0-GA ,该版本包括 Sentinel 控制台功能的完善和一些 bug 修复,以及其它的产品改进,是一个具有里程碑意义的生产可用版...

2018/11/02 09:20

阿里流量控制组件 Sentinel 被列入 CNCF 云原生全景图谱

近日,CNCF 发布了最新版本的 Cloud Native Landscape ,阿里巴巴轻量级流量控制组件 Sentinel 被列入云原生全景图谱,位于编排和管理模块象限中,其商业化产品应用高可用服务 AHAS 也被列入...

2018/10/23 11:00

Sentinel 0.1.1 发布,阿里中间件高可用流量管理框架

Sentinel 0.1.1 已发布,主要修复和改进了一些问题,并增加了以下新特性: 增加 Nacos、ZooKeeper、Apollo 动态数据源适配 增加注解支持,可以方便地利用注解定义资源并配置 fallback 函数 ...

2018/08/09 12:55

阿里巴巴开源 Sentinel,进一步完善 Dubbo 生态

近日,阿里巴巴中间件团队宣布开源 Sentinel,并发布了首个社区版本v0.1.0。 Sentinel 作为阿里巴巴“大中台、小前台”架构中的基础模块,覆盖了阿里的所有核心场景,因此积累了大量的流量归...

2018/08/03 08:07

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

Redis Sentinel机制与用法(一)

Redis Sentinel机制与用法(一)

2015/10/06 09:24
16K
5
redis哨兵(sentinel)原理

redis哨兵

2016/01/04 17:19
4.4K
2
redis-哨兵模式

前言 redis的主从复制模式,一旦master宕机,需要人工将slave升级为master,还得通知client端更新master地址。 redis从2.8开始提供了sentinel(哨兵)模式来实现自动故障转移。 sentinel模式是...

2018/11/15 15:04
10
0
Redis Sentinel源码分析(一)

Base 2.8.7 在代码分析前,先总体介绍下sentinel 的机制。 1. 下线定义 sentinel对下线有两种定义: a.主观下线(sdown):sentinel实例本身对服务实例的判断 b.客观下线(odown):多个sen...

2015/12/23 13:26
9
0
zabbix 监控redis sentinel

通过externalscripts监控redis sentinel的状态,但是只支持监控一个redis集群的sentinel,因为只监控master0,要支持多集群的sentinel的话自己写个返回各个master0-xxx的json格式的脚本,配合...

2016/04/01 15:20
102
1
[喵咪Redis]Redis-Sentinel

redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 redis 的时候 , redis 挂掉了或者是一些其他问题都是致命的 , 那么怎么做到 redis 的高可用呢 , 官方有提供一...

2016/06/29 13:00
101
0
Redis Sentinel 工作原理和配置文件详解

Redis Sentinel 工作原理和配置文件详解

2016/04/13 10:19
142
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部