Sentinel-持久化

2023-11-06

  • 直接使用dashboard和sentinel配置各种规则时,默认是存在了内存中。如果服务器重启那么数据就会丢失,从而Sentinel提供了5中持久化的方式,将各种配置数据进行持久化,若服务器重启就重新加载持久化的数据,防止数据丢失。

1、持久化原理

Sentinel 为我们提供了两个接口来实现规则的持久化,他们分别是:ReadableDataSource 和 WritableDataSource。其中主要关注ReadableDataSource。

public interface ReadableDataSource<S, T> {
	//将原始数据转换成我们所需的格式
    T loadConfig() throws Exception;
	//从数据源中读取原始的数据
    S readSource() throws Exception;
	//获取该种数据源的SentinelProperty对象,数据变化监听器
    SentinelProperty<T> getProperty();
}

Sentinel 还为我们提供了一个抽象类:AbstractDataSource,该抽象类中实现了两个方法,具体的数据源实现类只需要实现一个 readSource 方法即可。

public abstract class AbstractDataSource<S, T> implements ReadableDataSource<S, T> {
	// Converter接口负责转换数据
    protected final Converter<S, T> parser;
    //SentinelProperty接口负责触发PropertyListener的configUpdate方法的回调
    protected final SentinelProperty<T> property;

    public AbstractDataSource(Converter<S, T> parser) {
        if (parser == null) {
            throw new IllegalArgumentException("parser can't be null");
        }
        this.parser = parser;
        this.property = new DynamicSentinelProperty<T>();
    }

    @Override
    public T loadConfig() throws Exception {
        return loadConfig(readSource());
    }

    public T loadConfig(S conf) throws Exception {
        T value = parser.convert(conf);
        return value;
    }

    @Override
    public SentinelProperty<T> getProperty() {
        return property;
    }
}

实际上每个具体的DataSource主要要做三件事情:

  • 实现 readSource 方法将数据源中的原始数据转换成我们可以处理的数据S
  • 提供一个 Converter 来将数据S转换成最终的数据T
  • 将最终的数据T更新到具体的 RuleManager 中去。

以Redis做持久化数据源为例。

public RedisDataSource(RedisConnectionConfig connectionConfig, String ruleKey, String channel,
                           Converter<String, T> parser) {
    super(parser);
    this.redisClient = getRedisClient(connectionConfig);
    this.ruleKey = ruleKey;
    //从Redis中加载原数据
    loadInitialConfig();
}
private void loadInitialConfig() {
    try {
        //调用AbstractDatasource的方法,父类会调用readSource方法获得原数据
        T newValue = loadConfig();
       	//将加载的到的数据,通过监听器更新规则的数据
        getProperty().updateValue(newValue);
    } catch (Exception ex) {
        RecordLog.warn("[RedisDataSource] Error when loading initial config", ex);
    }
}

@Override
public String readSource() {
    RedisCommands<String, String> stringRedisCommands = redisClient.connect().sync();
    return stringRedisCommands.get(ruleKey);
}

image.png

2、持久化方式

目前 Sentinel 中默认实现了5种规则持久化的方式,分别是:file、redis、nacos、zk和apollo。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sentinel-持久化 的相关文章

