Sentinel数据双向同步

上面实现了Nacos单向同步配置规则到Sentinel,但是只是单向的,没有实现Sentinel向Nacos同步规则配置;下面我们来实现Sentinel同步配置到Nacos,以及两者的双向数据同步结合使用。

我们回顾一下,首先Sentinel规则的存储默认是存储在内存的,应用重启之后规则会丢失。因此我们通过配置中心Nacos保存规则,然后通过定时拉取Nacos数据来获取规则配置,可以做到动态实时的刷新规则。但是这种方式是单向的,并且有一定的限制,我们是否可以在Sentinel和Nacos这两个中间件之间双向同步数据呢?下面我们来实现Sentinel数据双向同步。

前言

因为实现Sentinel-Nacos数据双向同步,需要使用到推(Push)模式在两边相互推送数据。那么什么是Sentinel的拉模式和推模式呢?Sentinel的规则管理有哪些模型呢?下面我们一一来进行解答:

什么是推模式和拉模式?

  • 推模式:注册中心统一推送,客户端通过注册监听器时刻监听变化
  • 拉模式:客户端主动向配置中心定时轮询拉取配置

Sentinel的规则管理模型

Sentinel的规则管理,主要有以下三种模型:

首先原始模式下的Sentinel Dashboard配置的规则重启应用后就会丢失,这种方式肯定是有极大风险的,生产环境不推荐使用。

其次,拉模式的确不会对Sentinel客户端造成压力,但是Sentinel客户端多了以后会对Nacos注册中心造成压力,并且也无法保证实时性。拉模式的应用场景一般是处理压力小的一方向处理压力大的一方获取数据,并且没有太高的实时性要求,比如定时拉取日志数据。

我们可以使用推模式作为Sentinel客户端的规则同步方式,通过监听器监听Nacos服务端口,来实现规则的实时更新。这就需要涉及到Sentinel Dashboard的规则管理及推送功能:集中管理和推送规则sentinel-core 提供了 API 和扩展接口来接收和推送信息。并且这种方式,不用担心Sentinel客户端配置的规则错误会导致正确的配置丢失,因为Nacos有配置一键回滚机制,并且还有MySQL作为持久化手段。

总结:生产环境建议使用 Push模式的数据同步中间件(比如Nacos),并且可以的话最好实现数据双向同步。当然还有文件同步的方式,但是无法保证实时性和动态性,因此只是作为一种备份手段。

了解了规则双向同步的过程和原理,下面我们来实现Sentinel规则持久化到Nacos规则数据双向同步使用测试

准备工作

1. 版本选取

因为上面我们使用的是 Spring Cloud Alibaba 2021.0.1.0*Spring Cloud 2021.0.1 ,因此对应Sentinel版本为Sentinel 1.8.3,下载的使用需要注意版本。

2. 下载Sentinel源码

下载Sentinel对应客户端版本的 sentinel-dashboard 源码

源码地址如下,点击Tags选择版本为1.8.3,然后点击下载ZIP压缩包,下载地址如下:

https://github.com/alibaba/Sentinel/tree/1.8.3

3. 解压并导入项目

将压缩包解压,用IDE工具打开sentinel-dashboard项目,由于是将Sentinel控制台定义的规则持久化到Nacos,所以,只需要打开sentinel-dashboard项目即可:

然后将sentinel项目中的sentinel-dashboard子模块项目,导入到IDE中即可:

我们导入sentinel整个项目,因为会需要下载很多用不到的依赖,比较耽误时间。事实上,我们只需要导入我们需要改造的sentinel-dashboard子模块就可以了。

完成了前面的准备工作,下面我们可以正式开始改造源码了:

改造Sentinel控制台

为什么需要改造Sentinel控制台源码?

因为Sentinel源码本身只支持Nacos同步配置到Sentinel,并不支持Sentinel同步配置到Nacos(阿里的AHAS倒是提供这个功能了,所以说阿里的开源只开一半,还需要社区提供源码修改方案)。因此,我们需要改造Sentinel控制台以支持Sentinel推送规则到Nacos。

我们可以通过Sentinel扩展接口中的DynamicRuleProvider和DynamicRulePublisher接口来实现自己的拉取者(Provider)和推送者(Publisher)接口逻辑。

