Spring Cloud Alibaba实践 --Sentinel

sentinel简介

Sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第一反应应该就是Hystrix。但是比较可惜的是Netflix已经宣布对Hystrix停止更新。那么,在未来我们还有什么更好的选择呢?除了Spring Cloud官方推荐的resilience4j之外,目前Spring Cloud Alibaba下整合的Sentinel也是用户可以重点考察和选型的目标。

在这里插入图片描述

Sentiner与hystrix的区别:
Sentinel的功能和细节比较多,一篇内容很难介绍完整。所以下面我会分多篇来一一介绍Sentinel的重要功能。本文就先从限流入手,说说如何把Sentinel整合到Spring Cloud应用中,以及如何使用Sentinel Dashboard来配置限流规则。通过这个简单的例子,先将这一套基础配置搭建起来。
解决雪崩问题的常见方式:

  • 1、超时处理:设定超时时间,请求超过一定的时间没有响应就返回错误信息,不会无休止等待。
  • 2、舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat资源,因此也叫线程隔离。
  • 3、熔断降级:有断路器统计业务执行的异常比例,如果超出阈值则会熔断业务,拦截访问该业务的一切请求。
  • 4、流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

安装并整合sentinel

Sentinel的使用分为两部分:

  • sentinel-dashboard:与hystrix-dashboard类似,但是它更为强大一些。除了与hystrix-dashboard一样提供实时监控之外,还提供了流控规则、熔断规则的在线维护等功能。
  • 客户端整合:每个微服务客户端都需要整合sentinel的客户端封装与配置,才能将监控信息上报给dashboard展示以及实时的更改限流或熔断规则等。

(1)启动sentinel-dashboard

下载地址:sentinel-dashboard-1.6.0.jar
其他版本:Sentinel/releases

通过命令启动:

java -jar sentinel-dashboard-1.6.0.jar

默认情况下,sentinel-dashboard以8080端口启动。由于sentinel-dashboard是一个标准的spring boot应用,所以如果要自定义端口号等内容的话,可以通过在启动命令中增加参数来调整,比如:

java -jar sentinel-dashboard-1.6.0.jar --server.port=8888

所以可以通过访问:localhost:8888 来验证是否已经启动成功,如果一切顺利的话,可以看到登录页面(默认用户名和密码都是sentinel)。

(2)整合Sentinel

依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>

配置:

spring.application.name=alibaba-sentinel-rate-limiting
server.port=8002

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8888

主类:

package com.example.demospringboot;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
@Slf4j
public class DemospringbootApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemospringbootApplication.class, args);
	}

	@Slf4j
	@RestController
	static class TestController {

		@GetMapping("/hello")
		public String hello() {
			return "Hello World";
		}
	}
}

启动应用,并执行curl命令:
在这里插入图片描述
此时,在上面启动的Sentinel Dashboard中就可以当前我们启动的alibaba-sentinel-rate-limiting这个服务以及接口调用的实时监控了。具体如下图所示:
在这里插入图片描述

配置限流规则

在完成了上面的两节之后,我们在alibaba-sentinel-rate-limiting服务下,点击簇点链路菜单,可以看到如下界面:

在这里插入图片描述

通过点击流控按钮,来为该接口设置限流规则,比如:

在这里插入图片描述

流控模式:

  • 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认模式。
  • 关联:统计与当前相关的另一个资源,触发阈值时,对当前资源限流。
  • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流,即只限流从指定接口进来的

流控效果:

  • 快速失效:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。

  • warm up:预热模式,对超出阈值的请求同样是拒绝,并抛出异常。但这种模式阈值会动态变化,从一个较小的值逐渐增加到最大值。请求阈值初始值是 threshold/coldFactor(默认值是3),持续指定时长后,逐渐提高到threshould值。例如,我设置QPS的threshold的为10,预热时间为5秒,那么初始阈值就是10/3,也就是3,然后在5秒后逐渐增长到10.

  • 排队等待:让所有请求按照先后次序进入一个队列中排队执行,两个请求的间隔不能小于指定时长。例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout =2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常。

参考案例

点击新增按钮之后,可以看到如下界面:
在这里插入图片描述

其实就是左侧菜单中流控规则的界面,这里可以看到当前设置的所有限流策略。在完成了上面所有内容之后,我们可以尝试一下快速的调用这个接口,看看是否会触发限流控制,比如:

在这里插入图片描述
可以看到,快速的调用/hello接口之后,调用被限流了。
在 sentinel-dashboard界面,也可以看到对应统计:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/229601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码&#xff1f; CPU上电启动后被设计为去地址0x00000000位置处读取代码&#xff1b;首先会连续读取两个字&#xff0c;分别是栈指针初始值和复位异常处理函数的地址&#xff1b;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

对数据处理

例子&#xff1a; <Select v-model"type" placeholder"请选择..."> <Option v-for"item in list" :value"item.id__item.name">{{item.name}}</Option> </Select>

一个简单的postman设置断言,为何会难住一个工作5年的测试?

postman设置断言 作为一款接口测试工 具&#xff0c;postman需要对发送请求后返回的结果是否正确做验证&#xff0c;在postman中通过 tests页签做请求的验证&#xff0c;也称为断言。 postman设置断言的流程 1、在tests页签截取要对比的实际响应信息&#xff08;响应头、响应…

船舶机电设备智能故障诊断系统

1 船舶电气设备故障诊断专家系统 体系结构 整个系统的体系结构采用浏览器&#xff0f; 服务器 &#xff08;B&#xff0f; S&#xff09; 三层体系结构 &#xff08; 如图 1 所示 &#xff09;。B&#xff0f;S 模式是一种 以 Web 技术为基础的系统平台模式 。 把传统…

