Sentinel 学习笔记

Sentinel 学习笔记

作者:王珂

邮箱:49186456@qq.com


文章目录

  • Sentinel 学习笔记
    • @[TOC]
  • 前言
  • 一、基础概念
  • 二、Sentinel控制台
    • 2.1 安装控制台
    • 2.2 簇点链路
    • 2.3 请求限流
    • 2.4 线程隔离
    • 2.5 服务降级
    • 2.6 服务熔断
  • 三、Sentinel客户端
    • 3.1 原始Jar包客户端
    • 3.2 SpringCloudAlibaba客户端

前言

本文介绍微服务组件Sentinel的主要功能,环境搭建和组件使用。其中涉及到相关的一些基础概念,也对其进行的解释以便对组件的理解和使用。

同时,介绍了在实际工作中使用Sentinel常用的步骤和操作。希望通过本文对你快速理解和上手使用Sentinel提供帮助。

官网:

https://sentinelguard.io/zh-cn/index.html

一、基础概念

服务雪崩

微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,称为雪崩。

原因:

  • 服务提供者出现故障或阻塞

  • 服务调用者没有做好异常处理,导致自身故障

解决:

  • 服务保护方案

    1)请求限流:限制访问微服务请求的并发量,避免服务因流量激增而出现故障。
    protect_service
    2)线程隔离:限定每个业务能够使用的线程数而将故障业务隔离,避免故障扩散。

    3)服务熔断:由断路器统计请求的异常比例或慢调用比例,如果超出阈值就会熔断该业务,则拦截该接口的请求。熔断期间,所有请求快速失败,全部都走fallback逻辑。

    熔断避免了无效的资料浪费

    服务保护技术

    SentinelHystrix
    线程隔离信号量隔离线程池隔离/信号量隔离
    熔断策略基于慢调用比例或异常比例基于异常比例
    限流基于QPS,支持流量整形优先支持
    Fallback支持支持
    控制台开箱即用,可配置规则,查看秒级监控,机器发现等不完善
    配置方式基于控制台,重启失效基于注解或配置文件,永久生效

    Sentinel的使用分为两个部分:

  • 核心库(jar包):不依赖任何框架/库,能够运行Java 8及以上的版本运行环境,同时对 Dubbo / Spring Cloud等框架也有较好的支持,在项目中引入依赖即可实现服务限流、隔离、熔断等功能。

    • 控制台:Dashboard主要负责管理推送规则、监控、管理机器信息等。

二、Sentinel控制台

Sentinel 控制台可以查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
规则管理和推送:统一管理推送规则。
鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

2.1 安装控制台

1)下载dashborad

https://github.com/alibaba/Sentinel/releases/download/1.8.7/sentinel-dashboard-1.8.7.jar

或者下载源码编译打包

下载源码

https://github.com/alibaba/Sentinel/archive/refs/tags/1.8.7.tar.gz

打包

mvn -Dmaven.test.skip=true clean package

sentinel-dashboard.jar位于/sentinel-dashboard/target目录下。

2)启动

java -Dserver.port=8719 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

启动命令可以带的参数

// 控制台端口

-Dserver.port=8719

// 此配置可以监控sentinel控制台自己

-Dcsp.sentinel.dashboard.server=localhost:8858

// 名称

-Dproject.name=sentinel-dashboard

3)访问控制台

http://localhost:8719

账号:sentinel / sentinel

2.2 簇点链路

簇点链路就是单机调用链路(单个微服务内部)。是一次请求进入服务后经过的每一个被Sentinel监控的资源。默认Sentinel会监控SpringMVC的每一个Endpoint(http接口,即Controller接口)。限流、熔断等都是针对簇点链路中资源设置的。而资源名默认就是接口的请求路径。

Restful风格的API请求路径一般相同(请求方式不同,有GET, POST, PUT, DELETE …),这会导致簇点资源名称重复。因此我们要修改配置,把请求路径+请求方式做为簇点的资源名称,

需要如下配置,完整配置详解3.2控制台配置

http-method-specify: true # 开启请求方式前缀

2.3 请求限流

限流表示限制接口每秒处理请求的数量

在簇点链路后面点击【流控】按钮,即可对其做限流配置
current_limiting

2.4 线程隔离

线程隔离,是指限制某个服务可用的线程数。

在购物车服务中需要查询商品信息,但此时商品服务出现了阻塞或故障。如果此时购物车服务没有资源限制,一直接收请求,分配线程进行处理,很快就会将容器的资源耗尽。此时购物车服务中的其它业务(业务接口2)也会因为容器资源的耗尽而处理缓慢,进而引起服务的雪崩问题。

