Spring Cloud for Alibaba 之 简单集成 Sentinel (4)
一、 Sentinel 相关
Sentinel 是什么
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。
Sentinel 是面向分布式服务架构的轻量级流量控制产品,以资源为维度,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。
Sentinel 与Hystrix 对比
详细的对比,可以看这里 (Sentinel 与 Hystrix 的对比)https://yq.aliyun.com/articles/623424 ,
总结一句话:Sentinel 更轻量,性能更强,适用场景、框架更多,更灵活!
Sentinel 的源码与 原理解读
可以看看 简书(六道木)的文章: https://www.jianshu.com/nb/34444279
理解了 Sentinel 的相关概念,node、调用链,降级等源码,大部分还是比较容易懂的。 带预热功能的滑动窗口代码,本人惭愧,有点不是太明白。
二、 Sentinel 控制台启动
下面,我们开始在原有的工程代码上面,接入Sentinel 控制功能。
1. 下载 Sentinel dashboard 控制台。
直接在github 上的Sentinel开源项目 的release 页面 https://github.com/alibaba/Sentinel/releases,下载jar包sentinel-dashboard-1.6.3.jar
下载后,进入 jar的目录页面,控制台输入: java -Dserver.port=7070 -Dcsp.sentinel.dashboard.server=localhost:7070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar 启动
dashboard 工程,其实内嵌了Sentinel client组件,会定期像控制台发送心跳信息,除了配置控制台的web端口,还有配置控制台的相关信息
参数说明: server.port=7070 ## 控制台web端口 csp.sentinel.dashboard.server=localhost:7070 ##控制台访问url project.name=sentinel-dashboard ##控制台项目名称
2. 启动后页面
启动后,在浏览器输入: http://127.0.0.1:7070 ,默认用户名、密码:sentinel / sentinel 可以进入页面,显示如下:
可以点击左边相关菜单,查看相关页面进行体验。
三、 项目接入Sentinel组件
1. 简单接入Sentinel
简单接入Sentinel ,以dubbo为例, 需要引入 sentinel-core、 sentinel-apache-dubbo-adapter(包含了core包)、sentinel-transport-simple-http,
实际引入包如下:
<!-- sentinel.version = 1.6.3 -->
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>${sentinel.version}</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-apache-dubbo-adapter</artifactId> <version>${sentinel.version}</version> </dependency>
sentinel-transport-simple-http 包是客户端向 dashboard 发送心跳、本项目流量统计信息
sentinel-apache-dubbo-adapter 包是对dubbo的适配 ,provider端 主要代码为:SentinelDubboProviderFilter ,在服务提供端的filter, 对入口流量进行控制
2. sentinel 配置
sentinel 启动的时候,需要配置 几个基础信息:
1. project.name : 项目名称
2. csp.sentinel.api.port: 本地端口,用于接收 dashboard 请求 ,
3. csp.sentinel.dashboard.server : 控制台dashboard,用于对控制台发送心跳、统计信息
配置方式:
1. 可以在启动的时候通过 JVM -D 参数指定, 在IDE 里面,可以配置
2. main启动的时候,通过System.setProperty 设置。效果等同1,比较容易复制粘贴。
3. 除 project.name
以及日志的配置项(如 csp.sentinel.log.dir
)之外,其余参数还可通过 properties 文件指定,路径为 ${user_home}/logs/csp/${project.name}.properties
4. 接入alicloud-sentinel-starter 组件,就可以配置在配置文件了,(实际效果也是读取配置,进行第2步,这个后续讲)
第1种配置太复杂,不利于IDE里面批量启动, 第3种,配置分几个地方,改起来不方便 。 目前我在 IDE里面调试,启动应用,用的第2种。
代码如下:
@EnableDiscoveryClient @SpringBootApplication public class ProductDemoApplication { static{ initSentinelProperty(); } private static void initSentinelProperty(){ //启动设置相关配置 System.setProperty("java.net.preferIPv4Stack","true"); //启动错误时,官方推荐只用ipv4 的ip System.setProperty("project.name","product-demo"); System.setProperty("csp.sentinel.api.port","7081"); System.setProperty("csp.sentinel.api.port","127.0.0.1:7070"); } public static void main(String[] args) { SpringApplication.run(ProductDemoApplication.class, args); } }
配置后,启动应用。 启动后,一定要对应用访问、调用相关资源,否则sentinel不会启动心跳逻辑,dashboard不会显示。
3. 结合dashboard 进行限流示例
1. 启动product-demo,order-demo ,访问order-demo,底层调用product-demo 的服务,调用几次后,会再dashboard看到相关数据。
访问资源后,在Sentinel 控制台,出现了相关资源、实时监控数据信息。
2. 对资源 /test/testProductByName/哈哈 设置限流,QPS为2 ,其他拒绝,请求多次后,浏览器显示: Blocked by Sentinel (flow limiting)
规则设置:
在 Sentinel 里面显示图表如下:
4. 总结
Sentinel 基本使用非常简单,AliCloud 对很多框架做了适配,简单引入相应的adapter即可。具体的使用,可以参考 sentinel的wikii :https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5
然而,在生产中使用,还需要进行相应的其他配置与改造,这个后续学习。
posted on 2019-08-21 11:46 qingcaolin 阅读(479) 评论(0) 编辑 收藏 举报