海山数据库(He3DB)技术解析:海山Redis定时任务与持久化管控设计

news2024/9/24 5:28:42

文章目录

  • 引言
  • 一、背景介绍
  • 二、具体实现
    • 1、多副本容灾功能
    • 2、主备切换后任务断点续做功能
    • 3、持久化管控编排功能
  • 三、总结
  • 作者

引言

云Redis数据库服务是目前广泛应用的模式,其数据持久化方案是现在研究的热点内容,数据持久化操作主要由参数设置自动触发或命令触发。RDB(Redis DataBase)持久化和AOF(Append Only File)持久化,这两种持久化方式可以单独使用,也可以同时使用,以提供更高的数据持久化安全性。但无论是RDB持久化还是AOF持久化,都会涉及到文件写入操作。

云数据库实例大多使用云盘存储模式,是指将数据存储在云服务提供商的服务器上,而不是存储在本地设备上。云盘存储可以通过网络远程随时访问,也具有更好的可扩展性,可以动态扩缩容。

因此,云Redis数据库普遍存在单一资源池内单集群或多集群上所有数据库实例均挂载同一云盘服务的场景。此时成百上千个数据库实例,如果通过传统参数设置自动触发或命令触发的方式管控实例的数据持久化,极易出现多数据库实例同时进行持久化的情形,瞬时产生大量写操作,远超云盘服务的性能基线,可能致使云盘服务夯住,从而诱发一系列数据库实例的报障告警。

一、背景介绍

针对这类共性问题,定时任务和持久化管控组件应运而生,通过定时任务的动态规划和数据持久化的管控分发,尽可能减少某一时刻持久化任务密集的情况,从而确保云盘服务的稳定性。

本文将从源码设计层面通过问答的形式分析移动云Redis产品定时任务与持久化管控组件的设计思路。整体流程图如下:
在这里插入图片描述

二、具体实现

1、多副本容灾功能

我们基于K8s的lease选主机制,通过pod自管实现定时任务和持久化管控的唯一性,仅主pod中运行业务流程,其余pod作为容灾备选项。

Pod自管是指,在某pod在获得lease租约时,会给自身添加一个特殊label,区别于其余的pod,并且程序内部的全局选主标志位也会被置为true。该选主标志位用作程序内部决定是否开启定时任务与持久化管控功能的判断条件,确保该组件负责的业务流程仅在主pod内执行。而特殊label则是用于Service对外暴露服务,需在配置Service时,设置nodeSelector为主pod的特殊label,以此来实现新的定时任务请求均会由主pod处理。

在这里插入图片描述

在主pod无法续约lease,丢失了主的身份时,同样会通过自管模式,去除自身的特殊label,修改全局选主标志位为false,将内部正在执行的定时任务停止清空,留待新的主pod来继续处理。主备切换流程耗时较短,并不会出现定时任务丢失的情况。

在这里插入图片描述

2、主备切换后任务断点续做功能

首先我们的定时任务逻辑是根据24h,每一小时段设置了一个定时控制器,每个控制器负责处理某一个小时内的全部定时任务,其余时段的定时任务不受其管控。另设一个总定时任务控制器,负责管控24个小时制定时控制器,在当前小时40分时,开始初始化下一个小时段的定时控制器,将数据库表中记录的定时任务注册在其中。之所以如此设置这么多的定时控制器,而不是通过一个定时控制器管控所有的定时任务,是基于云Redis产品线上实例成百上千的现状,极易出现某一时间段设置的定时任务数较多,如果同时执行,会对后端组件和云盘服务造成巨大的压力。因此根据小时段划分任务,便于统计,在定时任务集中且频繁时,动态规划其在一定时间范围内完成,而不是并行处理。

然后基于特殊的定时任务管控逻辑,在pod成为主时,除了正常初始化总定时任务控制器外,需要初始化一个起始定时器,该定时器用以实现定时任务的断点续做。其实定时器会根据当前的时间,决定初始化注册哪个时段的定时任务,如果当前分钟小于40,仅注册当前小时段的定时任务;如果当前分钟大于等于40,则需要注册当前小时段和下个小时段的定时任务。这是由小时制定时控制器的特性决定的。

在这里插入图片描述

