飞道的博客

Spring Cloud微服务脚手架搭建实战——Sentinel使用实战

317人阅读  评论(0)

前言

上一节我们讲了Sentinel的简介和与Hystrix的对比,本节我们讲解Sentinel的具体使用。

前期准备

  1. 加入pom依赖
		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
  1. 修改Nacos的yml配置

sentinel:
      transport:
        dashboard: localhost:8081
        port: 8719
  1. 启动Sentinel
@echo off
 
java -Dserver.port=8081  -Dsentinel.dashboard.auth.username=Bifang -Dsentinel.dashboard.auth.password=Bifang -jar sentinel-dashboard-1.7.2.jar

@echo on



4. 启动pay服务

实现流控规则

刚才访问了http://127.0.0.1:9003/OrderPay后,sentinel面板中就出现了服务。


添加流控规则

各项功能参数讲解


添加测试


测试

可以发现当点击速度过快后就能发现返回了默认值,禁止了访问。

其他的功能可根据功能讲解图的提示,来体验一下效果


实现降级规则



各参数讲解图

RT规则编码测试

  1. 给接口加上等待时间,模拟业务处理时间
@GetMapping("/testD") 
public String testD()    { 
 { 
	 try { 
	 	TimeUnit.SECONDS.sleep(1);
	 	 } 
 	catch (InterruptedException e) {
 		 e.printStackTrace(); 
 		 }
 	 log.info("testD 测试RT"); return "------testD";    } ;    
  } 
  1. 设置降级规则
  2. jmeter工具测试


    其他的规则请自行测试

热点规则

根据接口传递的参数限流。

  1. 代码
@GetMapping("/testHotKey") 
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey") public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2)
    { 
    	return "------testHotKey";
    	} 
//兜底方法
public String deal_testHotKey (String p1, String p2, BlockException exception){ return "deal_testHotKey";  
} 

  1. 配置规则


    访问接口测试效果。

系统规则

系统规则只是将限流规则提升到了整个服务层面,配置基本没变,只是对整个系统请求起作用,如QPS限制设置为1,则所有接口超过限制都无法访问。

授权规则

设置调用方调用服务的白名单和黑名单,白名单调用发可不被流控规则限制。

集群流控

为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台)。这时候我们很自然地就想到,找一个 server 来专门来统计总的调用量,其它的实例都与这台 server 通信来判断是否可以调用。这就是最基础的集群流控的方式。

另外集群流控还可以解决流量不均匀导致总体限流效果不佳的问题。假设集群中有 10 台机器,我们给每台机器设置单机限流阈值为 10 QPS,理想情况下整个集群的限流阈值就为 100 QPS。不过实际情况下流量到每台机器可能会不均匀,会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果。

集群流控中共有两种身份:

Token Client:集群流控客户端,用于向所属 Token Server 通信请求 token。集群限流服务端会返回给客户端结果,决定是否限流。
Token Server:即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则判断是否应该发放 token(是否允许通过)。


转载:https://blog.csdn.net/weixin_44186072/article/details/106279842
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场