扛住阿里双十一高并发流量,Sentinel是怎么做到的?


扛住阿里双十一高并发流量,Sentinel是怎么做到的?

文章插图
 
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景
本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较
基本介绍1 名词解释
  • 服务限流 :当系统资源不够,不足以应对大量请求,对系统按照预设的规则进行流量限制或功能限制
  • 服务熔断:当调用目标服务的请求和调用大量超时或失败,服务调用方为避免造成长时间的阻塞造成影响其他服务,后续对该服务接口的调用不再经过进行请求,直接执行本地的默认方法
  • 服务降级:为了保证核心业务在大量请求下能正常运行,根据实际业务情况及流量,对部分服务降低优先级,有策略的不处理或用简单的方式处理
服务降级的实现可以基于人工开关降级(秒杀、电商大促等)和自动检测(超时、失败次数、故障),熔断可以理解为一种服务故障降级处理
2 为什么需要限流降级
系统承载的访问量是有限的,如果不做流量控制,会导致系统资源占满,服务超时,从而所有用户无法使用,通过服务限流控制请求的量,服务降级省掉非核心业务对系统资源的占用,最大化利用系统资源,尽可能服务更多用户
3 Sentinel简介
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

文章插图
 
Sentinel: 分布式系统的流量防卫兵,是阿里中间件团队2018年7月开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保护系统服务的稳定性
Sentinel 的开源生态:
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

文章插图
 
功能特性1 总体介绍
Sentinel 具有以下特征:
丰富的应用场景:秒杀限流,消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
完备的实时监控:Sentinel 同时提供实时的监控功能 。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合 。只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口 。可以通过实现扩展接口来快速地定制逻辑 。例如定制规则管理、适配动态数据源等
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

文章插图
 
Sentinel 分为两个部分:
控制台(Dashboard) 基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器
核心库(JAVA 客户端) 不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持
2 控制台特性
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

文章插图
 
  • 实时监控
  • 支持自动发现集群机器列表、服务健康状态、服务调用通过/拒绝QPS、调用耗时、图表统计
  • 规则管理及推送
  • 支持在界面配置流控、降级、热点规则,并实时推送
  • 鉴权
  • 控制台支持自定义鉴权接口,提供基本登录功能
3 核心库功能特性
(1) 应用流控
针对指定应用实例的流量控制,监控应用流量QPS或并发线程数,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性
流量控制的手段包括:
  • 直接拒绝
  • Warm Up,即预热/冷启动方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被瞬间压垮
  • 匀速排队,严格控制请求通过的间隔时间,让请求以均匀的速度通过
(2) 集群流控
不同于应用流控根据单个应用实例阈值执行限流检查,集群流控只对整个集群调用总量进行限流,例如以下场景:
  • 限制某个用户调用某个API的总QPS,提供API的应用在多个机器上部署了多个实例
  • 因为多个应用实例流量不均匀,导致集群调用总量没有到的情况下某些机器就开始限流
仅靠单机维度去限制的话会无法精确地限制总体流量,通过集群精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果


推荐阅读