概述
书接上回: 你来说说什么是限流? ,限流的整体概述中,描述了 限流是什么
,限流方式
和限流的实现
。在文章尾部的 分布式限流
,没有做过多的介绍,选择了放到这篇文章中。给大伙细细讲解一下 Sentinel
附带最权威的官方wiki: 《Alibaba-Sentinel,新手指南》
本篇文章源码地址: https://github.com/jaycekon/SpringBoot
Sentinel 是啥?
分布式系统的流量防卫兵
再引用一下之前我画的图:
流量防卫兵
它具备了哪些能力?
Sentinel 的生态环境
随着 Alibaba
的 Java 生态建设,包括 Spring Cloud Alibaba
,Rocket
,Nacos
等多项开源技术的贡献,目前Sentinel
对分布式的各种应用场景都有了良好的支持和适配,这也是为什么我们选择 Sentinel
学习的原因之一(学习成本低,应用场景多)
Sentinel 核心概念
1、资源
资源
是 Sentinel
中的核心概念之一。最常用的资源是我们代码中的 Java 方法
,一段代码
,或者一个接口
。
Java方法:
@SentinelResource("HelloWorld")
public void helloWorld() {
// 资源中的逻辑
System.out.println("hello world");
}
一段代码:
// 1.5.0 版本开始可以直接利用 try-with-resources 特性,自动 exit entry
try (Entry entry = SphU.entry("HelloWorld")) {
// 被保护的逻辑
System.out.println("hello world");
} catch (BlockException ex) {
// 处理被流控的逻辑
System.out.println("blocked!");
}
一个接口:
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "test";
}
}
配合控制台使用:
2、规则
Sentinel
中的规则
提供给用户,针对不同的场景而制定不同的保护动作,规则的类型包括:
流量
控制规则熔断
降级规则系统保护
规则- 来源访问控制规则
- 热点参数规则
本文主要会讲解 流量
,熔断
和系统保护
这三个规则。
定义规则:
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
//绑定资源
rule.setResource("HelloWorld");
//限流阈值类型
rule.setGrade(RuleConstant.FLOW_GRADE_QPS