sentinel

sentinel

1.Sentinel简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

1、sentinel的特征

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
    -完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等

2、sentinel的主要特性

img

3、sentinel的主要优势和特性

  • 轻量级,核心库无多余依赖,性能损耗小
  • 方便接入,开源生态广泛
  • 丰富的流量控制场景
  • 易用的控制台,提供实时监控、机器发现、规则管理等能力
  • 完善的扩展性设计,提供多样化的 SPI 接口,方便用户根据需求给 Sentinel 添加自定义的逻辑

4、sentinel与spring cloud Hystrix 对比

Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于响应时间或失败比率 基于失败比率
实时指标实现 滑动窗口 滑动窗口(基于 RxJava)
规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持
流量整形 支持慢启动、匀速器模式 不支持
系统负载保护 支持 不支持
控制台 开箱即用,可配置规则、查看秒级监控、机器发现等 不完善
常见框架的适配 Servlet、Spring Cloud、Dubbo、gRPC 等 Servlet、Spring Cloud Netflix

5、sentinel分为两个部分

  • 核心库(Java 客户端): 不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持
  • 控制台(Dashboard): 基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器

2.Sentinel安装与使用

在docker-compose加入一下配置:

  sentinel:
    image: gitegg-sentinel-dashboard
    container_name: sentinel
    environment:
      TZ: Asia/Shanghai
    build: 
      context: ./gitegg-sentinel-dashboard
      dockerfile: Dockerfile
    ports:
      - "8718:8718"
    volumes:
      # 配置文件
      - /docker/gitegg-sentinel-dashboard/logs/:/home/sentinel-dashboard/logs
    restart: always
    networks:
      - mydev_default

本地打包后编写DockerFile运行;

3.服务打开sentinel的监控

 <!-- SpringCloud Alibaba Sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

我在项目单独在common模块下加入的sentinel

image-20240606103048933

所以在其他应用模块直接引入gitegg-common-sentinel就可以了。

在公共配置中加入:

spring
    cloud:
        # sentinel 配置
        sentinel:
          # sentinel 开关
          enabled: true
          # 取消控制台懒加载
          eager: true
          filter:
            url-patterns: /systemFeign/*,/system/*,/base/*
          transport:
            # dashboard控制台服务名 用于服务发现
            # 如无此配置将默认使用下方 dashboard 配置直接注册
            # server-name: gitegg-sentinel-dashboard
            # 客户端指定注册的ip 用于多网卡ip不稳点使用
            # 由于windows下docker网络不能用host所以这里指定了ip避免出现sentinel找不到服务检测
           	 client-ip: 10.0.21.176
            # 控制台地址 从1.3.0开始使用 server-name 注册
           	 dashboard: localhost:8718
           	#使用nacos做数据源持久化 
            datasource:
                ds2:
                  nacos:
                    namespace: @nacos.namespace@
                    data-type: json
                    server-addr: @nacos.server@
                    data-id: ${spring.application.name}-sentinel
                    group-id: @nacos.discovery.group@
                    rule-type: flow

持久化问题:

entinel控制台不具备同步修改Nacos配置的能力,而Nacos由于可以通过在客户端中使用Listener来实现自动更新。所以,在整合了Nacos做规则存储之后,需要知道在下面两个地方修改存在不同的效果:

Sentinel控制台中修改规则:仅存在于服务的内存中,不会修改Nacos中的配置值,重启后恢复原来的值。

Nacos控制台中修改规则:服务的内存中规则会更新,Nacos中持久化规则也会更新,重启后依然保持。

4.Sentinel的控制规则

SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)-阿里云开发者社区 (aliyun.com)

posted @   CodeofTruth  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示