SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介

news2024/12/23 0:48:55

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。
💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。
💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。
❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

在这里插入图片描述

文章目录

  • 一、Sentinel 是什么
  • 二、Sentinel 的特征
  • 三、Sentinel 和 Hystrix 的熔断降级区别
  • 四、Sentinel 的使用
    • 1、Java 客户端&Dashboard
    • 2、Sentinel 控制台功能
    • 3、Sentinel 控制台的下载
  • 五、项目整合Sentinel
    • 1、添加依赖
    • 2、配置yml
    • 3、Controller测试类

一、Sentinel 是什么

Sentinel关键特性:流量控制、熔断降级

由官网可知:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。微服务的流量防卫兵。

二、Sentinel 的特征

丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

完备的实时监控:Sentinel 同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

三、Sentinel 和 Hystrix 的熔断降级区别

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。

在这里插入图片描述

Sentinel 对这个问题采取了两种手段:

  • 通过并发线程数进行限制
    和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

  • 通过响应时间对资源进行降级
    除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

四、Sentinel 的使用

1、Java 客户端&Dashboard

Sentinel 的使用分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

2、Sentinel 控制台功能

Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。

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

注意:Sentinel 控制台目前仅支持单机部署。
启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

3、Sentinel 控制台的下载

下载安装运行,下载地址:https://github.com/alibaba/Sentinel/releases
在这里插入图片描述
运行命令:

java -Dserver.port=8718 -jar sentinel-dashboard-1.8.6.jar

运行时可以改变端口号(默认8080)我这里改成8718演示,但是这是一种临时更改,下次重新启动的时候sentinel 的默认端口还是8080。启动后,访问:http://localhost:8718/ 账号密码:sentinel/sentinel

在这里插入图片描述

五、项目整合Sentinel

1、添加依赖

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

2、配置yml

server:
  port: 8401
spring:
  application:
    name: cloud-sentinel #微服务应用的名字
  cloud:
    sentinel:
      transport:
        #这里配置控制台的地址
        dashboard: localhost:8718
        #注意:很多连不上控制台就是没有配置client-ip,而且最好不要配置localhost或127.0.0.1,尽量配置成宿主机的ip
        client-ip: 172.28.20.236
        #默认8719端口,假如被占用会自动从8719开始,依次+1扫描,直到找到未被占用的端口
        port: 8719

3、Controller测试类

@RestController
@Slf4j
@RequestMapping("")
public class TestController {

    @GetMapping("/testA")
    public CommonResult<String> testA() {
        return new CommonResult<>(200, "success", "testA");
    }

    @GetMapping("/testB")
    public CommonResult<String> testB() {
        return new CommonResult<>(200, "success", "testB");
    }
}

服务启动,访问接口http://localhost:8401/testA 注册到sentinel

在这里插入图片描述
在这里插入图片描述

注意📢:sentinel是懒加载机制,只有访问过一次的资源才会被监控。

好了关于Sentinel基本概述和控制台的集成就到这里了,篇幅有限,下一节我们一起学习Sentinel是如何做到流量控制、熔断降级的。

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

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

相关文章

零基础Java学习路线

预计阅读时间&#xff1a; 8分钟 目录 第一阶段&#xff1a; Java 基础第二阶段&#xff1a;数据库第三阶段&#xff1a; Java Web第四阶段&#xff1a;主流框架MavenGitSSM框架Spring Boot 第五阶段&#xff1a;服务器中间件RedisMQElasticsearch项目实践 第六阶段&#xff1a…

NAND Flash Program Operation: One Shot VS. Two Pass

讲解相关内容的文章很少&#xff0c;开始只搜索到本站一篇相关内容&#xff1a;浅谈NAND FLASH的两种编程方式 看完以后思路还不是很清晰&#xff0c;又发现了两篇FMS的主题演讲&#xff0c;在此简单总结分享。 Flash Memory Summit 2016&#xff0c; Thomas Parnell, IBM Res…

Spring-IoC-加强

目录 简略介绍 理解介绍 IoC的优点 Spring的IoC IoC是如何实现的 IoC能做什么 IoC和DI Spring IoC过程 为什么框架需要反射 Spring Bean的循环依赖问题 IoC简单实现 简略介绍 所谓的IoC&#xff08;inversion of control&#xff09;&#xff0c;就是控制反转的意思…

Django基础三——视图函数

文章目录 一、基本了解1.1 Django内置函数1.2 http请求流程 二、HttpRequest对象&#xff08;接受客户端请求&#xff09;2.1 常用属性2.2 常用方法2.3 服务端接收URL参数2.4 QueryDict对象2.5 案例2.5.1 表单GET提交2.5.2 表单POST提交2.5.3 上传文件 三、HttpResponse对象&am…

气传导耳机品牌推荐?四大品牌气传导耳机推荐

​越来越多小伙伴开始使用气传导耳机了&#xff0c;面对市面上参差不齐的气传导耳机&#xff0c;导致很多小伙伴找不到适合自己的那款耳机了&#xff0c;面对这些问题&#xff0c;我整理了几款好用的气传导耳机给大家挑选和参考&#xff0c;希望都能找到心仪那款。 ①NANK南卡…

Docker-compose 容器编排

1. 是什么 Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;写好多个容器之间的调用关系。然后&#xff0c;只要一个命令&#xff0c;就能同时启动/关闭这些容器…

