开发者学堂课程【微服务实战-服务熔断 - Sentinel :使用场景演示】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/618/detail/9424
使用场景演示
内容介绍:
一、 启动控制台
二、 Spring Cloud Web 应用接入
三、 Spring Cloud Gateway 网关接入
四、 Dubbo 服务接入
五、 手动埋点
一、 启动控制台
首先要演示这几个场景,需要启动 sentinel 的控制台,从控制台上查看实时的监控限流效果,并且在控制台上实时的配置流控降级规则。
下载控制台 jar 包
https://github.com/alibaba/Sentinel/releases
设置启动参数并启动
java -Dserver.port=8080 I
-Dcsp.sentinel.dashboard.server=localhost:8080 l
-Dproject.name=sentinel-dashboard l
-jar sentinel-dashboard.jar
访问 sentinel 控制台
访问控制台后出现的登录页面,默认账号、密码都是 sentinel
操作演示:
在命令行里输入控制台的启动参数,通过 jar 包的形式来启动控制台。
控制台启动成功以后,可以在浏览器中访问对应的地址。输入默认的用户名和密码,默认的用户名和密码都是 sentinel。
登录以后,就可以看到 sentinel 的控制台。sentinel 的控制台自身也作为一个普通的web 应用接入 sentinel,所以可以在 sentinel 的控制台上看到控制台本身的应用。可以看到 sentinel 控制台,所有的外部接口以及一些外部接口的实时监控。
二、 Spring Cloud Web 应用接入
Spring Cloud Web 应用接入 sentinel 只需要利用 Spring Cloud 的阿里巴巴即可快速接入 sentinel。
首先引入依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2.1.0.RELEASE
通过 Spring 配置文件配置 Sentinel 相关参数
spring.application.name=web-api-demo
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.filter.url-patterns=/*
配置控制台的地址配置以后 spring cloud 外部应用可以自动的接入 sentinel 的控制台。
Spring Cloud 阿里巴巴支持 Spring Web、Spring WebFlux、RestTemplate
Demo 地址: https//github.com/sentinel-group/sentinel-guides/tree/master/sentinel-guide-spring-cloud
演示 Spring Cloud Web 应用的 Demo:
根据 Demo 地址上下载 demo 源码,demo 应用一共分为几个模块,包括一天要演示的全部的场景。Demo-gateway 是一个 spring cloud gateway 的网关,作为最上层的流量入口,去访问底层的一些服务。
Web-api-demo,则是我们要演示的外部应用。dubbo- provider 则会启动一个dubbo 的服务提供端。Web 服务会通过 dubbo 的电容端来调 dubbo- provide,这今天 demo 的一个基本结构。
演示 Web-api-demo:
Web-api-demo 是一个基本的 web 应用。web 应用中引入了 Spring Cloud、阿里巴巴、sentinel。引入之后,在 spring cloud 的配置文件中进行相关的配置。
演示 web 应用的限流:
首先,由于 web 应用需要调 dubbo 服务,因此先启动 dubbo- provide 端。启动以后,再启动 web 应用,web 应用里的 controller 有两个 API。在 web 应用启动之后,可以调这两个 API。API 在9669端口,调 demo Time 这个 API 可以看到有成功的返回值。
刚才已经在 spring 的配置文件中配置了电脑的相关配置。刷新控制台就能看到 web应用。
在 web 应用中能看到刚才第二个 web 接口。由于 web 应用,也是通过调 double 服务端的形式来返回值的,所以也能看到对应的 double 服务。
若希望对 default 进行限流。可以在+流控配置一个流控规则。
新增流控规则
资源名:/demo/time
针对来源:default
阈值类型:QPS
单机阈值:1
是否集群:否
快速地访问 demo Time,可以看到返回了 Blocked by sentinel ( flow limiting)的限流的这样一个默认页面,代表流量被限制。再来多刷新几次,可以看到限流是生效的。
可以在实时监控页面。看到刚才的请求的请求调量。它是横为一的。代表我们的流量被限制到了 QPS 为一的。
三、 Spring Cloud Gateway 网关接入
Spring Cloud Gateway 网关接入只需要在 Spring Cloud Gateway 中引入 spring cloud starter alibaba sentinel 以及 spring cloud alibaba Gateway 这两个依赖。
引入依赖,自动生效
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2.1.0.RELEASE
com.alibaba.cloud
spring-cloud-alibaba-sentinel-gateway
2.1.0.RELEASE
引入这两个以后,Spring Cloud Gateway 网关就会自动接入 sentinel,在配置文件中配置的路由会自动纳入 sentinel 的管控之中。
接入控制台还需要在 spring 配置文件中配一下 sentinel 的相关参数,指定控制台的地址以及应用名称。
通过 Spring 配置文件配置 Sentinel 相关参数
spring.application.name=demo-gateway
spring.cloud.sentinel.transport.dashboard=localhost:8080
Demo地址: https/Igithub.com/sentinel-group/sentinel-guides/tree/master/sentinel-guide-spring-cloud
支持路由维度和自定义API维度的监控和限流
演示Spring Cloud Gateway网关接入sentinel的使用:
通过 Gateway 获取 Demo,Spring Cloud Gateway 应用,是一个非常简单的应用,直接通过依赖接入 spring cloud gateway。同时引入 Spring Cloud 的阿里巴巴的相关依赖,直接接入 sentinel 的相关知识。在 spring 的配置文件中,配置了应用名,以及路由。
可以看到有两个路由, foo-service-route 路由和 httpbin-route 路由。
访问8090/demo/time,访问几次之后,可以在控制台上看到 gateway 的应用,以及对 foo-service-route 路由的访问量。
设置 demo-gateway 的流控规则
API 类型:Route ID
API 名称:foo-service-route
针对请求属性: 打开
参数属性:URL 参数
URL 参数名称:ua
阈值类型:QPS
QPS 阈值:1
间隔: 2秒
流控方式:快速失败
Burst size:0
设置之后,访问8090/demo/time,因为没有带参数,故限流无效,带上参数后,限流生效。
这就是 gateway 网关限流基本的使用。
四、 Dubbo 服务接入
Dubbo 服务接入只需要引入 adapter 依赖。
引入整合依赖,自动接入 Sentinel
com.alibaba.csp
sentinel-apache-dubbo-adapter
1.6.3
引入控制台通信相关依赖
com.alibaba.csp
sentinel-transport-simple-http
1.6.3
设置启动参数,接入控制台
-Dcsp.sentinel.dashboard.server=localhost:8080
-Dproject.name=dubbo-provider
Demo地址: https:/Igithub.com/sentinel-group/sentinel-guides/tree/master/sentinel-guide-spring-cloud
Dubbo Provider
QPS 模式限流
按调用来源限流
Dubbo Consumer
控制调用的并发数
服务降级
dubbo-provider 是 dubbo 的提供方,提供 hello 和 time 2个服务
访问外部接口,在 foo-dubbo-provider 中的簇点链路,可以看到应用下的实时调用数据。
Dubbo 生产支配支持服务和服务方法两个力度的流控降级。
foo-dubbo-provider 可以对服务占用进行限制以及降级的服务。
在 dubbo-provider 端配置 K8s 流控规则,保护流控本身。
在 Consumer 端可以配置流控和流控降级规则。
五、手动埋点(手动定义资源)
未安装 sentinel 和 dubbo,却想使用流控降级的方法。
引入依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2.1.0.RELEASE
通过 API 或注解方式埋点
原始 API: SphU.entry(resource),埋点的资源名即为控制台上的资源名。
注解:@SentinelResource
Entry entry = null;
try {
entry = SphU.entry("HelloWorld");
/受保护的业务逻辑
} catch (BlockException e){
//限流处理逻辑
// fallback
} finally {
If (entry != null){
entry.exit();}
@SentinelResource(blockHandler = "fooBlockHandler"")
public String hello(String msg){return "hello " +msg; }