流量控制服务降级神器之Sentinel(1)为什么要选择Sentinel

一、Sentinel是什么

1.什么是Sentinel

Sentinel是阿里巴巴公司开源的面向分布式环境的轻量级流量控制框架

2.主要功能

Sentinel是以流量为切入点,通过多个维度来保护服务和维持系统稳定性的工具

(1)流量控制

用于调整网络包的发送数据,Sentinel相当于一个调配器:

  • 将随机的请求变成顺序的请求
  • 将不同格式的请求格式化为统一的格式的请求

Sentinel在流量控制中的作用

流量控制可以从以下几个角度来说明

  • 被作用对象:如资源本身,以及资源调用链路和资源调用关系等
  • 衡量标准:即运行的指标,如QPS、线程池数量、系统负载等
  • 流控效果:即处理的结果,直接限流、冷启动、排队等
(2)熔断降级

调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积,避免这种情况的手段,不稳定的表现:

  • 调用(响应)超时
  • 异常比例升高

针对不稳定的状况,处理的手段:

  • 通过并发线程数进行限制
  • 通过响应时间对资源进行降级
(3)系统负载保护

在系统维度提供保护,如系统资源占用比例过高,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

3.核心概念
  • 资源:即被保护的对象,由Sentinel定义的代码(块),即被保护的对象,可能是方法名、函数、服务或URL等
  • 规则:衡量条件,针对资源设定的规则,包括流量控制规则、熔断降级规则和系统保护规则
4.组成部分
(1)sentinel的运行过程

sentinel运行过程

  • 通过控制台新增、更新、删除规则,通过配置中心将更新后的规则数据更新到数据源中
  • 客户端监听规则中心的实时变更
(2)sentinel组件的组成部分

整个Sentinel组件,由以下几个部分组成:

  • 客户端:即调用端
  • 控制台:监控客户端、管理规则,以及与客户端之间的通信
  • 动态规则配置中心:存储规则以及与推送相关规则到客户端
    • Nacos
    • Apollo
    • Zookeeper
  • 数据源:存储规则数据的组件
    • 本地内存
    • 文件中
    • Nacos
    • Zookeeper
    • Redis
    • Apollo

二、为什么要选择Sentinel

选择sentinel主要从两个方面来考虑,一是Sentinel本身的特性,满足我们的项目场景,二是Sentinel与同类产品的比较

1.Sentinel的特性

Sentinel的特性

2.Sentinel与同类产品的比较
比较类型 Sentinel Hystrix resilience4j
隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离
熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间
实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于 RxJava) Ring Bit Buffer
动态规则配置 支持多种数据源 支持多种数据源 有限支持
扩展性 多个扩展点 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持 Rate Limiter
流量整形 支持预热模式、匀速器模式、预热排队模式 不支持 简单的 Rate Limiter 模式
系统自适应保护 支持 不支持 不支持
控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看 不提供控制台,可对接其它监控系统

本章内容主要参考Sentinel官方wiki