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

📝 学技术、更要掌握学习的方法,一起学习,让进步发生

👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。

💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。

💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。

❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

文章目录

  • [一、Sentinel 是什么](#一、Sentinel 是什么)
  • [二、Sentinel 的特征](#二、Sentinel 的特征)
  • [三、Sentinel 和 Hystrix 的熔断降级区别](#三、Sentinel 和 Hystrix 的熔断降级区别)
  • [四、Sentinel 的使用](#四、Sentinel 的使用)
    • [1、Java 客户端&Dashboard](#1、Java 客户端&Dashboard)
    • [2、Sentinel 控制台功能](#2、Sentinel 控制台功能)
    • [3、Sentinel 控制台的下载](#3、Sentinel 控制台的下载)
  • 五、项目整合Sentinel

一、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

运行命令:

perl 复制代码
java -Dserver.port=8718 -jar sentinel-dashboard-1.8.6.jar

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

五、项目整合Sentinel

1、添加依赖

xml 复制代码
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
 </dependency>

2、配置yml

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测试类

java 复制代码
@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是如何做到流量控制、熔断降级的。

相关推荐
计算机学姐几秒前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea
小筱在线5 分钟前
SpringCloud微服务实现服务熔断的实践指南
java·spring cloud·微服务
luoluoal10 分钟前
java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
java·vue.js·spring boot
ChinaRainbowSea15 分钟前
十三,Spring Boot 中注入 Servlet,Filter,Listener
java·spring boot·spring·servlet·web
小游鱼KF19 分钟前
Spring学习前置知识
java·学习·spring
扎克begod22 分钟前
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
java·开发语言·python
青灯文案124 分钟前
SpringBoot 项目统一 API 响应结果封装示例
java·spring boot·后端
我就是程序猿34 分钟前
tomcat的配置
java·tomcat
阳光阿盖尔40 分钟前
EasyExcel的基本使用——Java导入Excel数据
java·开发语言·excel
二十雨辰41 分钟前
[苍穹外卖]-12Apache POI入门与实战
java·spring boot·mybatis