一、简介:
wiki:https://github.com/alibaba/Sentinel/wiki
选择:
♥ 开源,成熟(功能完备、实际应用),活跃(功能维护及拓展)
♥ 更轻量:依赖资源少;api方式或者注解方式资源定义;提供扩展入口(自定义slot规则)
♥ 性能损耗小:只有在业务单机量级超过 25W QPS 的时候才会有一些显著的影响(5% - 10% 左右)
♥♥ 资源,规则分离:埋点资源,按需配置应用规则
核心:资源 规则
资源:万物皆资源,通过API定义的任何代码
规则:系统保护、限流,熔断降级等规则
总体框架:
资源Entry对象 slot chain
熔断降级:
隔离方式:信号量,控制并发线程数(规避线程池隔离方式弊端:预设线程池资源 上下文切换)
降级策略:
♦ 平均响应时间 (DEGRADE_GRADE_RT=0):秒级,passCount>=5
♦ 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO=1):秒级,qps >= 5
♦ 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT=2):分钟级
怎么使用:
定义埋点资源
配置规则:动态
二、Sentinel 配置:
1、引入依赖:
2、添加配置:
3、规则数据源配置:
a)自定义pull型规则动态数据源:服务每秒拉取配置,有变更则更新规则应用
数据源定义:
规则配置:uc:rules:degrade
[{
"resource": "xxxResource", //应用资源名称
"count": 0.5, //根据 grade 设置,代表 响应时间阈值 | 异常比例(异常数占总数比例)| 异常阈值
"grade": 1, //降级策略 0 平均响应时间 1 异常比例 2 异常数
"limitApp": "default",
"timeWindow": 4 //时间窗口,单位 s,触发规则后,在接下的时间窗口之内,对这个方法的调用都会自动地熔断
} ]
b)apollo动态配置源
依赖:
配置:
配置文件:yml文件