阿里 Sentinel 源码解析(中)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 阿里 Sentinel 源码解析

LeapArray

字段

image.png

条件(谓词)更新锁,仅在不使用当前桶时使用。

image.png

内部核心数组 array,它的长度为 60,就是有 60 个窗口,每个窗口长度为 1 秒,一分钟走完一轮。

然后下一轮开启“覆盖”操作。

image.png

每个窗口是一个 WindowWrap 类实例。


添加数据的时候,先判断当前走到哪个窗口了(当前时间(s) % 60 即可),然后需要判断这个窗口是否是过期数据,如果是过期数据(窗口代表的时间距离当前已经超过 1 分钟),需要先重置这个窗口实例的数据。


统计数据同理,如统计过去一分钟的 QPS 数据,就是将每个窗口的值相加,当中需要判断窗口数据是否是过期数据,即判断窗口的 WindowWrap 实例是否是一分钟内的数据。


核心逻辑都封装在了 currentWindow(long timeMillis) 和 values(long timeMillis)方法中。


添加数据的时候,我们要先获取操作的目标窗口,也就是

分维度数据统计

currentWindow

Sentinel 在这里处理初始化和过期重置的情况

5.png

获取数据,使用的是

values

  • 返回“有效”窗口中的数据
  • image.png
  • isWindowDeprecated
  • image.png

案例

image.png

红色部分的Context 代表一个调用链的入口,Context 实例设置在 ThreadLocal,所以它是跟着线程走的,如果要切换线程,需要手动切换。

ContextUtil#enter 有俩参数:

  • context name
    调用链的入口,以区分不同调用链路,默认是
  • image.png
  • origin

调用方标识,作用


黑白名单的授权控制

统计诸如从应用 application-a 发起的对当前应用 interfaceXxx() 接口的调用,目前这个数据会被统计,但是 dashboard 中并不展示

进入 BlockException 异常分支,代表该次请求被流量控制规则限制,一般会让代码走入到熔断降级逻辑。当然,BlockException 其实有好多个子类image.png

亦可 catch 具体子类处理。


SphU#entry 方法的参数:


第一个参数

标识资源,通常就是我们的接口标识,对于数据统计、规则控制等,我们一般都是在这个粒度上进行的,根据这个字符串来唯一标识,它会被包装成 ResourceWrapper 实例。


第二个参数

标识资源的类型

image.png

  • EntryType.IN
    入口流量,比如我们的接口对外提供服务,那通常就是控制入口流量
  • EntryType.OUT
  • image.png
  • 默认就是出口流量,它的业务需要调用订单服务,像这种情况,压力其实都在订单服务,那就指定它为出口流量。

流量类型在 SystemSlot 类中用以实现自适应限流,根据系统健康状态来判断是否要限流,如果是 OUT 类型,由于压力在外部系统中,所以就不需要执行该规则。


若在一个方法中写,要注意内层的 Entry 先 exit,才能做外层的 exit,否则会抛出异常。源码角度来看,是在 Context 实例中,保存了当前的 Entry 实例。


目录
相关文章
|
7月前
|
缓存 Kubernetes 网络协议
阿里云DNS常见问题之在手机上使用阿里的私人dns失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
7月前
|
监控 API 开发者
Sentinel之道:流控模式解析与深度探讨
Sentinel之道:流控模式解析与深度探讨
183 0
|
7月前
|
域名解析 缓存 网络协议
阿里云DNS常见问题之阿里的域名解析不对如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【热门开源项目】阿里开源巨擘:Qwen-2 72B深度解析与推荐
在人工智能的浪潮中,开源模型如同璀璨的星辰,指引着开发者们探索未知的领域。而今天,我们将聚焦在阿里云推出的开源模型Qwen-2 72B上,从其项目介绍、技术特点、代码解析等多个角度,深入解析并推荐这一卓越的开源项目。
208 1
|
6月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
152 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
7月前
|
Python
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
|
7月前
|
Android开发 Java Kotlin
阿里P8大佬亲自讲解,android面试题解析
阿里P8大佬亲自讲解,android面试题解析
|
7月前
|
JSON fastjson 数据库
字符编码导致Rapidjson(腾讯开源的json解析库)到Fastjson(阿里开发的Java json解析库)转换失败的原因分析
最近在客户端的开发的过程中,使用到了RapidJson,公司的开发是客户端和数据库端都由不同的人进行开发,我负责的客户端的逻辑开发(使用c++),开发工具同时使用了VS2017和QT的编译环境,使用QT主要是为了客户端界面开发方便,而使用了VS环境主要是维护公司开发的数据库接口库,这个库的唯一作用就是作为一个中间桥梁,使用Rapidjson将数据库接口的json数据格式解析为结构体数据,从而在客户端界面进行展示,或者接收客户端的数据,使用Rapidjson将其转换为json数据,发送给数据库接口以保存数据使用 。不太明白的可以参考我上一篇文章说明Rapidjson的使用过程-Parse解析数组
153 0
|
7月前
|
存储 缓存 运维
阿里云数据库 ClickHouse 云原生版产品解析
ClickHouse 介绍ClickHouse 是一款当前非常流行的开源在线分析型数据库。ClickHouse 主要应用于实时数仓构建、大数据加速分析、宽表日志分析等通用场景,服务于流量漏斗分析,用户行为分析,人群圈选,用户画像,广告投放人群评估、ABTest 、大促分析,CDP/DMP 等业务场景...
214 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2

推荐镜像

更多