阿里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限流实战的更多相关文章

  1. Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结

    在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...

  2. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  3. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  4. Spring cloud微服务安全实战_汇总

    Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...

  5. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  6. Spring Cloud 微服务架构解决方案

    1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...

  7. Spring Cloud 微服务

    https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...

  8. 一张图了解Spring Cloud微服务架构

    Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...

  9. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  10. Spring Cloud微服务中网关服务是如何实现的?(Zuul篇)

    导读 我们知道在基于Spring Cloud的微服务体系中,各个微服务除了在内部提供服务外,有些服务接口还需要直接提供给客户端,如Andirod.IOS.H5等等. 而一个很尴尬的境地是,如果直接将提 ...

随机推荐

  1. 如何防护DDOS攻击策略

    DDoS是目前最凶猛.最难防御的网络攻击之一.现实情况是,这个世界级难题还没有完美的.彻底的解决办法,但采取适当的措施以降低攻击带来的影响.减少损失是十分必要的.将DDoS防御作为整体安全策略的重要部 ...

  2. 2019-2020-1 20199301《Linux内核原理与分析》第七周作业

    第六章 进程的描述和进程的创建 学习笔记 1.操作系统的三大管理功能: 进程管理 内存管理 文件系统 2.操作系统最核心的功能是进程管理. 3.为了管理进程,内核要描述进程的结构,也成为进程描述符,进 ...

  3. LINQ查询表达式(3) - LINQ 查询分组

    对查询结果进行分组 分组是 LINQ 最强大的功能之一. 下面的示例演示如何以各种方式对数据进行分组: 按照单个属性. 按照字符串属性的首字母. 按照计算出的数值范围. 按照布尔谓词或其他表达式. 按 ...

  4. 行为型模式(四) 观察者模式(Observer)

    一.动机(Motivate) "观察者模式"在现实生活中,实例其实是很多的,比如:八九十年代我们订阅的报纸,我们会定期收到报纸,因为我们订阅了.银行可以给储户发手机短信,也是&qu ...

  5. python API _ 1 (EasyDict)

    作用:参数调用文件一:from easydict import EasyDict as edictimport numpy as np config = edict() config.IMG_HEIG ...

  6. JVM对象创建

    1.JVM对象创建:java程序运行过程中,无时无刻都有对象被创建出来.在语言层面上就是new关键字. 2.JVM对象创建过程: (1)JVM遇到一条new指令后,首先会去常量池中,检查这个指令的参数 ...

  7. The Last Goodbye 电影《霍比特人3:五军之战》插曲

    https://music.163.com/#/song?id=29755223 I saw the light fade from the sky我看到天空褪去色彩On the wind I hea ...

  8. include和taglib指令

    1.include指令用来包含另一个静态文件,这个静态文件可以是一个JSP页面.一个Servlet.文本文件.JSP代码. include.jsp <%@ page contentType=&q ...

  9. kubefuse 让Kubernetes 资源成为fuse 文件系统

    kubefuse 是基于fuse 开发的文件系统,我们可以像访问文件系统一样访问Kubernetes 资源,使用python开发 支持以下特性: 可以使用方便的linux tools: ls. vim ...

  10. 生活 RH阴性血 AB型

    这个血型很稀有,外国多些,中国很少. ABO型:A.B.AB.O RH血型系统:阴性,阳性 RH阴性血,被称为熊猫血,估计是稀有吧,阴性血缺抗D,我老婆的血型抗原好像是:ccee,大部分汉族人都有抗D ...