SpringCloud Alibaba - Sentinel

接上文SpringCloud Alibaba - Nacos

1.Sentinel 流量防卫兵

SpringCloud Alibaba - Sentinel_第1张图片
SpringCloud Alibaba - Sentinel_第2张图片

1.1 安装与部署

和Nacos一样,它是独立安装和部署的,下载地址https://github.com/alibaba/Sentinel/releases
下载后的jar放到目录
SpringCloud Alibaba - Sentinel_第3张图片
然后配置
SpringCloud Alibaba - Sentinel_第4张图片
启动并访问,用户名密码都是 sentinel
SpringCloud Alibaba - Sentinel_第5张图片
SpringCloud Alibaba - Sentinel_第6张图片
SpringCloud Alibaba - Sentinel_第7张图片
此时就开启了sentinel的监控页面。将本地nacos服务也启动,然后将服务连接到sentientl控制台。
给book服务添加依赖
SpringCloud Alibaba - Sentinel_第8张图片
修改book下配置文件
SpringCloud Alibaba - Sentinel_第9张图片
启动book服务。此时需要先访问依次book服务(懒加载模式,不会一上来就调用),然后sentinel中就会存在book服务的信息。
SpringCloud Alibaba - Sentinel_第10张图片
SpringCloud Alibaba - Sentinel_第11张图片
SpringCloud Alibaba - Sentinel_第12张图片
接着将其他服务user,borrow都加进去
SpringCloud Alibaba - Sentinel_第13张图片
SpringCloud Alibaba - Sentinel_第14张图片
SpringCloud Alibaba - Sentinel_第15张图片
访问借阅服务
SpringCloud Alibaba - Sentinel_第16张图片
SpringCloud Alibaba - Sentinel_第17张图片
此时user服务只有一个,因为此时user服务设置的是Chengdu集群

SpringCloud Alibaba - Sentinel_第18张图片
此时单独访问Chongqing的user服务,则出现两个user服务。
SpringCloud Alibaba - Sentinel_第19张图片
在这里插入图片描述

2.sentinel 流量控制(一)

SpringCloud Alibaba - Sentinel_第20张图片
SpringCloud Alibaba - Sentinel_第21张图片
SpringCloud Alibaba - Sentinel_第22张图片
SpringCloud Alibaba - Sentinel_第23张图片
SpringCloud Alibaba - Sentinel_第24张图片
SpringCloud Alibaba - Sentinel_第25张图片

2.sentinel 流量控制(二)

在sentinel测试限流。
给borrow服务设置限流。

2.1 测试第一种方案(快速失败)

SpringCloud Alibaba - Sentinel_第26张图片
SpringCloud Alibaba - Sentinel_第27张图片
点击新增后,此时访问borrow服务,一秒内点击一次没有问题,一秒内点击多次就会被限制。超过一秒再访问就正常
SpringCloud Alibaba - Sentinel_第28张图片
SpringCloud Alibaba - Sentinel_第29张图片

2.2 测试第二种方案(Warm up)

预热时长设置为10,则会在10s内将阈值增加到设定的值。
SpringCloud Alibaba - Sentinel_第30张图片

2.3 测试第三种方案(排队等待)

SpringCloud Alibaba - Sentinel_第31张图片

2.4 流控模式的区别

在这里插入图片描述
关联模式:
SpringCloud Alibaba - Sentinel_第32张图片
链路模式:当从指定 接口 过来的资源请求达到限流条件时,开启限流。
先从@SentinelResource的使用开始,对某个方法进行标注,一旦方法被标注,就会进行监控。
例如,创建两个请求映射,都来调用Service的被监控方法:
SpringCloud Alibaba - Sentinel_第33张图片
接口上加上注解
SpringCloud Alibaba - Sentinel_第34张图片
修改配置文件
SpringCloud Alibaba - Sentinel_第35张图片
重启borrow服务。
先访问
在这里插入图片描述

SpringCloud Alibaba - Sentinel_第36张图片
可以看到访问后已经识别到了borrow接口调用了到注解的方法。
SpringCloud Alibaba - Sentinel_第37张图片
然后给details添加一个限流策略。此时无论访问borrow还是borrow1,只要超过阈值都会被限流,因为这两个方法都调用了带details的接口。
SpringCloud Alibaba - Sentinel_第38张图片
此时,访问超过阈值就会报错,因为是在接口中使用@SentinelResource定义的限流。
因此,链路选项实际上是决定只限流从哪个方向来的调用。比如只对borrow2这个接口对getUserBorrowDetailByUid方法的调用进行限流,就可以指定其链路。
SpringCloud Alibaba - Sentinel_第39张图片

SpringCloud Alibaba - Sentinel_第40张图片可以看到borrow2被限流,borrow未被限流。
SpringCloud Alibaba - Sentinel_第41张图片在这里插入图片描述

3.Sential-限流和异常处理

限流之后的默认提示语修改,即异常处理。

对于接口的限流异常

自定义一个返回请求块
SpringCloud Alibaba - Sentinel_第42张图片
在配置文件中将此页面设定为限流页面
SpringCloud Alibaba - Sentinel_第43张图片
重启borrow服务
SpringCloud Alibaba - Sentinel_第44张图片
此时点击过快就会显示设定的内容
SpringCloud Alibaba - Sentinel_第45张图片

