项目背景
游戏开发框架通常基于 Redis 协议,因为 Redis 是缓存型数据库,能够快速处理读取和写入请求,并且拥有丰富的数据类型,非常适合游戏业务场景。在这样的背景下,某竞技游戏最初经过性能、易用性等多个方面的考虑而选择了Redis 数据库。Redis 数据库的优势在于它能够存储和处理各种复杂数据类型,例如:积分排行榜、道具信息、社交元素、活动信息等。
在2019年之前,游戏用户数量处于一个相对较小的范围内,其数据规模也并不大,Redis 高效支撑了该游戏的快速上线,有效保障了业务正常运营。这种技术的选择不仅为游戏业务提供了一个高效的解决方案,同时也为整个游戏行业提供了一个优秀的范例。
然而,随着游戏用户数量持续增长,特别是2022年3月,数据规模一度高达2.5TB左右,Redis 的纯内存成本日益剧增。同时业务需要数据回滚时,只能基于每小时的全量备份进行回档,无法指定任意时间点快速恢复数据,给运维带来了极大的困扰。
方案分析
业务诉求
为了更好地解决游戏业务所面临的问题,腾讯云工程师从源头出发,梳理游戏数据存储的特点,分析数据背后的发展趋势与规律,识别业务当前及以后发展可能所会面临的主要问题与困扰。
成本升高、规模受限
随着游戏技术的不断发展和创新,业务量不断上涨,游戏数据规模也在不断增加。例如,游戏内容越来越丰富,将包含更多的角色、物品、任务等;社交元素需要存储更多的好友关系、聊天记录等信息;活动信息需要存储大量的参与者、奖励等信息。Redis 所需存储的玩家数据量只会越来越多,数据规模超过 TB 级,存储成本越来越高。
Redis 的内存存储容量有限,如果游戏的玩家数据持续上涨,可能会导致 Redis 无法存储全部数据,存储规模和数据完整性受限。
性能影响
玩家的每一次操作都会产生大量的数据,例如角色的移动、攻击、使用物品等,积分排行榜需要实时更新玩家的得分,道具信息需要实时更新玩家的持有数量等,这些数据需要及时更新到游戏服务器上,以保证游戏的实时性和稳定性。如果游戏数据更新不及时,就会导致游戏出现延迟、卡顿等问题,影响玩家的游戏体验。随着业务的上涨,数据的读写操作将会更加频繁和复杂,对数据库吞吐、延迟要求更高,一直找不到合适的磁盘存储方案。
无精细化备份恢复方案
数据丢失:如果数据回滚时只能基于每小时的全量备份进行回档,而无法指定任意时间点进行恢复,那么在两个备份之间发生的数据修改将会丢失。这对于对数据实时性要求较高的业务来说,可能会造成较大的损失。
恢复时间长:由于无法指定任意时间点进行恢复,如果需要恢复到某个特定的时间点,就需要先找到最近的全量备份,然后再逐个应用增量备份,直到达到目标时间点。这个过程可能会非常耗时,导致系统长时间不可用。
KeeWiDB 存储
最终,经过多项调研,为保证数据库能够保持高效、稳定运行,该竞技游戏选择了腾讯云 KeeWiDB 。 KeeWiDB 针对 KV 存储场景定制的 Hash 存储引擎,可提供极致的性能体验,在腾讯内部多种复杂场景已得到充分验证。同时,KeeWiDB 兼容 Redis 协议,业务无需改造。
存储成本
KeeWiDB 在磁盘存储方案的基础上提供了写入的高速持久化、热数据的极致读性能,以获取最优性能和成本效益。针对游戏场景,可将在线活跃的玩家数据进行缓存,未登录的玩家数据落至磁盘,玩家上线后数据自动缓存、升热降冷。这种设计在保证热数据高性能的同时,将冷数据存储在低成本的磁盘,大幅降低存储成本。
备份恢复
KeeWIDB 提供了更细粒度的数据备份恢复方案。热备系统定期从实例从节点生成全量备份与增量 Binlog 文件,存储于对象存储中。当需进行数据恢复时,在控制台发起任务,热备系统将根据选择的回档时间点选择一条最接近该时间的全量备份写入实例,并且全量数据完成之后,获取增量 Binlog 文件,解析出新增的数据写入实例。整个备份数据恢复方案实现了任意时间点的快速恢复能力,可彻底解决数据恢复的业务诉求。
数据迁移 + 回滚方案
腾讯云 KeeWiDB 借助数据传输服务 DTS,无需手动迁移数据库,仅需在控制台可视化简单配置源端与目标端信息,便可多链路写入并发,将源端 Redis 实例的全量数据,及其在迁移过程中产生的增量数据,高速写入至 KeeWiDB 中。同时,DTS 支持进行数据一致性校验,整个迁移过程透明、安全、快速,为业务平滑上云奠定了良好的基础。为进一步降低数据迁移的风险,该竞技游戏采用了双写方案,即通过 DTS 写入腾讯云 KeeWiDB 之后,再基于回滚方案写入至 Redis 新实例中,双向保障数据的兼容性、完整性、一致性。
客户价值
该游戏接入 KeeWiDB 之后, 在性能满足业务诉求的情况下, 带来了成本、可靠性的明显改善。
对比项 | 腾讯云数据库 KeeWiDB | 数据库 Redis |
成本 | 热数据使用768GB的持久内存,全量存储在磁盘 | 全量存储使用了2.5TB的内存资源 |
备份回档 | 支持任意时间点回溯 | 基于每小时的全量备份恢复 |
实时持久化 | 支持 | 不支持 |
项目总结
腾讯云 KeeWiDB 通过自身存储优势,实现了游戏数据的高效、低成本存储,在保证业务读写性能、并发处理能力的同时,降低了存储成本。并且,KeeWiDB 细粒度的备份恢复方案,全量备份、增量备份、时间点回档,很好地弥补了 Redis 在这方面的劣势。 针对游戏数据,KeeWiDB 突出了自身独特优势,助力游戏开发、运维提高业务的实时性和稳定性。