【2.3】Java微服务:sentinel服务哨兵

这篇具有很好参考价值的文章主要介绍了【2.3】Java微服务:sentinel服务哨兵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏:Java微服务
✨特色专栏: 知识分享
🥭本文内容:【2.3】Java微服务:sentinel服务哨兵
📚 ** ps **  : 阅读这篇文章如果有问题或者疑惑,欢迎各位在评论区提问或指出!

----------------------------------------------------------  目录  --------------------------------------------------------------

 

目录

一、内容

二、Sentinel介绍

1.背景

2. 介绍

3. 特性

三. Sentinel的历史

四. Sentinel与Hystrix的对比

五. Sentinel核心

六、Sentinel控制台

1. 介绍

2. 功能

3. 文档

4. 控制台安装

1)进入下载页面

2)下载jar包

3)将jar包移动到合适目录并启动

 七.  客户端接入控制台

1. 添加依赖

1)父工程中添加​编辑

2)子工程中添加

3)添加配置文件 

4)重启服务并发送一次请求

2. 定义资源

 ps:资源属性

3. 定义规则

1)流量控制规则

2)熔断降级规则

3)热点参数规则

4)授权规则

5)系统保护规则

6)动态规则扩展

1. 支持

2. 本地文件中设置方式Demo

八. RestTemplate支持

1. 配置异常类

2. RestTemplate的声明位置加上注解

3.注释掉之前在方法上的声明

 4. 增加流控进行测试

九. OpenFeign支持

1. 添加依赖

2. 开启Sentinel

参考文献


---------------------------------------------------------------------------------------------------------------------------------

一、内容

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


二、Sentinel介绍

1.背景

    Netflix中多项开源产品已进入维护阶段,不再开发新的版本,就目前来看是没有什么问题的。但是从长远角度出发,我们还是需要考虑是否有可替代产品使用。比如本文中介绍Alibaba Sentinel就是一款高性能且轻量级的流量控制、熔断降级可替代方案。是一款面向云原生微服务的高可用流控防护组件

(Hystrix目前状态:不在主动开发,当前处于维护模式  ——摘录自Hystrix官网)


2. 介绍

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


3. 特性

Sentinel 具有以下特征:

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

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

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

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


三. Sentinel的历史

  • 2012 年,Sentinel 诞生,主要功能为入口流量控制。
  • 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。
  • 2018 年,Sentinel 开源,并持续演进。
  • 2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。
  • 2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。
  • 2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。
  • 2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 OpenSergo 标准中,Sentinel 作为流量治理标准实现。

四. Sentinel与Hystrix的对比

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

五. Sentinel核心

Sentinel 的使用可以分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)。

  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。


六、Sentinel控制台

1. 介绍

     Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。


2. 功能

Sentinel 控制台包含如下功能:

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

3. 文档

控制台 · alibaba/Sentinel Wiki · GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - 控制台 · alibaba/Sentinel Wikihttps://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0


4. 控制台安装

1)进入下载页面

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

2)下载jar包

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

3)将jar包移动到合适目录并启动

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

执行命令(注意版本要改为自己的,可以使用tab键补全):

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.5.jar

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


 七.  客户端接入控制台

1. 添加依赖

1)父工程中添加【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

            <!-- 父工程添加如下依赖 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>

2)子工程中添加

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

        <!--  在子工程中导入依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

3)添加配置文件 

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080

4)重启服务并发送一次请求

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

然后刷新控制台就有显示了 

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


2. 定义资源

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

 ps:资源属性

Field 说明 默认值
resource 资源名,资源名是限流规则的作用对象
count 限流阈值
grade 限流阈值类型,QPS 模式(1)或并发线程数模式(0) QPS 模式
limitApp 流控针对的调用来源 default,代表不区分调用来源
strategy 调用关系限流策略:直接、链路、关联 根据资源本身(直接)
controlBehavior 流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流 直接拒绝
clusterMode 是否集群限流
重启服务后,刷新控制台就有显示资源了

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


3. 定义规则

1)流量控制规则

(不推荐和这一样在控制台进行设置,这里的设置重启服务后会消失,推荐使用动态规则)

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

