本文分享自华为云社区《GeminiDB PITR,让游戏回档“进退自如”!》,作者:GaussDB 数据库。
在实际业务场景中,客户数据库难免会出现数据损毁、数据丢失、数据误删除等故障场景。为保障业务的正常运行,通常需要将数据库恢复到故障发生前的某一个正常时刻。传统数据库采取周期性备份策略,即在系统故障时对数据进行恢复。因其数据恢复耗时较长,可恢复时间颗粒度较大,导致客户业务受损严重。
PITR(Point-in-Time Recovery),是指数据库的“时间点恢复”功能。它是一种数据库恢复技术,通常用于恢复误删除的数据或者误操作导致损坏的数据,将其恢复到一个指定时间点的数据状态。
以游戏场景为例,在游戏运行期间,有玩家利用游戏漏洞非法复制装备、货币,使游戏公平性遭到破坏。传统数据库备份频率一般是一天全备一次,备份间隔即一整天,不仅恢复时间长、时间粒度大,甚至无法恢复到想要时间点等。而GeminiDB Redis接口新增的PITR特性能够让游戏数据快速回档,可根据客户自定的备份粒度,最低支持5分钟粒度,自行选择需要恢复的时间点,实现数据的快速恢复。
GeminiDB Redis接口的PITR功能不涉及数据的拷贝,备份任务业务无感知,不影响数据访问,让客户业务更加稳健。
GeminiDB Redis接口快照原理是通过记录文件系统的状态来实现的,而不是通过复制文件本身来实现的,是瞬时生成的;快照存储当前时刻的底层数据的元数据信息,比如数据块信息、寻址信息等,形成快照。因此,当打高速数据快照时,业务可以继续运行,而不会受到任何影响。
在实际测试中,基于客户业务6w的并发数据量对数据库进行访问,开启GeminiDB Redis接口PITR功能,以最小粒度5分钟执行一次快照。
下面是4个时间点每隔5分钟执行一次快照结果(以下为UTC时间,监控时间+8):
观察可知,QPS,CPU,内存,P99时延均无波动,对客户业务无影响。
PITR数据快照文件可以在本地保存,不用上传到冷存储介质,因此,不涉及数据的拷贝搬迁,还可支持随时数据恢复。
PITR恢复,数据恢复时长与数据大小无关,能快速恢复数百GB数据,通常可在5分钟以内恢复数据,保证客户业务可靠性。除此以外,PITR还可多次前后恢复,恢复到指定时间点后,既可向前,也可向后,让客户使用更省心。
我们分别测试了8U3节点实例,数据100GB和200GB的回档速度。
开源Redis使用多进程写时复制机制来实现快照的持久化。在持久化过程中,调用fork()产生一个子进程,fork()会阻塞Redis长达数百毫秒,对业务产生抖动;fork()的写时复制技术(COW)会造成内存过度使用。如果fork()期间产生大量的写操作,会导致内存严重浪费甚至OOM,通常内存利用率不足50%。而GeminiDB Redis接口的PITR特性不涉及数据的拷贝搬迁,因此,对业务基本无影响,且具有快照速度快,数据稳定,安全等特点。
在控制台,实例详情页->备份恢复->设置恢复到指定时间点策略,即可打开。备份时间间隔最低支持5分钟,最高支持120分钟,保留天数最大支持7天。
实例详情页->备份恢复->恢复到指定时间点,便可本实例快速恢复到指定时间点。
GeminiDB PITR执行数据快照业务无感,通常可在5分钟以内恢复到指定时间点,尤其是在业务异常场景可快速回退,降低损失,有效解决传统备份方案时间长、恢复粒度大等痛点问题。因此,GeminiDB在游戏、金融等行业有着广泛应用。
未来,GeminiDB Redis接口会进一步支持并完善数据恢复至某个秒级的时间点功能。也将持续致力于开发更多好用的企业级特性,帮助客户轻松运维,高效开发。我们期待与全球的企业和开发者合作,共同探索数据的未来,推动技术和业务的发展。