1.Sentinel和Hystrix的区别
在SpringCloud当中支持多种服务保护技术,早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架,这里我们做下对比:
Sentinel | Hystrix | |
隔离策略 | 信号量隔离 | 线程池隔离/信号量隔离 |
熔断降级策略 | 基于慢调用比例或异常比例 | 基于失败比率 |
实时指标实现 | 滑动窗口 | 滑动窗口(基于 RxJava) |
规则配置 | 支持多种数据源 | 支持多种数据源 |
扩展性 | 多个扩展点 | 插件的形式 |
基于注解的支持 | 支持 | 支持 |
限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持 |
流量整形 | 支持慢启动、匀速排队模式 | 不支持 |
系统自适应保护 | 支持 | 不支持 |
控制台 | 开箱即用,可配置规则、查看秒级监控、机器发现等 | 不完善 |
常见框架的适配 | Servlet、Spring Cloud、Dubbo、gRPC 等 | Servlet、Spring Cloud Netflix |
通过对比我们可以发现,相较于Hystrix,sentinel功能更为强大。
2.微服务整合sentinel
2.1.启动 sentinel jar 包
我们先把 sentinel 跑起来,我们这里是直接在本地演示没上容器,sentinel 提供了项目的下载地址: Releases · alibaba/Sentinel · GitHub,我们本项目集成的是1.8.1版本,看他的介绍需要你的jdk版本为1.8以上。
往下划,就可以看的到jar包了
下载放到磁盘的一个英文目录下,然后在文件夹里用cmd命令打开命令行窗口,执行以下命令运行sentinel
java -jar sentinel-dashboard-1.8.1.jar
如果你需要修改默认的配置端口,可以使用以下命令:
java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar
用户名密码也可以加上-Dserver修改
配置项 | 默认值 | 说明 |
server.port | 8080 | 服务端口 |
sentinel.dashboard.auth.username | sentinel | 默认用户名 |
sentinel.dashboard.auth.password | sentinel | 默认密码 |
我们这里直接执行就行
启动成功后访问http://localhost:8080页面,就可以看到sentinel的控制台了,输入默认的用户名和密码 sentinel
一开始进来是空白的,这时候他没有监控到任何的服务,因为这时候我们还没有整合到项目中。
2.2.项目中配置 sentinel
前面讲的章节中,我们已经搭建了微服务项目,今天我们直接在这个项目的基础上进行sentinel的整合,如果没有的小伙伴,我这里也提供了,可以参照着进行搭建,以下 address 获取:https://pan.baidu.com/s/1LacvX3CV5LsaKEFAr-QnGg?pwd=fxug 提取码:fxug
我们在 order-service 中整合 sentinel,并连接 sentinel 的控制台
引入 sentinel 依赖
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置控制台
修改order-service服务的application.yml文件,添加下面内容,这里注意的一下,最好不要手打,格式很容易出错,会导致sentinel控制台服务不显示。
server:
port: 8082
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
启动nacos
启动项目的三个服务
访问order-service的任意端点
打开浏览器,访问http://localhost:8088/order/102,这样才能触发sentinel的监控。
然后再访问sentinel的控制台,查看效果:
2.3.控制台问题
途中遇到两个问题引起我控制台页面一片空白
问题1:SpringCloud与sentinel版本不匹配,我一开始搞错了版本,SpringCloud 2.2.6 的版本,而sentinel引下载的jar包为1.8.6的版本,这时候这个控制台死活显示不了服务,就是一片空白,后来降到1.8.1就好了,这个版本对应的关系在SpringCloud Alibaba官网就有,我前面的文章也有讲过了,感兴趣的小伙伴可以翻一下我的微服务专栏面前的章节。
问题2:yml配置文件格式不对,在sentinel官网文档里复制出来的配置,直接粘贴的,也是控制台一片空白,服务死活不出不来,后面把我前一个正常能启动的项目copy了一份配置过去,就解决了,也是折腾半天,这个问题是我在做另一个项目的时候出现的。
还有一点就是sentinel默认是懒加载,所以当你启动了控制台后如果你的服务没有任何请求,他的实时监控面板也是为空的,不过这时候你可以看到服务名称,如果是这种情况,你只需要给后台发送一个请求,面板就会有监控数据了
今天的分享就到这里,下一篇我们讲 Sentinel 的作用,小伙伴们三连支持一下,你的关注就是我的动力~