引言
云Redis数据库服务是目前广泛应用的模式,其数据持久化方案是现在研究的热点内容,数据持久化操作主要由参数设置自动触发或命令触发。RDB(Redis DataBase)持久化和AOF(Append Only File)持久化,这两种持久化方式可以单独使用,也可以同时使用,以提供更高的数据持久化安全性。但无论是RDB持久化还是AOF持久化,都会涉及到文件写入操作。
云数据库实例大多使用云盘存储模式,是指将数据存储在云服务提供商的服务器上,而不是存储在本地设备上。云盘存储可以通过网络远程随时访问,也具有更好的可扩展性,可以动态扩缩容。
因此,云Redis数据库普遍存在单一资源池内单集群或多集群上所有数据库实例均挂载同一云盘服务的场景。此时成百上千个数据库实例,如果通过传统参数设置自动触发或命令触发的方式管控实例的数据持久化,极易出现多数据库实例同时进行持久化的情形,瞬时产生大量写操作,远超云盘服务的性能基线,可能致使云盘服务夯住,从而诱发一系列数据库实例的报障告警。
一、背景介绍
针对这类共性问题,定时任务和持久化管控组件应运而生,通过定时任务的动态规划和数据持久化的管控分发,尽可能减少某一时刻持久化任务密集的情况,从而确保云盘服务的稳定性。
本文将从源码设计层面通过问答的形式分析移动云Redis产品定时任务与持久化管控组件的设计思路。整体流程图如下:

二、具体实现
1、多副本容灾功能
我们基于K8s的lease选主机制,通过pod自管实现定时任务和持久化管控的唯一性,仅主pod中运行业务流程,其余pod作为容灾备选项。
Pod自管是指,在某pod在获得lease租约时,会给自身添加一个特殊label,区别于其余的po

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