基于SuperMap iObjects Java生成地图瓦片

作者&#xff1a;dongyx 前言 在GIS领域&#xff0c;地图瓦片技术作为GIS领域的关键技术&#xff0c;是提高地图服务性能的关键手段之一。通过预先生成地图的瓦片数据&#xff0c;可以显著提升用户访问地图时的响应速度和体验。SuperMap iObjects for Java作为一款强大的GIS开…

xxl-job详解

目录 1、xxl-job介绍1.1 xxl-job的原理1.1.1 执行器的注册和发现1.1.2 调度中心调用执行器 1.2 quartz和xxl-job对比 2、快速入门2.1 下载并启动2.2 在调度中心新增定时任务2.3 任务运行模式(BEAN、GLUE)2.4 xxl-job的总结 3、后端专属技术群 1、xxl-job介绍 ​ xxl-job是一个…

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】 题目描述&#xff1a;解题思路一&#xff1a;一个最简单的方法就是在一个正方形内生成随机采样的点&#xff0c;然后拒绝不在内切圆中的采样点。解题思路二&#xff1a;具体思想是先生成一个0到r的随机数len&…

进制 + 原码,反码,补码

进制转换 整数部分 小数部分 原码 反码 补码 原码转补码&#xff1a; 左边和右边第一个1不变&#xff0c;中间取反。-0 除外。 计算机系统中数值一律用补码来存储的原因 其他 术语 进制表 进制数的表示 详细教程可转 爱编程的大丙

服务器数据恢复—ocfs2文件系统被格式化为其他文件系统如何恢复数据?

服务器故障&#xff1a; 由于工作人员的误操作&#xff0c;将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上&#xff0c;导致原Ocfs2文件系统被格式化为Ext4文件系统。 由于Ext4文件系统每隔几百兆就会写入文件系统的原始信息&#xff0c;原Ocfs2文件系统数据会遭受一定程度…

Spring基于注解开发

Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>标签及其标签属性的配置&#xff0c;使用Component注解替代<bean>标签中的id以及class属性&#xff0c;而对于是否延迟加载或是Bean的作用域&#xff0c;则是其他注解 xml配置…

系列八、SpringBoot中自定义SpringMVC配置

一、概述 作为Spring家族的明星产品&#xff0c;SpringBoot极大地简化了程序员的日常开发&#xff0c;提高了开发效率。我们很容易得借助于SpringBoot就可以快速开发业务代码。一般情况下&#xff0c;公司的日常开发都是基于web服务的&#xff0c;我们在使用idea等工具初始化一…

c语言-动态内存管理

文章目录 一、为什么会有动态内存管理二、申请内存函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误四、练习 一、为什么会有动态内存管理 1.我们一般的开辟空间方式&#xff1a; int a 0;//申请4个字节空间 int arr[10] { 0 };//申请40个字节空间2.这样…

kafka高吞吐、低延时、高性能的实现原理

作者&#xff1a;源码时代-Raymon老师 Kafka的高吞吐、低延时、高性能的实现原理 Kafka是大数据领域无处不在的消息中间件&#xff0c;目前广泛使用在企业内部的实时数据管道&#xff0c;并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储&#xff0c;但…

大华DSS S2-045 OGNL表达式注入漏洞复现

0x01 产品简介 大华DSS安防监控系统平台是一款集视频、报警、存储、管理于一体的综合安防解决方案。该平台支持多种接入方式,包括网络视频、模拟视频、数字视频、IP电话、对讲机等。此外,该平台还支持多种报警方式,包括移动侦测、区域入侵、越线报警、人员聚集等。 0x02 漏…

【Vulnhub 靶场】【BuffEMR: 1.0.1】【简单 - 中等】【20210831】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/buffemr-101,717/ 靶场下载&#xff1a;https://download.vulnhub.com/buffemr/BuffEMR-v1.0.1.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年08月31日 文件大小&#xff1a;4.6 GB 靶场作…

sql优化常用的几种方法

SQL优化是数据库管理和应用开发中的一个重要环节&#xff0c;它涉及到对SQL查询语句的改进&#xff0c;以提高执行效率&#xff0c;减少系统负载&#xff0c;并优化资源使用。以下是一些常用的SQL优化方法&#xff0c;我会尽量覆盖一些关键的点。 使用合适的数据类型 选择适…

markdown记录

文章目录 基础操作使用一级列表、二级列表 博文链接 基础操作 使用一级列表、二级列表 博文链接 CSDN-Markdown语法集锦 CSDN-markdown语法之如何使用LaTeX语法编写数学公式 CSDN Markdown简明教程1-关于Markdown CSDN Markdown简明教程2-基本使用 CSDN Markdown简明教程3-表…

经典神经网络——ResNet模型论文详解及代码复现

论文地址&#xff1a;Deep Residual Learning for Image Recognition (thecvf.com) PyTorch官方代码实现&#xff1a;vision/torchvision/models/resnet.py at main pytorch/vision (github.com) B站讲解&#xff1a; 【精读AI论文】ResNet深度残差网络_哔哩哔哩_bilibili …

vuepress-----18、图片缩放

图片引入两种方式 地址 # 图片缩放插件 # 实战 md文件引入图片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安装配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

网安领域含金量最高的证书有哪些?看这1篇就足够了!

文章目录 一、前言二、CISP三、CISAW四、NISP五、为什么很多人考不下来 一、前言 现在想找网络安全之类的工作&#xff0c;光有技术是不够的&#xff0c;还得有东西证明自己&#xff0c;网安三大敲门砖&#xff1a;CTF、漏洞证明和专业证书。 对于CTF的话只是少数人能参加的&…