此时如果给购物车服务中的查询商品信息接口限制其使用的线程数,当线程数到达阈值后不再分配资源,这种方式称为线程隔离。
在这里插入图片描述

server:tomcat:# tomcat允许最大的请求数,默认8192max-connections: 8192# tomcat允许排队的连接队列长度,默认100。# 当tomcat处理连接的线程池慢时,请求的连接会排队,设置最大的排队数量accept-count: 100threads:# tomcat最大的线程数,默认200max: 200

2.5 服务降级

在购物车服务中需要查询商品信息,如果此时商品服务出现了阻塞或故障,此时服务就不会报错,会走fallback逻辑,快速响应(防止该服务无响应)。
fallback
实现服务降级,需要以下步骤

1)将FeignClient做为Sentinel的簇点资源

feign:sentinel:enabled: true # true: sentinel的簇点资源开启,默认为false

2)FeignClient添加fallback逻辑

  • FallbackClass

    TODO

  • FallbackFactory(推荐)

    给UserClient添加FallbackFactory

    @FeignClient(value = "userService")
    public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
    }
    

    ① 自定义FallbackFacotry

    public class UserClientFallbackFactory implements FallbackFactory<UserClient> {@Overridepublic UserClient create(Throwable throwable) {// 创建UserClient接口的实现类,实现其中的方法return new UserClient() {@Overridepublic User findById(Long id) {log.error("查询用户失败", throwable);return null;}}}
    }
    

    ② 将UserClientFallbackFactory注册为bean

    @Bean
    public UserClientFallbackFacotry userClientFallbackFacotry() {return new UserClientFallbackFacotry();
    }
    

    ③ 在UserClient中使用UserClientFallbackFacotry

    @FeignClient(value = "userService", fallbackFactory = UserClientFallbackFacotry .class)
    public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
    }
    

2.6 服务熔断

熔断是解决雪崩问题的重要手段,由断路器统计服务的异常比例、慢服务比例,如果超出了阈值则会熔断服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

熔断主要是有一个断路器,达到比例后拒绝发起请求,直接走fallback。
fusing
断路器有3个状态Closed, Open, Half-Open
fuse
在Sentinel中配置熔断,熔断策略有:慢调用比例,异常比例,异常数
在这里插入图片描述

三、Sentinel客户端

3.1 原始Jar包客户端

客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信

1)引入依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>x.y.z</version>
</dependency>

2)配置启动参数

启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。

除了修改 JVM 参数,也可以通过配置文件取得同样的效果。

更多详细信息:

https://sentinelguard.io/zh-cn/docs/startup-configuration.html

3.2 SpringCloudAlibaba客户端

1)引入依赖

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

2)配置控制台

spring:cloud:    sentinel:transport:dashboard: ${IP: localhost}:${PORT: 8719}http-method-specify: true # 开启请求方式(GET, POST, ...)做为资源名称

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python使用总结之jieba形容词提取详解

Python使用总结之jieba形容词提取详解 在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;分词是一个基础且关键的步骤。对于中文文本处理&#xff0c;常用的分词工具之一是 jieba。 本文将详细介绍如何使用 jieba 库进行分词&#xff0c;并从文本中提取出形容词。 …

C++ //练习 15.2 protected访问说明符与private有何区别?

C Primer&#xff08;第5版&#xff09; 练习 15.2 练习 15.2 protected访问说明符与private有何区别&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 protected成员可以被派生类函数访问&#xff0c;但不能被类外函…

216.Mit6.S081-实验四-Traps

本实验探索如何使用陷阱实现系统调用。您将首先使用栈做一个热身练习&#xff0c;然后实现一个用户级陷阱处理的示例。 开始编码之前&#xff0c;请阅读xv6手册的第4章和相关源文件&#xff1a; kernel/trampoline.S&#xff1a;涉及从用户空间到内核空间再到内核空间的转换的…

Go语言详细教程

Go语言&#xff0c;也称为Golang&#xff0c;是由Google设计的一种开源编程语言。它旨在提供高效的开发速度、良好的性能、简洁的语法和强大的标准库。Go语言特别适合于构建大规模的分布式系统和微服务架构。本文将带您从零开始学习Go语言&#xff0c;涵盖基础语法、进阶特性、…

