Sentinel是分布式服务架构的高可用流量防护组件,主要以流量为入口,帮助开发者从限流、流量整形、断路器降级、系统负载保护、热点保护等多个维度保障微服务的稳定性。Sentinel具有以下特点:丰富的应用场景:Sentinel承担了近10年阿里巴巴双十一流量大促的核心场景,如秒杀(即突发流量控制在系统容量可承受的范围内)、消息削峰填谷、集群流控、下游不可用应用的实时熔断等。完备的实时监控:Sentinel也提供了实时监控功能。在控制台可以看到应用连接的单机秒级数据,甚至可以看到500以下规模集群的聚合运行状态。-box与其他开源框架/库的集成模块,例如与SpringCloud、Dubbo和gRPC的集成。您只需要引入相应的依赖,进行简单的配置,即可快速接入Sentinel。完善的SPI扩展点:Sentinel提供简单易用的完整SPI扩展接口。您可以通过实现扩展接口来快速自定义逻辑。比如自定义规则管理,适配动态数据源等。1.在gitegg-platform-cloud中引入依赖com.alibaba.cloudspring-cloud-starter-alibaba-sentinel2.添加配置management:endpoints:web:exposure:include:'*'3.GitEgg-Platform到gitegg-platform-cloud的application.yml文件重新安装,GitEgg-Cloud更新导入的依赖,启动gitegg-service-system服务,在浏览器中打开http://127.0.0.1:8001/actuato...地址,可以看到返回的Json信息,说明项目Sentinel已经集成。{“blockPage”:null,“appName”:“gitegg-service-system”,“consoleServer”:[],“coldFactor”:“3”,“rules”:{“systemRules”:[],“authorityRule”:[],"paramFlowRule":[],"flowRules":[],"degradeRules":[]},"metricsFileCharset":"UTF-8","filter":{"order":-2147483648,"urlPatterns":["/**"],"enabled":true},"totalMetricsFileCount":6,"datasource":{},"clientIp":"172.16.10.3","clientPort":"8719","logUsePid":false,"metricsFileSize":52428800,"logDir":"","heartbeatIntervalMs":10000}4.在配置文件中添加Sentinel服务地址。默认情况下,Sentinel会在客户端第一次调用时进行初始化,并开始向控制台发送心跳包。也可以配置sentinel.eager=true来取消Sentinel控制台的延迟加载。spring:cloud:sentinel:filter:enabled:truetransport:port:8719#指定sentinel控制台dashboard的地址:127.0.0.1:8086eager:true5.在SystemController.java中添加限流测试方法@ApiOperation(value="限流测试")@GetMapping(value="sentinel/protected")publicResultsentinelProtected(){returnResult.data("访问的是限流测试接口");}6.启动服务,通过浏览器访问新添加的测试接口地址,http://127.0.0.1:8011/system/...,刷新几次,然后打开Sentinel控制台地址,可以看到当前服务的访问状态7、上面说的不对接口限流的情况,现在我们设置接口限流的规则,打开Sentinel控制台,点击左侧限流规则菜单,然后点击“右上角添加新流量控制规则”按钮,在弹出的输入框中,输入需要限制的接口的资源名称,这里我们设置为:/system/sentinel/protected,阈值类型:QPS,单机阈值:20,确定添加。8、为了测试并发请求,我们这里使用压力测试工具Jmeter。具体使用方法是https://jmeter.apache.org/。下载Jmeter后点击新建->测试计划->线程组->HTTP请求-查看果树。我们限流设置的单机阈值是20,我们先把线程组设置成20来检测请求是否会被限流,然后再将线程组设置成100来检测是否限流。从上面的测试结果可以看出,当该值设置为100时,访问失败,返回BlockedbySentinel(限流),说明限流已经生效。9.Sentinel还支持热点参数限流和系统自适应限流。这里只需要在Sentinel控制台配置即可,具体操作和代码这里不再介绍:热点参数限流:什么是热点?热点是经常访问的数据。很多时候我们想统计某个热点数据中访问频率最高的TopK数据,对其访问进行限制。例如:商品ID为参数,统计一段时间内最常购买的商品ID并限制用户ID为参数,对一段时间内访问频繁的用户ID进行热点参数限制。限流会统计传入参数中的热点参数,并根据配置的节流阈值和模式对包括热点参数在内的资源调用进行节流。热点参数限流可以看作是一种特殊的流量控制,只对包含热点参数的资源调用生效。Sentinel采用LRU策略统计最近访问的热点参数,并结合令牌桶算法进行参数级流控。热点参数限流支持集群模式,详细使用指南:https://github.com/alibaba/Se...系统自适应限流:Sentinel系统自适应限流从全局维度控制应用入口流量,结合应用负载,CPU占用率、整体平均RT、入口QPS、并发线程数等多维度监控。通过自适应流量控制策略,可以平衡系统的入口流量和系统负载,使系统尽可能高效。在以最大吞吐量运行的同时,保证系统的整体稳定性,详细使用指南:https://github.com/alibaba/Se...本文源码在https://gitee.com/wmz1930/GitEgg的chapter-14分支。