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

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

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第1张图片

文章目录

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

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第2张图片

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
SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第3张图片
运行命令:

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

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

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第4张图片

五、项目整合Sentinel

1、添加依赖

 <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
 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

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第5张图片
SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介_第6张图片

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

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

你可能感兴趣的:(spring,cloud,sentinel,微服务,java,后端)