【多线程】单例模式

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 单例模式的初识2. 单例模式的含义3. 单例模式实现的两种方式3.1 饿汉模式3.2 懒汉模式3.2.1 懒汉模式(单线…

Redis的缓存雪崩,击穿,穿透的介绍

1.缓存雪崩 为保证缓存中的数据与数据库的数据一致,会给Redis里的数据设置一个过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成新的缓存,因为就会访问数据库,并将数据更新到Redis里,这样后续请求就可以直接命中缓存. 当大量缓存在同一时间过期或…

Nginx和Tomcat实现负载均衡群集部署应用

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作时间&…

减少CMOS模拟开关导通电阻引起的失真

1 简介 许多数据采集系统的在多通道间选择时需要使用模拟开关&#xff0c;相比同类的机械开关&#xff0c;半导体开关锁表现出的工作特性是迥然不同的。如&#xff1a;处在闭合位置的CMOS开关的电阻&#xff08;导通电阻 “Ron”&#xff09;会因输入电压的不同而改变。该特性通…

IMU的加速度补偿、祛除向心力

目录 1. 简介2. 仅有XY偏移的修正过程3. 3D修正过程 1. 简介 一般&#xff0c;我们期望用IMU测量某个Target坐标系的加速度、角速度信息&#xff0c;然而IMU的坐标系与Target 坐标系一般存在位姿关系&#xff0c;此时IMU测量的加速度不能直接代表Target左坐标系的加速度。比如…

python库(10):SpaCy库实现NLP处理

1 SpaCy简介 自然语言处理&#xff08;NLP&#xff09;是人工智能领域中一个重要的分支。它旨在使计算机能够理解、解释和生成人类语言。Python中的SpaCy库提供了丰富的功能和工具&#xff0c;SpaCy是一个开源的软件库&#xff0c;用于处理和操作自然语言文本&#xff0c;可以…

uniapp颜色选择器

https://github.com/mehaotian/t-color-picker/ 优化点&#xff1a; 1.添加点击事件支持。 2.open时使用外部设置的颜色属性。 3.默认rgba模式&#xff0c;并且支持手动输入rgb。 本人优化后的代码如下&#xff1a; <template><view v-show"show" class&q…

Codeforces Round 957 (Div. 3)

A题&#xff1a;Only Pluses 思路&#xff1a; 数据范围小&#xff0c;直接暴力枚举。 code&#xff1a; inline void solve() {int a, b, c; cin >> a >> b >> c;int ans 0;for (int i a; i < a 5; i ) {for (int j b; j < b 5; j ) {for …

qt udp 协议 详解

1.qt udp 协议链接举例 在Qt框架中&#xff0c;使用UDP协议进行通信主要依赖于QUdpSocket类。以下是一个基于Qt的UDP通信示例&#xff0c;包括UDP套接字的创建、绑定端口、发送和接收数据报的步骤。 1. 创建UDP套接字 首先&#xff0c;需要创建一个QUdpSocket对象。这通常在…

BM42:混合搜索的新基准 - Qdrant

在过去的 40 年里&#xff0c;BM25 一直是搜索引擎的标准。它是一种简单但功能强大的算法&#xff0c;已被许多搜索引擎使用&#xff0c;包括 Google、Bing 和 Yahoo。 虽然看起来向量搜索的出现会削弱其影响力&#xff0c;但效果并不明显。目前最先进的检索方法试图将 BM25 与…

python库(11):Box库简化字典和对象之间的转换

1Box库简介 Box是一个Python库&#xff0c;它提供了一种将数据封装在字典和列表中的方式&#xff0c;同时提供了一些额外的功能&#xff0c;比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象&#xff08;DTO&#xff09;的创建&#xff0c;以及任何…

sqlmap使用之-post注入、head注入(ua、cookie、referer)

1、post注入 1.1、方法一&#xff0c;通过保存数据包文件进行注入 bp抓包获取post数据 将数据保存到post.txt文件 加上-r指定数据文件 1.2、方法二、通过URL注入 D:\Python3.8.6\SQLmap>python sqlmap.py -u "http://localhost/login.php" --data "userna…

替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制

原生的show-overflow-tooltip“true” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…

如何预防网站数据泄露

如何预防网站数据泄露?在数字化浪潮中&#xff0c;网站不仅是企业展示形象与服务的窗口&#xff0c;更是数据存储与传输的枢纽。随着网络攻击技术的日益复杂&#xff0c;网站数据泄露的风险也随之攀升。一旦敏感数据如客户信息、财务记录等被不法分子窃取&#xff0c;企业将面…

压缩文件的解析方式

Java中我们用ZipInputStream和ZipOutputStream来完成对zip文件和rar文件的读写 I /O流&#xff1a; Input:输入&#xff0c;通过“输入流”进行文件的读取操作 output:输出&#xff0c;通过“输出流”进行文件的写入操作 一、将压缩包解压缩 1.解压缩.zip格式文件&#xf…

微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…