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

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只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,尽量配置成宿主机的ipclient-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.hqwc.cn/news/80715.html

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

相关文章

C语言暑假刷题冲刺篇——day4

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练 ✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你…

Java“牵手”快手商品列表数据,关键词搜索快手商品数据接口,快手API申请指南

快手商城是一个网上批发购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取快手商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问快手商城的网页来获取商品详情信息。以下是两种常用方法的介绍…

Objectarx 2021使用vs2019生成报错 /RTCc rejects conformant code

error C2338: /RTCc rejects conformant code错误解决 使用VS2019/VS2022生成项目报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C1189 #error: /RTCc rejects conformant code, so it is not supported by the C Standard Library. Either remove this compiler opti…

AI狂飙,云端IDE如何书写未来?TVP吐槽大会邀您来论道

随着云原生的发展&#xff0c;数字化转型的深入&#xff0c;云端开发场景越发丰富&#xff0c;今年&#xff0c;云端 IDE 逐渐成为聚光灯下的一大焦点&#xff0c;CNCF 在 2023 年云原生预测中提出 “云原生 IDE 成为常态”。云端 IDE 创造了一个端到端的开发环境&#xff0c;并…

意外发现Cortex-M内核带的64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了

视频&#xff1a; https://www.bilibili.com/video/BV1Bw411D7F5 意外发现Cortex-M内核带的64bit时间戳&#xff0c;比32bit的DWT时钟周期计数器更方便&#xff0c;再也不用担心溢出问题了 介绍&#xff1a; 看参数手册的Debug章节&#xff0c;System ROM Table里面带Timestam…

解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

解锁ChatGLM-6B的潜力&#xff1a;优化大语言模型训练&#xff0c;突破任务困难与答案解析难题 LLM&#xff08;Large Language Model&#xff09;通常拥有大量的先验知识&#xff0c;使得其在许多自然语言处理任务上都有着不错的性能。 但&#xff0c;想要直接利用 LLM 完成…

Vue Element upload组件和Iview upload 组件上传文件

今天要分享的是使用这俩个UI组件库的upload组件分别实现调用组件本身的上传方法实现和后台交互。接下来就是开车的时间&#xff0c;请坐稳扶好~ 一、element upload组件传送门 1、html文件 <el-upload ref"uploadRef" :action"uploadUrl" :data"…

一篇文章带你学好--->Git(超详细)

Git的详解与使用&#xff0c;一篇文章带你学习好git, ,Git是当前比较流行的版本控制工具 &#xff0c;它具有分布式的功能 &#xff0c;有助于我们在团队开发中提高开发效率 注意&#xff1a;敲黑板&#xff01;&#xff01;&#xff01; 带领你去使用git 配有图文解释 超详细 …

使用 Sahi 实现 Web 自动化测试

Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具。Sahi 运行为一个代理服务器&#xff0c;并通过注入 JavaScript 来访问 Web 页面中的元素。Sahi 支持 HTTPS 并且独立于 Web 站点&#xff0c;简单小巧却功能强大。它相对于 Selenium 等自动化测试工具…

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…

Promise.all和promise.race的应用场景举例

Promise.all( ).then( )适用于处理多个异步任务&#xff0c;且所有的异步任务都得到结果时的情况。 <template><div class"box"><el-button type"primary" plain click"clickFn">点开弹出框</el-button></div> &…

IDEA创建Servlet(Web)项目完整教程-2023,并配置tomcat的端口号,以及默认打开的浏览器

文章目录 1. 文章引言2. 创建servlet项目3. 总结1. 文章引言 今天,粉丝问我一个问题,如下图所示: 他是jsp + servlet项目,但启动后,无论如何都无法访问,于是向我咨询如何解决该问题。 我解决了一系列的问题后,也无法启动他的项目,于是自己创建一个简单的servlet项目。…