首页 > 编程语言 > 详细

Spring cloud微服务安全实战-6-8sentinel限流实战

时间:2019-12-05 00:00:14      阅读:119      评论:0      收藏:0      [点我收藏+]

阿里2018年开源的。
技术分享图片

简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉。保证服务高可用。
技术分享图片

流控

先从最简单的场景来入手。
1.引用一个依赖,
2,声明一个资源。
3.声明一个规则

注意依赖是加在你的微服务上的,每一个微服务都要加一个sentinel的依赖。
技术分享图片

maven上搜索
技术分享图片

技术分享图片

技术分享图片

声明资源

声明资源 就是你要保护的程序,或者是你要进行流控的那段逻辑。
最简单的方式就是写一段代码。
Entry注意是alibaba.csp包下的
技术分享图片

现在在创建订单的,所以这里起的名字就叫做createOrder
技术分享图片
try里面就是你要指定规则的那段代码。我们只是输出日志,
当限流触发的时候会抛出BlockExceprion
技术分享图片
 

技术分享图片

声明了createOrder的资源,资源的内容是 try里面的代码。当然任何一对代码都做为资源。只要你用try catch这种方式把他包起来就可以了。
技术分享图片

定义规则

争对createOrder资源的那段代码定义规则,规则有很多种,你可以有流控的规则,可以有限流的规则,可以有熔断的规则,可以有降级的规则,

我们在这里就声明一个最简单的流控的规则。
创建一个config的包
技术分享图片


技术分享图片

spring的事件监听器,监听的是ContextRefreshedEvent
技术分享图片
声明称spring 的bean技术分享图片
spring的项目都启动完,所有的bean都组装好后,里面写的代码就是整个系统系统好以后执行的代码
技术分享图片
叫做FlowRule就是流量的规则,设置setResource就是针对createOrder这个资源的
技术分享图片
grade流控规则的类型是什么,这里先演示一个最简单的。每秒请求数量 QPS。
setCount(1)表示每秒只能有一个请求过去
技术分享图片
然后加到manager里面, 参数需要一个List的FlowRule
技术分享图片
这就是第三部,规则的声明。
技术分享图片

启动测试

启动认证服务器
技术分享图片


启动orderAPI
技术分享图片

首先去拿令牌
技术分享图片
技术分享图片
这里没走网关,直接走的orderAPi
技术分享图片
连续多点几次。
技术分享图片

sentinel的日志

默认情况下会在当前用户的根目录下面生成一些日志。把当前的规则以及每一个资源的流量情况都记录下来。
技术分享图片
技术分享图片
技术分享图片

技术分享图片

技术分享图片
技术分享图片
技术分享图片
再来看这个,记录这个资源流量变化的情况。
技术分享图片

技术分享图片

刚才启动后的做的那些请求在这都有显示。
技术分享图片

可视化


github上搜索。
技术分享图片
技术分享图片

技术分享图片
技术分享图片
用java -jar 启动这个下载的jar包,启动的端口是8080,server的地址 localhost:8080
技术分享图片

项目的名字
技术分享图片

默认的用户名密码都是sentinel
技术分享图片

把自己的项目接入sentinel

首先加一个新的依赖。
技术分享图片

还需要告诉api我的控制台的位置在哪里。通过jvm的参数传进去的
技术分享图片

加这么一个jvm的启动参数。来告诉orderAPI这个程序,启动的时候你要往localhost:8080 sentinel的dashboard去注册。
技术分享图片

技术分享图片
在这边点刷新。并不是orderAPI 一起来就马上注册的。而是说你的资源有流量访问 才会去注册。
技术分享图片

所以我们访问几次 order的服务
技术分享图片

刷新显示了。当前显示的名字是应用启动类的名字,
技术分享图片
技术分享图片
这是争对资源的
技术分享图片

流控的规则
技术分享图片

技术分享图片

改造


现在的处理方式,并不是特别SpringBoot的一种处理方式

比如说我们这里的参数
技术分享图片
我们是通过jvm的参数传进去的
技术分享图片
实际上在SpringBoot里面我们所有的参数应该配置在配置文件内
技术分享图片
资源的声明,现在是这种try catch的形式。再介绍一个用注解的方式来声明资源,
技术分享图片
最后是依赖,我们引入了两个。这些都不是很SpringBoot的做法。
技术分享图片

改造开始

首先改造依赖。
技术分享图片

复制上面的名字去maven上搜索下
技术分享图片
技术分享图片
复制到orderAPI。这就是把所有需要的jar包都引进来了。
技术分享图片

技术分享图片
告诉orderAPI,sentinel控制台在哪里,在8080的端口上,
技术分享图片

这里的port,当你启动你的orderAPI的时候,同时sentinel会在8719这个端口再起一个应用,然后用8719这个端口去跟dashboard 8080端口通讯。然后去发心跳。
技术分享图片
orderAPI本身就跑在9080端口上的。sentinel会在8719再起一个应用,8719如果不配置的话也是这个端口。
技术分享图片
如果端口被占了,可以通过这个配置来改这个端口。让sentinel可以启动起来。
技术分享图片

技术分享图片

资源的声明

一般会采用注解的方式来声明资源。
这样整个create方法就变成了sentinel的资源。
技术分享图片
这么改造下来,我们的应用就很springboot风格了。

启动看效果

启动orderAPI

多点击几次,给他一些流量。如果token过期了 就重新申请个。
技术分享图片
技术分享图片

现在用的注解,它并不知道 你报错了以后要怎么处理
技术分享图片
它会直接在控制台抛异常出来。
技术分享图片

所以如果点的快了 就报500错误。这块怎么处理 后面再讲。
技术分享图片
刷新 sentinel的控制台。
技术分享图片

技术分享图片
技术分享图片

结束

 

Spring cloud微服务安全实战-6-8sentinel限流实战

原文:https://www.cnblogs.com/wangjunwei/p/11986232.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!