请求超过设置,触发限流方法(上文的method1)

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

2)熔断降级规则

熔断降级规则是远程调用奔溃了,就会调用熔断降级触发方法(上文的method2)

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

3)热点参数规则

热点参数规则是一种更细粒度的流控规则,它允许将规则具体到参数上

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

4)授权规则

    根据调用来源来判断该次请求是否被允许,这时可以调用Sentinel的来源访问控制的功能。来源访问根据资源的请求来源(origin)限制资源是否通过。

设置禁止访问的来源:

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel添加配置类:

/**
 * 自定义来源处理规则
 */
@Component
public class MyRequestOriginParser implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest httpServletRequest) {
        return httpServletRequest.getParameter("userName");
    }
}

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

5)系统保护规则

    系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 和线程数四个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

    系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。

系统规则支持以下的阈值类型:

  • Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5
  • CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0)。
  • RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
  • 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

6)动态规则扩展

1. 支持

Sentinel 目前支持以下数据源扩展:

  • Pull-based: 动态文件数据源、Consul, Eureka
  • Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd
2. 本地文件中设置方式Demo

在yml文件中进行配置

      datasource:
        ds1:
          file:
            file: classpath:flowRule.json
            data-type: json
            rule-type: flow

增加并配置JSON文件

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

 重启项目后,调用接口

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


八. RestTemplate支持

    Spring Cloud Alibaba Sentinel 支持对 RestTemplate 调用的服务进行服务保护。需要在构造 RestTemplate Bean 时添加 @SentinelRestTemplate 注解。

1. 配置异常类


/**
 * sentinel异常工具类
 */
public class ExceptionUtil {

    // 服务流量控制处理
    public static ClientHttpResponse handleException(HttpRequest request,
                                                     byte[] body,
                                                     ClientHttpRequestExecution execution,
                                                     BlockException exception) {
        exception.printStackTrace();
        return new SentinelClientHttpResponse(
                JSON.toJSONString(new Order(333L, 333L, "333", 333, 3L, new ArrayList<>())));
    }

    // 服务熔断降级处理
    public static ClientHttpResponse fallback(HttpRequest request,
                                              byte[] body,
                                              ClientHttpRequestExecution execution,
                                              BlockException exception) {
        exception.printStackTrace();
        return new SentinelClientHttpResponse(
                JSON.toJSONString(new Order(444L, 444L, "444", 444, 4L, new ArrayList<>())));
    }
}

2. RestTemplate的声明位置加上注解

    @SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class,
            fallback = "fallback", fallbackClass = ExceptionUtil.class)

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

3.注释掉之前在方法上的声明

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

 4. 增加流控进行测试

【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel

 【2.3】Java微服务:sentinel服务哨兵,微服务,知识分享,sentinel


九. OpenFeign支持

1. 添加依赖

<!-- spring cloud openfeign 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- spring cloud alibaba sentinel 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2. 开启Sentinel

yml文件中添加两处地方:

# feign 开启 sentinel 支持
feign:
  sentinel:
    enabled:true

  cloud:
    sentinel:
      transport:
        port:8719
        dashboard:localhost:8080

创建异常注解

/**
 * 服务熔断降级处理可以捕获异常
 */
@Component
publicclass ProductServiceFallbackFactory implements FallbackFactory<ProductService> {

    // 获取日志,在需要捕获异常的方法中进行处理
    Logger logger = LoggerFactory.getLogger(ProductServiceFallbackFactory.class);

    @Override
    public ProductService create(Throwable throwable) {
        returnnew ProductService() {
            @Override
            public Product selectProductById(Integer id) {
              
                return new new Order(333L, 333L, "333", 333, 3L, new ArrayList<>());
            }
        };
    }

}

服务接口类中添加注解即可

@FeignClient(value = "user-service", fallbackFactory = ProductServiceFallbackFactory.class)

参考文献