源码改造的过程

我们从Sentinel-Nacos规则双向同步的底层原理出发,从sentinel-dashboard源码一步步进行改造。这样在更换版本也不会出现不适配的情况,并且从底层代码一步步修改的方式比起直接用打包好的jar包的方式,即使出现了适配问题也能更好、更快的理解并分析出问题出现的原因,对于解决bug和修改任何版本的Sentinel源码都是有帮助的。

主要分为下面三大部分进行改造:

全局修改

  • 全局依赖修改
  • 全局配置修改

后端代码修改

  • 配置类修改
  • 创建规则交互层(拉取与推送实现类)
  • 规则控制层修改

前端代码修改

  • 前端页面调整
  • 前端接口调整

我们这里是Sentinel 1.8.3版本,基于理解原理和实践的原因,下面我们针对 sentinel-dashboard 源码进行手动改造。

1. 全局修改

① 修改POM依赖

想要将 dashboard 的规则持久化到Nacos,需要在sentinel-dashboard子项目的pom.xml中添加一个依赖(源码中已经添加,不过只在测试环境下打包),将作用域扩大:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <!--<scope>test</scope>-->
</dependency>

② 修改properties配置文件

在resources目录下,找到配置文件 application.properties 文件,在末尾添加一下配置:

# Nacos Configurations
sentinel.nacos.serverAddr=localhost:8848
sentinel.nacos.namespace=
sentinel.nacos.group-id=SENTINEL-GROUP

全部依赖和配置就改造完成了,下面进行后端代码和前端代码的改造。

以上就是Spring Cloud微服务架构Sentinel数据双向同步的详细内容,更多关于SpringCloud Sentinel数据双向同步的资料请关注Devmax其它相关文章!

Spring Cloud微服务架构Sentinel数据双向同步的更多相关文章

  1. SpringCloud超详细讲解微服务网关Zuul基础

    这篇文章主要介绍了SpringCloud Zuul微服务网关,负载均衡,熔断和限流,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. SpringCloud gateway+zookeeper实现网关路由的详细搭建

    这篇文章主要介绍了SpringCloud gateway+zookeeper实现网关路由,本文通过图文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. SpringCloud OpenFeign 服务调用传递 token的场景分析

    这篇文章主要介绍了SpringCloud OpenFeign 服务调用传递 token的场景分析,本篇文章简单介绍 OpenFeign 调用传递 header ,以及多线程环境下可能会出现的问题,其中涉及到 ThreadLocal 的相关知识,需要的朋友可以参考下

  4. Springcloud Stream消息驱动工具使用介绍

    SpringCloud Stream由一个中间件中立的核组成,应用通过SpringCloud Stream插入的input(相当于消费者consumer,它是从队列中接收消息的)和output(相当于生产者producer,它是发送消息到队列中的)通道与外界交流

  5. SpringCloud中Gateway的使用教程详解

    SpringCloud Gateway是Spring体系内的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。本文就来为大家详细讲讲Gateway的使用教程,需要的可以参考一下

  6. sentinel整合ribbon与fallback流程分步讲解

    这篇文章主要介绍了sentinel整合ribbon与fallback分步流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. SpringCloud 客户端Ribbon负载均衡的实现方法

    Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中,这篇文章主要介绍了SpringCloud 客户端Ribbon负载均衡的实现方法,需要的朋友可以参考下

  8. SpringCloud服务网关Gateway的使用教程详解

    SpringCloud Gateway是Spring体系内的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。本文就来为大家详细讲讲Gateway的使用教程,需要的可以参考一下

  9. SpringCloud 分布式微服务架构操作步骤

    SpringCloud是一种微服务的框架,利用它我们可以去做分布式服务开发,这篇文章主要介绍了SpringCloud 分布式微服务架构,需要的朋友可以参考下

  10. SpringCloud迈向云原生的步骤

    这篇文章主要介绍了SpringCloud怎么迈向云原生,通过本文我们来梳理一下Spring Cloud的前世今生,以及未来云原生发展的趋势,可以给这些RPC框架的演进带来一些启发,感兴趣的朋友跟随小编一起看看吧

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部