上一篇博客讲了Sentinel一些概念性的东西 Spring Cloud Alibaba(9)---Sentinel概述

这篇博客主要讲 Sentinel控制台搭建,和 整合SpringCloudAlibaba来实现流量控制降级控制。至于其它比如热点配置、系统规则和授权规则等

自己去官网详细看,这里就不叙述了。

一、Sentinel控制台搭建

1、下载地址

官方有提供直接下载地址,我们可以下载自己需要的版本,我这边下载的版本是 1.8.0

https://github.com/alibaba/Sentinel/releases

2、启动控制台

下载之后我们发现就是一个jar包,我们就可以用jar的方式去启动它

java -Dserver.port=8282 -Dcsp.sentinel.dashboard.server=localhost:8282 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar

说明 这里我通过 8282 端口来启动它。

3、登陆控制台

重点 启动之后访问 localhost:8282; 登录即可用户名和密码默认是sentinel

登录之后看到左侧的菜单只有默认的一个;因为现在sentinel还没有发现其他微服务,这样一来Sentinel客户端就搭建成功了,接下来开始整合SpringCloudAlibaba。

二、Sentinel整合SpringCloudAlibaba

这篇也是在之前搭建好的基础上添加,这里在mall-goods微服务上做演示

1、pom.xml

        <!--引入sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2、application.yml

spring:
application:
name: mall-goods
cloud:
sentinel:
transport:
dashboard: localhost:8282
port: 9999

3、SentinelTestController

这里新增一个接口,来方便接下来测试限流、熔断等。

@RestController
@RequestMapping("api/v1/sentinel")
public class SentinelTestController { private volatile int total = 0; @RequestMapping("test-sentinel")
public Object findByGoodsId() {
return total++;
}
}

4、测试

这个是时候我们重新启动 mall-goods微服务。重启之后我们发现Sentinel还是并没有mall-goods服务,那是因为于Sentinel是懒加载模式,所以需要先访问上面这个接口后才会

在控制台出现。所以这里我们访问下

http://localhost:6001/api/v1/sentinel/test-sentinel

访问之后我们再看控制台

我们可以看到控制台已经有 mall-goods 服务了。而且我们刚刚请求的接口这里也有了。这说明Sentinel 默认会把接口直接当成一个资源。既然是这样,接下来就对这个请求

进行流控、降级、授权、热点等配置了;先来介绍如何添加流控吧。

三、流量控制规则及示例

概念 流量控制(flow control), 其原理是监控应用的QPS并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

流量控制官方文档

https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

1、规则说明

点击+流控的按钮,出现下面弹窗。

图中一共有6个名词

资源名

默认是请求路径,可⾃定义

针对来源

对哪个微服务进⾏限流,默认是不区分来源,全部限流。这个是针对 区分上游服务进⾏限流, ⽐ 如 商品服务 被 订单服务、⽤户服务调⽤,就可以针对来源进⾏限流。

阈值类型

其实就是通过哪种方式限流,是通过QPS呢,还是通过线程数。他们的含义我这里不在过多解释了,具体可以看这篇文章。什么是QPS,TPS,吞吐量

单机阈值

很好理解,就是现在每秒QPS或者线程数达到这个数量就会限流。

举例子

1)上面阈值类型设置QPS,下面单机阈值设置1。那组合的意思就是 每秒的请求数超过1会直接被限流。
2)上面阈值类型设置线程数量,下面单机阈值设置1。那组合的意思就是 当第一个线程未处理完成时,其他新开启请求的线程都将被限流。

线程数稍微难理解点,这里再通俗的解释下 我们对一个接口资源 阈值类型设置线程数量,下面单机阈值设置1。这个接口方法内有2秒钟的睡眠延迟,那么,当第一个线程未

处理完成时(即2秒内),其他新开启请求的线程都将被限流,只有第一个未限流的线程成功处理,新的请求才会进来。

并发数控制⽤于保护业务线程池不被慢调⽤耗尽Sentinel 并发控制不负责创建和管理线程池,⽽是简单统计当前请求上下⽂的线程数⽬(正在执⾏的调⽤数⽬)
如果超出阈值,新的请求会被⽴即拒绝,效果类似于信号量隔离。并发数控制通常在调⽤端进⾏配置

流控模式

这里有三种模式 直接 关联 链路,这个这里也不做过度解释,具体看上面官方文档。

流控效果

这里也有三种:快速失败Warm Up排队等待。具体也看上面官方文档说明。

总结

2、测试

我这里配置如下

阈值类型:QPS,单机阈值:1,流控模式:直接,流控效果:快速失败

然后我们在来请求上面的接口

很明显,如果一秒内有两个请求就会限流。

四、降级规则说明及示例

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。

降级规则官方文档

https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

1、规则说明

熔断策略

Sentinel 提供以下几种熔断策略:慢调用比例异常比例异常数

慢调用比例:选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。

异常比例 :当单位统计时长内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。

异常数 :当单位统计时长内的异常数目超过阈值之后会自动进行熔断。

熔断降级规则说明