随机推荐

  • Elasticsearch专栏-8.es读写性能及优化

    es读写性能及优化 写入性能 服务器资源 单机写入性能 写入性能优化 查询性能 资源占用情况 写入性能 服务器资源 资源 数值 服务器 华为 系统 centos7 9 cpu Intel Core i5 10500 CPU 3 10GHz
  • C#控制台应用程序生成10个随机数,并且保证他们不重复

    1 这个和上面那个代码不同 随机生成的10个随机数是会重复的 因为它不确定 所有我们在函数中加了一个判断函数 将重复的数去掉就可以了 using System using System Collections using System Co
  • UML建模与软件开发设计(四)——包图设计

    包图清晰地表达了包间关系 对于大型项目而言 良好的代码组织 对软件的可维护性至关重要 软件的架构设计 思路遵循由大到小 因此大型项目的结构往往从子系统 模块 包开始进行设计 与类图 Class Diagram 相比 包图 Package D
  • linux top命令查看内存及多核CPU的使用讲述

    查看多核CPU命令 mpstat P ALL 和 sar P ALL 说明 sar P ALL gt aaa txt 重定向输出内容到文件 aaa txt top命令 经常用来监控linux的系统状况 比如cpu 内存的使用 程序员基本都知
  • elasticsearch启动报错

    系统 操作centos7 虚拟机 bin elasticsearch 启动报错 es1 es1 software elasticsearch 6 3 1 bin elasticsearch Exception in thread main
  • 误差函数erf

    1 erf误差函数介绍 erf 是误差函数 它是高斯概率密度函数的积分 性质 2 erf误差函数在matlab中实现 erf函数在matlab里面可以直接作为内置函数使用 erf 0 与下面式子等价 syms s f f exp s 2 e
  • AcWing 3375. 成绩排序

    题目 题目链接3375 成绩排序 思路 思路要求稳定排序或者特判的快排 写法一 写两个sort中的比较函数的参数cmp 写法二 直接在结构体中进行比较 写法三 归并排序 代码1 include
  • Win11 Vmware 16 Pro 启动报错 ‘0xc000007b‘

    一段时间没有使用Vmware 打开突然报错 0xc000007b 可能是因为安装了其他软件导致C 库被改变 原因 C 库改变 解决方法 windows打开控制面板 然后打开程序 卸载程序 图中左下角 然后找到图中两个C 程序 分别右键 卸载
  • YoloV8改进策略:将FasterNet与YoloV8深度融合,打造更快更强的检测网络

    文章目录 数据集 官方模型的成绩 改进一 改进二 改进三 总结 数据集 本来想选COCO数据集 但是我觉得训练相同的epoch是一种不公平的对比 因为预训练本来就是COCO数据集上得来的 这样对官方的模型有利 而我改动了模型的结构 导致了没
  • 【重点突破】—— 百度地图在React单页面应用中的使用

    重点突破 百度地图在React单页面应用中的使用 前言 百度地图是网页中使用地图的常用第三方工具 这里结合React项目中学到的应用场景总结一些使用要点 一 在网页中嵌入百度地图 搜百度地图开放平台 注册百度开发者账号 控制台 查看应用 创
  • QT的使用(初期笔记)

    signal 发送的信号 signals 自定义信号 返回值是void 只需声明 不需实现 可以有参数 可以重载 按钮 1 inherited 继承 from QAbstractButton 1 clicked bool checked f
  • idea2021版本新建web项目(详细教程)

    打开idea右上角的文件 新建项目 选中java模块 下一步 取名 下一步 打开后是个空白 到这一步 右键选中untitled打开添加框架支持 选中web应用程序 一定要勾选创建web xml 然后点击确定 接下来 找到右上角的添加配置 点
  • matplotlib绘图横坐标或纵坐标文本显示不全

    import matplotlib pyplot as plt x 1 2 3 4 y 1 4 9 6 labels Frogs Hogs Bogs Slogs plt plot x y You can specify a rotation
  • unity使用Tcp/UDP协议网络通信实现(Socket简单应用)

    一 TCP协议 服务器端 1 打开vs 创建一个c 的控制台应用程序 代码如下 记得把ip换成自己电脑ip using System using System Collections Generic using System Linq us
  • INS/GNSS组合导航(七)角速度坐标系变换与欧拉角转换

    注意 角速度与角速度率有严格区别 反映在以下两点 正交的三个角速度 角速度矢量 与欧拉角速率之间的关系如下 欧拉角速率并不是纯粹的正交矢量 而是一个与旋转顺序相关而且非正交的三个矢量 积分欧拉角速率得到的是欧拉角的大小 又称卡丹角 积分角速
  • 股票预测_机器学习预测股票

    2 机器学习技术综述 集成多种人工智能系统的机器学习技术尝试通过对历史数据的学习提取数据模式 这一过程被称为训练或学习 其目的在于实现后续基于新数据的预测 Xiao Xiao Lu and Wang 2013 pp 99 100 使用机器学
  • 【Java】类和对象

    前言 面向对象编程的特性 封装 继承 多态 在Java中 最基本的封装单元是类 一个类的定义为具有相似特征对象的一种抽象 根据类的继承 父类只定义各子类所需的属性和方法 多态是类中同一名称的行为 可以有多种不同的功能 文章目录 前言 一 类
  • Mybatis Generator 配置详解

    许多人在Java项目中都会到使用Mybatis Generator这个工具包 这里把这个工具的配置完整列一下 gt
  • spss常态检验_利用SPSS检验数据是否符合正态分布

    利用SPSS检验数据是否符合正态分布 正态分布也叫常态分布 在我们后面说的很多东西都需要数据呈正态分布 下面的图就是正态分布曲线 中间隆起 对称向两边下降 下面我们来看一组数据 并检验 期初平均分 数据是否呈正态分布 此数据已在SPSS里输
  • Sentinel-持久化

    直接使用dashboard和sentinel配置各种规则时 默认是存在了内存中 如果服务器重启那么数据就会丢失 从而Sentinel提供了5中持久化的方式 将各种配置数据进行持久化 若服务器重启就重新加载持久化的数据 防止数据丢失 1 持久