zoukankan      html  css  js  c++  java
  • Spring cloud微服务安全实战-6-8sentinel限流实战

    阿里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的控制台。



    结束

  • 相关阅读:
    C# 操作ACCESS数据库
    装饰模式(Decorator Pattern)
    桥接模式(Bridge Pattern)
    单件模式(Singleton Pattern)
    横竖不能重复的9个数,,,,,
    C#操作Access数据库的例子
    组合模式(Composite Pattern)
    建造者模式(Builder Pattern)
    工厂方法模式(Factory Method)
    外观模式(Façade Pattern)
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11986232.html
Copyright © 2011-2022 走看看