Sentinel 学习笔记

news2024/9/25 1:20:10

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允许最大的请求数,默认8192
    max-connections: 8192
    # tomcat允许排队的连接队列长度,默认100。
    # 当tomcat处理连接的线程池慢时,请求的连接会排队,设置最大的排队数量
    accept-count: 100
    threads:
      # tomcat最大的线程数,默认200
      max: 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> {
        @Override
        public UserClient create(Throwable throwable) {
            // 创建UserClient接口的实现类,实现其中的方法
            return new UserClient() {
                @Override
                public 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.coloradmin.cn/o/1920690.html

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

相关文章

【Windows】XMedia Recode(免费的专业视频格式转换软件)及同类型软件介绍

今天给大家介绍的这款软件叫XMedia Recode&#xff0c;这是一款免费的专业视频格式转换软件。有需要的朋友可以了解一下哦。 软件介绍 XMedia Recode 是一款功能强大的免费视频转换和音频转换软件&#xff0c;它支持多种格式的视频和音频文件转换&#xff0c;以及简单的编辑…

收银系统源码-商品套餐功能视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

PMP–计算--图示

文章目录 概念基准绩效预测 公式 概念 基准绩效 最常见的基准是成本和进度。跟踪范围或技术基准的项目可以使用可交付物测量指标中的信息。 大多数进度测量指标会根据以下相关的计划绩效来跟踪实际绩效&#xff1a; ▶ 开始日期和完成日期。将实际开始日期与计划开始日期进行…

MD4C 销售订单查询库存/需求清单 函数

MD4C 销售订单查询库存/需求清单 函数 目录 函数 MD_SALES_ORDER_STATUS_REPORT 函数MD_SALES_ORDER_STATUS_REPORT 结果 T-CODE: MD4C

Zynq系列FPGA实现SDI相机编码输出,基于GTX高速接口,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx-Kintex7上的应用 3、详细设计方案设计原理框图输入Sensor之-->OV5640摄像头输入Sensor之-->HDMIHLS图像缩放详解VDMA图像缓存SDI视频输出架构之-->RGB转BT1120SDI视频输出架构之…

【CANoe使用】常用基础功能

CANoe使用 CANoe基础功能使用1. CANoe工程配置基础1.1 新建工程和通道配置1.2 添加DBC文件1.3 CANoe工程的保存和打开 2. 分析窗口使用2.1 Trace2.1.1 Trace窗口工具栏常用功能2.1.2 Trace数据的导入导出 2.2 Graphics2.2.1 添加分析信号2.2.2 Graphics工具栏功能 2.3 State Tr…

自定义json序列化和反序列化

一、LocalDateTime反序列化异常 首先我们定义一个java POJO实体类&#xff0c;其中关键的成员变量时birthDate,我们没有采用Date数据类型&#xff0c;而是采用了Java8 新的日期类型LocalDateTime,使用LocalDateTime的好处我就不多说了&#xff0c;有很多的文章解释说明。我们把…

技术成神之路:设计模式(五)抽象工厂模式

1.介绍 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定其具体类。这种模式属于工厂模式的一种扩展&#xff0c;它通过引入抽象层来实现工厂方法的组合&…

vue3 - vue项目自动检测更新

GitHub Demo 地址 在线预览 web项目当页面检测到需要更新&#xff0c;然后弹框提示是否更新&#xff08;刷新页面&#xff09;这种可以通过纯前端实现也可以通过接口实现 接口实现&#xff1a;通过调用接口轮询和本地的版本号比较&#xff0c;检查是否需要弹框提示更新纯前端实…

RAFT RAG GraphRAG

解读人类语言真实意图是一门不完美的学问。相关搜索是一个认知迷宫&#xff0c;即使是最先进的 AI 也无法(完全)解决&#xff01; # RAG Retrieval-Augmented Generation # Retrieval Augmented FineTuning&#xff08;RAFT&#xff09; RAFT的核心思想是结合监督式微调&#…

云WAF | 云waf保护你的网络安全

随着时代的发展&#xff0c;云计算与网络安全成为当今社会的热点问题。由于网络环境的日益复杂&#xff0c;网络安全问题日益突出&#xff0c;网络安全问题日益突出。近年来&#xff0c;各类网络安全工具与技术层出不穷&#xff0c;以保障用户信息及企业财产安全。云服务防火墙…

机器学习——决策树(笔记)

目录 一、认识决策树 1. 介绍 2. 决策树生成过程 二、sklearn中的决策树 1. tree.DecisionTreeClassifier&#xff08;分类树&#xff09; &#xff08;1&#xff09;模型基本参数 &#xff08;2&#xff09;模型属性 &#xff08;3&#xff09;接口 2. tree.Decision…

289个地级市-资源型城市划分数据

资源型城市&#xff1a;经济地理的独特现象与可持续发展的挑战 资源型城市是指那些以丰富的自然资源为基础&#xff0c;对国家经济和工业化进程有着重要影响的城市。这些城市在国家现代化建设中扮演着关键角色&#xff0c;其发展状况直接关系到区域经济的繁荣与社会的稳定。 资…

Go-知识测试-模糊测试

Go-知识测试-模糊测试 1. 定义2. 例子3. 数据结构4. tesing.F.Add5. 模糊测试的执行6. testing.InternalFuzzTarget7. testing.runFuzzing8. testing.fRunner9. FuzzXyz10. RunFuzzWorker11. CoordinateFuzzing12. 总结 建议先看&#xff1a;https://blog.csdn.net/a1879272183…

GitHub连接超时问题 Recv failure: Connection was reset

用手机热点WIF拉取git项目的时候&#xff0c;遇到Recv failure: Connection was reset问题。 解决办法 一、手动开启本地代理 二、在终端&#xff08;cmd&#xff09;输入命令 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy https:…

QT实现自定义带有提示信息的透明环形进度条

1. 概述 做界面开发的童鞋可能都会遇到这样的需求&#xff0c;就是有一些界面点击了之后比较耗时的操作&#xff0c;需要界面给出一个环形进度条的进度反馈信息. 如何来实现这样的需求呢&#xff0c;话不多说&#xff0c;上效果 透明进度条 2. 代码实现 waitfeedbackprogressba…

2006-2021年 291个地级市资源错配指数、劳动和资本相对扭曲指数do文件和结果

资源错配指数&#xff1a;衡量生产要素配置效率的关键指标 资源错配指数&#xff08;Misallocation Index&#xff09;是一个衡量资源配置效率的指标&#xff0c;它反映了生产要素是否得到了合理配置&#xff0c;以及是否达到了生产效率的最优状态。一个较高的资源错配指数意味…

three-tile: 一个开源的轻量级三维瓦片库

three-tile 介绍 three-tile 是一个开源的轻量级三维瓦片库&#xff0c;它基于threejs使用typescript开发&#xff0c;提供一个三维地形模型&#xff0c;能轻松给你的应用增加三维瓦片地图。 https://blog.csdn.net/HZGJF/article/details/140280844 源码&#xff1a;https:/…

malloc与free函数的用法(精简全面 · 一看即懂)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;今天为大家带来malloc函数与free函数的用法&#xff0c;我们一起来看看吧&#xff01; 目录 一、malloc函数 &#x1f4ab; 1、⭐️malloc函数对应的头文件⭐️ 2、⭐️malloc函数的作用⭐️ 3…

高职计算机网络实训室

一、高职计算机网络实训室建设的背景 如今&#xff0c;数字化发展已成为国家发展的战略方向&#xff0c;是推动社会进步和经济发展的重要动力。在这一时代背景下&#xff0c;计算机网络技术作为数字化发展的基础设施&#xff0c;其地位和作用愈发凸显。因此&#xff0c;高职院…