Sentinel
(1)Sentinel-概述
(1.1)简介
Sentinel 是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。
Sentinel 基本概念资源
资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。
规则
围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
流控
流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
(1.2)特性
Sentinel的使用可以分为两个部分:
核心库(java客户端): 不依赖任何框架/库,能够运行于Java7以上版本的运行时环境,同时对Dubbo/SpringCloud等框架也有较好的支持
控制台(Dashboard): 基于Springboot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器,主要负责管理推送规则、监控、集群限流分配管理、机器发现等
(2)Sentinel-入门案例
(2.1)添加依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-annotation-aspectj</artifactId>
<version>1.7.1</version>
</dependency>
(2.2)API方式定义资源
@GetMapping(value = "/echo")
public String echo(){
//加载规则
this.initFlowRule();
//定义资源
try(Entry entry = SphU.entry("echo")) {
//被保护的业务代码
return "i am from port:"+ port;
}catch (BlockException e){
return "小葵花妈妈课堂开课啦";
}
}
(2.3)规则定义
热点参数规则
private void initFlowRule(){
ArrayList<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
//设定资源名
rule.setResource("echo");
//设定限流阈值
rule.setCount(2);
//设定限流阈值类型
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
//设定针对的来源
rule.setLimitApp("default");
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
(3)Sentinel-Dashboard使用
访问: https://github.com/alibaba/Sentinel/releases. 下载与项目中对应的版本
打开cmd窗口切换到jar包所在的路径执行命令启动控制台
java -jar sentinel-dashboard-1.7.1.jar
访问:localhost:8080
可以看到Sentinel控制台
项目接入控制台的配置:-Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=operator-web
接下来即可添加一些规则