关于游戏与一致性
最近在跟一些游戏客户交流,聊到了容易让人“踩坑”的数据一致性问题,常见BUG有“背包道具丢失”、“一个玩家同时加入两个公会”等等。这类问题往往藏得比较深,等到游戏上线后期才发现,会比较难解决。
其实,只要前期做好数据库选型和架构设计,一致性问题是可以避免的。本文将聚焦两大主要场景,对数据一致性问题进行详细剖析。
场景一:读写分离引起的数据不一致问题
01
读写分离引发的BUG
背包道具丢失(MySQL做主数据库场景)
BUG描述:玩家在游戏地图A购买道具,随后立刻切换地图,进入游戏地图B,结果打开背包竟发现道具丢失。 根因分析:前一个地图的购买行为写入主节点,而新地图中打开背包时查询了从节点。由于主从同步有延时,导致没查到最新数据。
关注好友后漏发Hi~(Redis做主数据库场景) BUG描述:在某个游戏地图中遇到美女玩家,关注对方后,本应自动发送预定义招呼语,对方却迟迟没有收到。 根因分析:好友链这种业务很适合用Redis做主数据库(提供灵活的hash/set/zset)。但是社区版Redis天然弱一致,原理同上,由于脏读发生,读写分离必踩坑。
02
如何解决

场景二:主从切换引起的数据不一致问题
请时刻注意,你使用的数据库,不论是MySQL还是Redis,他们都是高可用的。而高可用意味着,当主节点故障时,它们会发生主从切换。
01
主从切换引发的BUG
02
如何解决

总结
其实在很多业务场景,如果不希望出现脏读导致业务BUG,那么华为云的高斯Redis的确是最佳数据库选型。另外,高斯Redis自带了冷热数据交换能力,本身也是一个兼顾了性能与成本的降本方案,像是游戏公司常用的protobuf序列化数据,高斯Redis能实现500G到160G的数据压缩(案例数据),轻松节省70%存储空间。
高斯Redis既能为游戏业务保驾护航,又省心省力省钱,何乐而不为!
附录
本文作者: 华为云数据库GaussDB(for Redis)团队 杭州/西安/深圳简历投递: yuwenlong4@huawei.com 更多产品信息,欢迎访问官方博客:
bbs.huaweicloud.com/blogs/248875
【 新用户特惠 】
GaussDB(for Redis) 8GB 新用户首购1年1530元,
与RDS for MySQL组合下单享折上折(765元)
扫码下单



戳“阅读原文”,了解更多文章转载自GaussDB数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