home | Sentinelhomehttps://sentinelguard.io/zh-cn/index.html微服务系列之Sentinel服务哨兵今日份视频来啦,通过视频学习可真是一点不累,快点进来 ~https://mp.weixin.qq.com/s?__biz=MzA4MDEwNTI1NA==&mid=2459057627&idx=1&sn=2c4b1d9d98b6ea847face29de41d3872&chksm=88cfc792bfb84e84a792ffaa1dd464603297e99f3eccb28f379794875daf985f2835376501d5&cur_album_id=1337276895993430016&scene=189#wechat_redirect


 最后,

        相关内容会陆续更新,希望文章对你有所帮助!文章来源地址https://www.toymoban.com/news/detail-633032.html

到了这里,关于【2.3】Java微服务:sentinel服务哨兵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 9.阿里Sentinel哨兵

            Sentinel(哨兵)是由阿里开源的一款流量控制和熔断降级框架,用于保护分布式系统中的应用免受流量涌入、超载和故障的影响。它可以作为微服务架构中的一部分,用于保护服务不被异常流量冲垮,从而提高系统的稳定性和可靠性。 https://github.com/alibaba/Sentinel

    2024年02月11日
    浏览(35)
  • Redis 哨兵(sentinel)

    1.1 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 1.2 作用 俗称,无人值守运维 哨兵的作用: 1、监控redis运行状态,包括master和slave 2、 当master down机,能自动将slave切换成新master 1.3 官网理论, https://redis.io/doc

    2024年02月09日
    浏览(40)
  • redis 哨兵 sentinel(一)配置

    sentinel巡查监控后台master主机是否故障,如果故障根据 投票数 自动将某一个从库转换为新主库,继续对外服务 sentinel 哨兵的功能 监控 监控主从redis库运行是否正常 消息通知 哨兵可以将故障转移的结果发送给客户端 故障转移 如果master异常,则会进行主从切换,将其中一个

    2024年02月07日
    浏览(42)
  • Redis之Sentinel(哨兵)机制

    Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从

    2024年02月10日
    浏览(39)
  • 【Redis学习】Redis哨兵(sentinel)

    定义 吹哨人巡查监控后台master主机是否故障,如果故障了根据 投票数 自动将某一个从库转换为新主库,继续对外服务。 作用: 监控redis运行状态,包括master和slave 当master down机,能自动将slave切换成新master 哨兵可以类比为无人值守的运维。 功能 主从监控 监控主从redis库运

    2023年04月09日
    浏览(46)
  • spring redis Sentinel 哨兵 原理

    redis 常用的连接客户端 有三个 Jedis:是老牌的Redis的Java实现客户端,提供了比较全面的Redis命令的支持, Redisson:实现了分布式和可扩展的Java数据结构。 Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 如果未指定 redis cli

    2023年04月23日
    浏览(38)
  • 【Redis】高可用之二:哨兵(sentinel)

     本文是Redis系列第5篇,前4篇欢迎移步  【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客 关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。 https://blog.csdn.net/aqin1012/article/details/130365083 【

    2024年02月12日
    浏览(56)
  • redis夯实之路-哨兵(Sentinel)机制详解

    Sentinel(哨兵)保证了redis的高可用性,一个Sentinel或多个Sentinel组成的系统监视多个主从服务器,当主服务器下线时,自动将一个从服务器升级为主服务器。 集群监控:负责监控redis master和slave进程是否正常工作  消息通知:如果某个redis实例有故障,那么哨兵负责发送消息给

    2024年01月21日
    浏览(39)
  • 哨兵3号(Sentinel 3)卫星数据处理

    李国春 本文介绍使用RSD处理欧空局哨兵3号(Sentinel 3)卫星数据的具体方法。 气象数据多用NetCDF格式交换和存储,气象卫星数据也是如此。气象业内认为HDF5也是NetCDF的一部分,虽然文件扩展名使用的是.nc,但是实际上就是HDF5。但有些.nc数据确实是纯NetCDF,如一些探测土壤水

    2024年02月07日
    浏览(45)
  • Sentinel 哨兵数据 更新下载地址 2023年11月

    2023年11月开始,原来欧空局的下载地址和应用有了变化,现在迁移到以下新地址下载: https://dataspace.copernicus.eu/ 我这边测试需要重新注册用户才能进行登录和使用,界面使用和之前差不多,具体操作步骤可以参考之前写的博客。 同样注册一个账号,也可以从阿里云地球下载

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包