与上述定时任务断点续做逻辑不同,持久化管控任务的断点续做是依赖redis缓存来实现的。在初始化待做持久化实例列表时,会将这些实例ID以集合的形式存储在redis中,设置过期时间为一天,因为持久化管控任务是每天需要对全资源池所有实例分发持久化命令,做一次数据备份。获取到实例列表后,会对其轮询处理,给实例分发持久化命令,执行成功后,会将该实例的ID从redis缓存中去除。

基于此逻辑,在pod重启或主备切换后,首先会从redis缓存中查询特殊Key,如果存在该Key,说明持久化管控任务因异常中断过;如果没有该Key,则表示任务完成或未开始。

在这里插入图片描述

3、持久化管控编排功能

持久化管控功能设计初衷就是为了尽可能减少同资源池多实例同时数据持久化对云盘服务的性能影响。具体实现分为两步,首先需要修改线上redis实例的配置文件,将save参数置空,如此实例本身便不会自动触发数据持久化,仅由前端页面设置定时任务和持久化管控两种方式触发。然后便是设置定时任务,每天零点开始进行持久化管控任务,从数据库表中获取最新的活跃实例列表,然后将实例ID以数组形式存储。遍历数组,根据实例ID查询实例数据pod的IP和密码信息,连接实例的数据pod,查询内存使用量,根据内存的实际使用量来预估该实例完成一次数据持久化的所需时间,等待该实例完成持久化之后,再进行下一个实例的数据持久化。通过这种管控组件分发持久化命令的方法,来避免多实例同时持久化的场景,尽可能减少云盘服务的压力。

在这里插入图片描述

三、总结

定时任务与持久化管控组件基于K8s的选主机制,通过pod自管的方式实现了多副本容灾功能,并且确保定时任务和实例持久化在设定时间只会执行一次,有效避免多副本多次执行同一任务的情形,确保了云盘服务的稳定性,减少了云上数据库实例的告警报障。

作者

数据库产品部-非关系型数据库组-刘许

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI学习记录 - 激活函数的作用

试验,通过在线性公式加入激活函数,可以拟合复杂的情况(使用js实现) 结论:1、线性函数的叠加,无论叠加多少次,都是线性的 如下图 示例代码 线性代码,使用ykxb的方式,叠加10个函数…

AnimationCurve动画曲线 简单使用

资料 AnimationCurve AnimationCurve 表示一条曲线。可在曲线上添加关键帧,编辑曲线。 水平轴表示时间,竖直轴表示曲线的高度 获取曲线高度方法,AnimationCurve.Evaluate 示例 循环移动Cube,Cube沿着曲线移动 using UnityEngine; publ…

正则表达式与文本处理

目录 一、正则表达式 1、正则表达式定义 1.1正则表达式的概念及作用 1.2、正则表达式的工具 1.3、正则表达式的组成 2、基础正则表达式 3、扩展正则表达式 4、元字符操作 4.1、查找特定字符 4.2、利用中括号“[]”来查找集合字符 4.3、查找行首“^”与行尾字符“$”…

火山引擎边缘智能平台,让AI走进企业现场

如何让大模型更好地与生产进行融合,让AI生产力为企业降本增效,是每个企业都在关注的问题。但设备异构、隐私安全、传输延迟等困难,让大模型走进企业现场变得步履维艰。这种情况,就需要借助边缘智能来应对这些挑战。 什么是边缘智能…

二维数组前缀和

二维数组前缀和(Leetcode304) 想法(参考题解): 如上图,在矩阵中根据给定的方框围成的范围,确定范围内元素之和。题目:二维区域和检索 - 矩阵不可变。思路就是使用前缀和,前缀和表示的是面积&am…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中,如果你需要在集群或者远程操作没有root权限的机子,安装GDB(GNU调试器)可能会有些限制,因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…

微信小程序获取蓝牙并实现内容打印

通过微信小程序如何实现获取蓝牙打印机并实现打印能力&#xff0c;之前做过一个测试Dome&#xff0c;能够获取附近的蓝牙打印机设备并实现打印,今天开放出来供大家参考。 wxml <!--右下角搜索--> <view class"ly-cass-box"><view class"ly-cas…

【Python第三方库】PyQt5安装与应用

文章目录 引言安装PYQT5基于Pyqt5的简单桌面应用常用的方法与属性QtDesigner工具使用与集成窗口类型QWidget和QMainWindow区别 UI文件加载方式直接加载UI文件的方式显示窗口转化py文件进行显示窗口 PyQt5中常用的操作信号与槽的设置绑定页面跳转 引言 PyQt5是一个流行的Python…