熔断降级规则(DegradeRule)包含下面几个重要的属性:

2、测试

这里添加如下规则配置

然后我们新增一个接口

 @RequestMapping("test-sentinel-exception")
public Object testSentinelException() {
int i = (int) (Math.random() * 100);
if(i>10){
throw new NullPointerException("随机错误");
}
return "成功";
}

测试

我们可以看出 当请求超过2次异常,那么就会报熔断的异常错误。有关其它的规则我这里不在阐述了,具体的都可以看官网。

参考

1、分布式系统的流量防卫兵

少说多做,句句都会得到别人的重视;多说少做,句句都会受到别人的忽视。(10)

Spring Cloud Alibaba(10)---Sentinel控制台搭建+整合SpringCloudAlibaba的更多相关文章

  1. Spring Cloud Alibaba(11)---Sentinel+Nacos持久化

    Sentinel+Nacos持久化 有关Sentinel之前有写过两篇 Spring Cloud Alibaba(9)---Sentinel概述 Spring Cloud Alibaba(10)--- ...

  2. Spring Cloud Alibaba 之 Sentinel 限流规则和控制台实例

    这一节我们通过一个简单的实例,学习Sentinel的基本应用. 一.Sentinel 限流核心概念 在学习Sentinel的具体应用之前,我们先来了解一下Sentinel中两个核心的概念,资源和规则. ...

  3. Spring Cloud alibaba网关 sentinel zuul 四 限流熔断

    spring cloud alibaba 集成了 他内部开源的 Sentinel 熔断限流框架 Sentinel 介绍 官方网址 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentine ...

  4. Spring Cloud Alibaba 使用Sentinel实现接口限流

    Sentinel是什么 Sentinel的官方标题是:分布式系统的流量防卫兵.从名字上来看,很容易就能猜到它是用来作服务稳定性保障的.对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第 ...

  5. Spring Cloud Alibaba(9)---Sentinel概述

    Sentinel概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流.流量整形.熔断降级.系统自适应保护.热点防 ...

  6. Spring Cloud Alibaba:Sentinel实现熔断与限流

    一.什么是Sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳 ...

  7. Spring Cloud Alibaba (nacos 注册中心搭建)

    [nacos下载地址](https://github.com/alibaba/nacos/releases) ### 什么是 Nacos? - nacos主要起到俩个作用一个是注册中心,另外一个是配置 ...

  8. Spring Cloud gateway 五 Sentinel整合

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  9. Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则

    通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初步的认识.在Spring Cloud Alibaba的整合封装之下,接口限流这件事情可以非常轻易的 ...

随机推荐

  1. Pandas文件读取——Pandas.read_sql() 详解

    目录 一.函数原型 二.常用参数说明 三.连接数据库方式--MySQL ①用sqlalchemy包构建数据库链接 ②用DBAPI构建数据库链接 ③将数据库敏感信息保存在文件中 一.函数原型 panda ...

  2. css字体的属性

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  3. Java字符串==和equals的区别

    首先我们来了解一下String类,Java的字符串是一旦被赋值之后无法更改的(这里的无法更改是指不能将字符串中单个或一段字符重新赋值),这也是Java虚拟机为了减少内存开销,避免字符串的重复创建设立的 ...

  4. P1071 潜伏者(JAVA语言)

    //HashMap大法好 题目描述 RR国和SS国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于SS国的RR 国间谍小CC终于摸清了 SS 国军用密码的编码规则: 1. S ...

  5. IDA 创建本地类型

    在IDA中我们常常使用 shift+F9打开结构体视图,ins 创建结构体,但操作有些繁琐. 我们可以在View-->Open Subviews-->Local Types(视图--> ...

  6. 攻防世界 maze NJUPT CTF 2017

    迷宫题 1 __int64 __fastcall main(__int64 a1, char **a2, char **a3) 2 { 3 signed __int64 mid_i; // rbx 4 ...

  7. 快速创建你的第一个Spring Boot项目

    1. 创建工程 打开idea,利用Spring Boot搭建一个web工程,切身体会一下Spring Boot所带来的魅力!看看SpringBoot是如何快速搭建一个web项目. New-->P ...

  8. [2020年10月28日普级组]1405.小B浇花

    区 间 和 的 和 区间和的和 区间和的和 题目解析 就直接模拟,从最低的花的高度向最高的花的高度枚举,如果当循环变量的值到达了顶峰,但还有花的数量大于2的,就把循环上线加一(所以数组要开大些) Co ...

  9. 免费开源的客服系统 Linux 服务器环境安装部署过程

    最近因为项目需要,要找一款在线客服系统集成在 APP 中使用,而且涉及到生意开单,客服系统必须稳定可靠.另外甲方要求,必须支持 Linux 服务器环境. 我们以 Ubuntu 18.04 为例把安装部 ...

  10. CVE-2010-3333-office RTF栈溢出漏洞分析

    0x00 前言 此漏洞是根据泉哥的<漏洞战争>来学习分析的,网上已有大量分析文章在此只是做一个独立的分析记录. 0x01 复现环境 操作系统-->windows7 x64 软件版本- ...