对于方法的异常限流

对于方法被限流时,会在后台抛出异常。之前在Hystrix可以直接添加一个替代方案,这样当异常出现时会直接执行我们的替代方法并返回。Sentinel也可以。
SpringCloud Alibaba - Sentinel_第46张图片
重启,然后给方法添加一个流控
SpringCloud Alibaba - Sentinel_第47张图片
现在限流后返回的是替代方案
SpringCloud Alibaba - Sentinel_第48张图片
但是blockHandler只能处理限流情况下抛出的异常,包括下面的热点参数限流也是同理。如果是方法本身抛出的其他类型异常,不在管控范围内,但是可以通过其他参数进行处理:

SpringCloud Alibaba - Sentinel_第49张图片
此时访问抛出的就是指定的内容
SpringCloud Alibaba - Sentinel_第50张图片
改为返回字符串,然后重启。
SpringCloud Alibaba - Sentinel_第51张图片
SpringCloud Alibaba - Sentinel_第52张图片
此时若频繁访问则返回为空。因为控流后调用了except方法,t.getMessage为空
SpringCloud Alibaba - Sentinel_第53张图片
若两种异常返回同时出现,则会出现的情况,如下:
在test上添加一个block异常然后重启。每次重启后都需要访问一次接口,否则sentinel上不会出现服务。每次修改限流方法都要把之前的流控策略给删除重新添加。
SpringCloud Alibaba - Sentinel_第54张图片
SpringCloud Alibaba - Sentinel_第55张图片
此时频繁访问调用的是block的限流异常处理。
SpringCloud Alibaba - Sentinel_第56张图片

3.1.1 热点参数限流

SpringCloud Alibaba - Sentinel_第57张图片
创建新的测试请求映射:
SpringCloud Alibaba - Sentinel_第58张图片
重启并直接请求:
SpringCloud Alibaba - Sentinel_第59张图片
SpringCloud Alibaba - Sentinel_第60张图片
此时只对参数为a的访问进行限流,在sentinel中配置
SpringCloud Alibaba - Sentinel_第61张图片
此时频繁访问a=10,则会被限流,b则不会被限流
SpringCloud Alibaba - Sentinel_第62张图片

SpringCloud Alibaba - Sentinel_第63张图片
设置参数值为多少时进行限流,如图片即第0个索引参数值为10,访问频率大于3次/1s时候会被限流。若此时a改为a=20,则会执行单机阈值,超过1次就会被限流
SpringCloud Alibaba - Sentinel_第64张图片

4.服务熔断和降级

4.1 服务熔断SpringCloud Alibaba - Sentinel_第65张图片

两种隔离方案
SpringCloud Alibaba - Sentinel_第66张图片
在这里插入图片描述
在这里插入图片描述

SpringCloud Alibaba - Sentinel_第67张图片
Sentinel中进行熔断和服务降级
SpringCloud Alibaba - Sentinel_第68张图片
SpringCloud Alibaba - Sentinel_第69张图片
修改后重启
SpringCloud Alibaba - Sentinel_第70张图片
创建新的熔断规则
SpringCloud Alibaba - Sentinel_第71张图片
频繁访问borrow2,可以看到超时进入了熔断,进入熔断即会限流
SpringCloud Alibaba - Sentinel_第72张图片
5s后再访问就正常
SpringCloud Alibaba - Sentinel_第73张图片
SpringCloud Alibaba - Sentinel_第74张图片
SpringCloud Alibaba - Sentinel_第75张图片
SpringCloud Alibaba - Sentinel_第76张图片
此时频繁访问(1000ms内访问2次,有一次出现异常)则会熔断
SpringCloud Alibaba - Sentinel_第77张图片
5s后再次访问则会出异常
SpringCloud Alibaba - Sentinel_第78张图片
SpringCloud Alibaba - Sentinel_第79张图片

4.2 服务降级

SpringCloud Alibaba - Sentinel_第80张图片
SpringCloud Alibaba - Sentinel_第81张图片
SpringCloud Alibaba - Sentinel_第82张图片SpringCloud Alibaba - Sentinel_第83张图片
此时频繁访问就不是默认的限流方案,而是替代方案
SpringCloud Alibaba - Sentinel_第84张图片

4.3 Feign支持Sentinel

SpringCloud Alibaba - Sentinel_第85张图片
SpringCloud Alibaba - Sentinel_第86张图片

SpringCloud Alibaba - Sentinel_第87张图片

SpringCloud Alibaba - Sentinel_第88张图片
可正常访问
SpringCloud Alibaba - Sentinel_第89张图片
然后将user服务关闭,再进行访问借阅接口就会到替代方案(因为借阅服务是调用了userclient的方法,而userclient的方法又和user-service是绑定的,当user服务关闭后,调用不通则会进行userclient的替代方案)
SpringCloud Alibaba - Sentinel_第90张图片SpringCloud Alibaba - Sentinel_第91张图片

你可能感兴趣的:(SpringCloud,Alibaba,spring,cloud,sentinel,spring)