Java——多线程(2/9):线程创建方式三Callable,Thread的常用方法(如何创建、代码实例、API及优缺点)

目录 方式三&#xff1a;实现Callable接口 前言 如何创建 代码实例 API及优缺点 Thread的常用方法 代码演示 方式三&#xff1a;实现Callable接口 前言 前两种线程创建方式都存在的一个问题 假如线程执行完毕后有一些数据需要返回&#xff0c;他们重写的run方法均不能…

算法与算法分析

目录 一.前言 二.算法的特性和要求 三.分析算法--时间效率 四. 分析算法--空间效率 一.前言 算法就是对特定问题求解方法和步骤的一种描述&#xff0c;它是指令的有限序列。其中&#xff0c;每个指令表示一个或多个操作。总而言之&#xff0c;我们数据结构就是通过算法实现操…

如何根据员工的反馈来确定六西格玛培训需求?

在六西格玛的推广与实施过程中&#xff0c;最大的挑战往往不在于技术本身&#xff0c;而在于如何让每一位员工都能理解、接受并积极参与其中。员工是企业最直接的执行者&#xff0c;他们的声音直接反映了项目落地的难易程度及潜在障碍。因此&#xff0c;倾听并有效整合员工反馈…

Python Django功能强大的扩展库之channels使用详解

概要 随着实时 web 应用程序的兴起,传统的同步 web 框架已经无法满足高并发和实时通信的需求。Django Channels 是 Django 的一个扩展,旨在将 Django 从一个同步 HTTP 框架转变为一个支持 WebSockets、HTTP2 和其他协议的异步框架。它不仅能够处理传统的 HTTP 请求,还可以处…

STM32串口(串口基础)

串口整个东西可以说但凡你要碰单片机&#xff0c;想做点上点档次的东西的话那你就包用它的。32的串口配置并不难&#xff0c;哪怕是比起51其实也难不到哪去。 目录 一.通信基础 1.通信方式 2.通信速率 二.串口基础 1.串口的数据帧结构&#xff08;协议&#xff09; 2.ST…

【轨物方案】开关柜在线监测物联网解决方案

随着物联网技术的发展&#xff0c;电力设备状态监测技术也得到了迅速发展。传统的电力成套开关柜设备状态监测方法主要采用人工巡检和定期维护的方式&#xff0c;这种方法不仅效率低下&#xff0c;而且难以保证设备的实时性和安全性。因此&#xff0c;基于物联网技术的成套开关…

JDBC标准实现

JDBC是什么 Java Database Connectivity&#xff1a;Java访问数据库的解 决方案 JDBC定义了一套标准接口&#xff0c;即访问数据库的通用API&#xff0c; 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c;让具体 的…

Nacos 2.x 新增 grpc 端口,Nginx 需要配置TCP端口转发的注意事项

Nacos 2.x 开始&#xff0c;最大的变化就是端口。在默认主端口 8848 之外又新增了三个端口&#xff0c;新增端口是在配置的主端口 server.port 的基础上&#xff0c;进行一定偏移量自动生成。 8848&#xff08;主端口&#xff0c;默认8848&#xff09;web页面端口及相关http接口…

医院等保解决方案有哪些?用哪些软件可以加强等级保护?

在医疗领域&#xff0c;信息系统的安全直接关系到患者的隐私保护、医院的正常运营乃至社会的稳定。医院信息系统面临着越来越多的安全挑战。 为了确保患者信息的安全与隐私保护&#xff0c;医院需要采取有效的等保&#xff08;等级保护&#xff09;措施。那么&#xff0c;医院…

数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。

您正在摆弄 Android 设备。突然&#xff0c;您意外删除了一张或多张图片。不用担心&#xff0c;您总能找到一款价格实惠的数据恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的数据。 Android 上数据被删除的主要原因 在…

以FastGPT为例提升Rag知识库应用中的检索召回命中率

提升Rag知识库应用中的检索召回命中率 在构建Rag&#xff08;Retrieval-Augmented Generation&#xff09;知识库应用时&#xff0c;检索召回知识片段的命中率是至关重要的。高效、准确的检索机制是确保AI系统能够精准响应用户查询的基础。当前&#xff0c;FastGPT主要采用三种…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显&#xff0c;HTTPS&#xff08;超文本传输安全协议&#xff09;已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本&#xff0c;通过SSL协议加密数据传输&#xff0c;不仅能保护用户数据的安全&#xff0c;还能提升搜索引擎排名&#xff…