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

文章目录

  • 引言
  • 一、背景介绍
  • 二、具体实现
    • 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://xiahunao.cn/news/3266931.html

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

相关文章

华为交换机Telnet配置

华为交换机Telnet配置 一、Telnet概述与作用 1、Telnet简介 Telnet(Telnet协议)是一种用于远程登录到计算机或网络设备的协议。它允许用户在本地计算机上通过网络连接到远程计算机或设备,并在远程计算机上执行命令和操作。Telnet协议最初是…

mysql特殊字符、生僻字存储设置

mysql utf-8模式下,分为ut8mb3,utf8mb4,mb4是支持特殊字符、emoji表情的,mb3是不支持的。 报错信息: 1### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\xA8\x92\x82\xE6\x95... fo…

什么是公司自建企业邮箱?自建企业邮箱有什么用?

什么是公司自建企业邮箱?公司自建企业邮箱有什么用途?一是品牌统一;二是安全性增强;三是定制化功能;四是控制与灵活性等等。哪些企业适合自建企业邮箱呢?本篇文章将为您一一解释。 一、什么是公司自建企业…

Photos框架 - 自定义媒体选择器(UI列表)

引言Photos框架 - 自定义媒体资源选择器(数据部分)-CSDN博客 关于自定义媒体选择器上一篇博客我们已经介绍了使用Photos获取媒体资源数据和处理媒体资源数据,有了数据,UI的实现就比较灵活了,我就以上面的设计样式为例…

前端养成记-实现一个低配版简单版本的vue3表单自定义设计组件

简介: 通过使用了最新的vue3,vite2,TypeScript等主流技术开发,并配合使用vuedraggable 插件以及antd design vue 组件库实现低配版本的自定义表单设计组件; 项目地址:https://gitee.com/hejunqing/vue3-antdv-generator

直指谷歌?OpenAI将推出在线搜索工具“SearchGPT”

KlipC报道:OpenAI 也在经过一段时间的沉寂后,重新开始了密集的新品发布。当地时间7月25日,OpenAI进军搜索市场,宣布正在测试新的AI搜索工具SearchGPT。目前只向一小部分用户开放,从中获取反馈意见。 华尔街分析师表示…

Cuppa CMS v1.0 任意文件读取漏洞(CVE-2022-25578)

前言 春秋云镜靶场是一个专注于网络安全培训和实战演练的平台,旨在通过模拟真实的网络环境和攻击场景,提升用户的网络安全防护能力和实战技能。这个平台主要提供以下功能和特点: 实战演练: 提供各种网络安全攻防演练场景&#…

深层互联重磅发布,潮流开放式一对多无线导游讲解器

佩戴讲解器走进博物馆,已经是很多人的假期日常,但让我们越来越习以为常的无线讲解器,也许没那么简单。日前,深层互联全新推出IndoorLink潮流开放式导游讲解器,可开展主副双讲及同声传译,将不简单推向了一个…

【vue3|第18期】Vue-Router路由的三种传参方式

日期:2024年7月17日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.408…

上传文件传参 pc端vue的formData

formData let formData new FormData(); formData.append("file", blob, ref ".png"); //添加参数并且重新命名文件名称 if(ref.toString().indexOf(qrcode) > 0) formData.append(noStbg, true)//添加参数 uploadType(formData, sour…

保障企业数据主权:安全可控的爬虫工具与管理平台

摘要 在数据驱动的时代,企业对数据的需求日益增长,但如何在保障数据主权的前提下高效采集数据?本文深入探讨了选择安全可控爬虫工具与管理平台的重要性,分析了关键特性,并提出实用建议,助力企业维护数据安…

2024新版 黑马程序员《C++零基础入门》笔记——第一章17 数据类型-布尔型

1.数据类型-布尔型 2.代码实践 #include "iostream" using namespace std;int main() {// 布尔:bool 字面量仅仅有2个:true或falsebool flag true; // true 表示是真,本质上是数字1bool flag2 false; // false 表示是…

NVIDIA Drivers、CUDA、Pytorch安装

NVIDIA Drivers、CUDA、Pytorch 这三者的版本有着十分紧密的关联,很容易因为版本不对而重复卸载、重装。 这里写个记录,方便查阅。 一、NVIDIA Drivers、CUDA NVIDIA Drivers、CUDA 的关系可以在这里看到: CUDA Compatibilityhttps://docs.n…

7.25 阿里云OSS上传 + 后台返回token + 导出excel

1.阿里云Oss上传 只需要一点就是上传到云端后,前端调用上传文件接口,返回一个资源路径。 接着在提交表单时,前端把这个路径设置为img的参数即可。 1.1上传限制 只上传图片 Api("阿里云文件管理") CrossOrigin //跨域 RestContr…

C语言进阶——一文带你深入了解“C语言关键字”(中篇)

本篇文章属于C语言进阶篇的“C语言关键字”,旨在分享我对C语言关键字的深度学习和了解。同时带领大家深入浅出的走进C语言进阶知识——关键字篇! 目录 一、变量的命名规则 二、标识符的命名规则 一、变量的命名规则 1、命名应当直观且可以拼读&#x…

【基础算法总结】优先级队列

优先级队列 1.最后一块石头的重量2.数据流中的第 K 大元素4.前K个高频单词4.数据流的中位数 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1…

汉兴能源研发费用率下降,“不差钱”募集资金近九成补流?

《港湾商业观察》施子夫 王璐 日前,冲刺创业板的上海汉兴能源科技股份有限公司(以下简称,汉兴能源)更新了招股书。 2023年6月末,汉兴能源正式递表创业板,保荐机构为长江证券。 从业务属性上来看&#x…

React间的组件通信

一、父传子&#xff08;props&#xff09; 步骤 父组件传递数据&#xff0c;子组件标签身上绑定属性子组件接收数据&#xff0c;props的参数 // 子组件 function Son(props) {return (<div>this is Son, {props.name}</div>) }// 父组件 function App() {const n…

数字看板:跨行业需求下的创新与升级

在当今这个数据驱动的时代&#xff0c;数字看板作为信息展示与决策支持的重要工具&#xff0c;正逐步渗透到各行各业之中。从智慧城市到智能制造&#xff0c;从金融分析到医疗健康&#xff0c;数字看板以其直观、动态、高效的特点&#xff0c;成为了连接数据与决策者的桥梁。本…

keil调试SH79F7416

仿真器JET51A, 调试设置 选择器件 再次点击调试就一切正常啦