vscode+ros开发环境搭建

目录 介绍 前提 vscode安装 vscode插件安装 工作空间准备 打开vscode 创建catkin包 编写cpp代码 编译 运行 启动ros服务 监听话题 启动ros测试 介绍 ros开发是机器人开发中必不可少的工作&#xff0c;语言选择可以是c,也可以是python。工具的话&#xff0c;不能像wi…

Mysql 基本概念

数据库的组成 数据 数据是描述事务的符号记录&#xff1b;包括数字、文字、图形、图像、声音、档案记录等 以“记录“形式按统一的格式进行存储 表 将不同的记录以行和列的方式组合成了表 用来存储具体数据 数据库 它就是所有不同属性表的集合 以一定的组织方式存储的…

vue 简单实验 v-for 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"list-rendering"><ol><li v-for"todo in todos">{{ todo.text }}</li></ol> </div> &…

数据API服务管理功能:解放数据潜力,提升业务效率

数据API服务的重要性 在数字化时代&#xff0c;数据被认为是企业的重要资产。数据API服务的管理功能能够有效帮助企业实现数据的整合和利用。通过合理的数据API服务管理&#xff0c;企业可以更好地解放数据潜力&#xff0c;提升业务效率。 ​ 解放数据潜力 数据API服务管理功…

解决git上传远程仓库时的大文件提交

在git中超过100M的文件会上传失败&#xff0c;而当一个文件超过50M时会给你警告&#xff0c;如下 warning: File XXXXXX is 51.42 MB; this is larger than GitHubs recommended maximum file size of 50.00 MB 解决这种问题&#xff0c;首先在项目的.git文件夹中找到.gitigno…

git push时,由于commit了大文件无法成功push的解决办法

2句命令解决&#xff01; 如图可以看见大文件的md5值&#xff0c;复制下来&#xff0c;以下命令会使用到 命令1&#xff1a; git rev-list --objects --all | grep b8d13387c0dfd7a8cec9ff0f6c8ded06eb21556f执行上面命令将得到&#xff0c;如下的输出&#xff0c;可以得知是…

C++基础Ⅱ变量

目录儿 4 变量4.1 原始数据类型字符 char整型 short整型 int整型 long整型 long long单精度浮点型 float双精度浮点型 double布尔型 bool 4.2 sizeof 关键字 5 指针和引用 4 变量 4.1 原始数据类型 原始数据类型是构建C程序的最基础数据类型 所有数据都是基于这些原始数据类型…

度加剪辑App的MMKV应用优化实践

作者 | 我爱吃海米 导读 移动端开发中&#xff0c;IO密集问题在很多时候没有得到充足的重视和解决&#xff0c;贸然的把IO导致的卡顿放到异步线程&#xff0c;可能会导致真正的问题被掩盖&#xff0c;前人挖坑后人踩。其实首先要想的是&#xff0c;数据存储方式是否合理&#x…

HQL解决连续三天登陆问题

1.背景 统计连续登录天数超过3天的用户&#xff0c;输出信息包括&#xff1a;用户id&#xff0c;登录天数&#xff0c;起始时间&#xff0c;结束时间&#xff1b; 2.准备数据 -- 建表 create table if not exists user_login_3days(user_id STRING,login_date date );--插入…

查询数据库字段信息 mysql

属性&#xff1a; SELECT TABLE_SCHEMA AS 库名, TABLE_NAME AS 表名, COLUMN_NAME AS 字段名, ORDINAL_POSITION AS 字段顺序, COLUMN_DEFAULT AS 默认值, IS_NULLABLE AS 是否为空, DATA_TYPE …

怎么把pdf文件变小?值得一看的文件压缩方法

现在很多平台对于上传的文件大小是有限制的&#xff0c;如果压缩成压缩包的形式发送&#xff0c;虽然可以减小一点体积&#xff0c;但对方无法直接打开预览文件内的内容&#xff0c;很不方便&#xff0c;怎么才能直接将PDF文件的体积压缩变小呢&#xff1f;下面就给大家汇总了几…

GB2312转UTF-8部分中文乱码

现象 最近写了个txt导入&#xff0c;客户反馈有时候导入的数据&#xff0c;会出现个别中文乱码的现象&#xff0c;但是我之前已经做过编码转换处理了&#xff0c;统一转成了UTF-8。 比如“鞠婧祎”,导入进来是这样&#xff1a; 排查思路 首先看了一下这个文本的编码格式&am…

Window Server 与 Windows 系统开关机日志查看方法

目录 Windows/Windows Server 查看日志Windows 系统常用的事件 ID 环境&#xff1a;Windows Server 2019 &#xff08;也适用于 Windows 其他系统&#xff09;。 不同版本的 Windows 图标可能有所不同&#xff0c;但是服务器级 Windows Server 与普通桌面级 Windows 还会有些操…

低代码平台是为何而生?低代码平台发展前景又如何呢?

低代码平台是为何而生&#xff1f;低代码平台发展前景又如何呢&#xff1f;低代码平台在近年来已经吸引了越来越多的关注&#xff0c;被认为是一种能够加速应用程序开发的解决方案。低代码平台虽然还存在着各种各样的问题&#xff0c;但是低代码平台的前景依然十分广阔。 下面…