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,一经查实,立即删除!

相关文章

216.Mit6.S081-实验四-Traps

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

【多线程】单例模式

&#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;可以…

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…

压缩文件的解析方式

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毕业设计…

NoSQL 之Redis集群模式

一&#xff1a;Redis集群方式 Redis有三种模式&#xff1a;分别是主从复制、哨兵模式、Cluster 1&#xff1a;主从模式: 主从复制是高可用Redis的基础&#xff0c;哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的…

netscaler LDAP+RADIUS传统的双因素认证方式(之一)

如果使用传统的双因素认证方式&#xff0c;可以通过在Citrix ADC (NetScaler) 13.1上配置Gateway Virtual Server来实现LDAP和RADIUS的双因素认证。当前配置方式&#xff0c;采用Cateway vServer两个Basic Authtication Policy方式实现&#xff0c;以下是详细步骤&#xff1a; …

【码题集】习题

目录 史莱姆融合 松鼠接松果 新月轩就餐 史莱姆融合 根据题意就是一道集合合并的题&#xff0c;所以要用并查集&#xff0c;不过最后我们要输出整个序列&#xff0c;所以要在合并的时候维护一个链表&#xff0c;以便最终合并成一个大集合的时候&#xff0c;输出整个链表就是…

Kotlin Misk Web框架

Kotlin Misk Web框架 1 添加依赖1.1 build.gradle.kts1.2 settings.gradle.kts1.3 gradle.properties 2 请求接口3 程序模块4 主服务类5 测试结果 Misk 是由 Square 公司开发的一个开源的多语言服务器框架&#xff0c;主要用于构建微服务。它主要使用 Kotlin 语言&#xff0c;但…

UGC与AI引领的下一个10年,丝芭传媒已经准备好

丝芭传媒最近传来的消息&#xff0c;都跟技术相关。 基于自研AI大模型“Paro&#xff08;心乐舞河&#xff09;”的AIGPT及AIGC生成工具APP“鹦鹉人”开启用户内测。2023年3月技术测试的图形化智能社交基座“美踏元宇宙”&#xff0c;也将开放首轮用户内测。 此外&#xff0c…

Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结

第31天&#xff0c;贪心最后一节(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 56.合并区间 738.单调递增的数字 968.监控二叉树 贪心算法总结 56.合并区间 文档讲解&#xff1a;代码随想录合并区间 视频讲解&#xff1a;手撕合并区间 题目&#xf…

高效图纸管理:彩虹图纸管理软件助您一臂之力

高效图纸管理&#xff1a;彩虹图纸管理软件助您一臂之力 在制造业的激烈竞争中&#xff0c;高效图纸管理是企业提升竞争力和降低成本的关键。然而&#xff0c;传统的图纸管理方式往往存在效率低下、信息混乱等问题。此时&#xff0c;彩虹图纸管理软件凭借其卓越的性能和丰富的功…