架构训练营第 10 期模块 7 作业
作业要求:
王者荣耀游戏商城的异地多活架构设计
业务背景:
根据华仔老师介绍, 王者荣耀游戏根据 2020 年 11 月数据, 全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
设计步骤一:业务分级
根据分析, 游戏商城的业务包括登录,浏览商品, 充值, 购买商品等等,因为登录之前老师已经分析过,这里就不包含了。
那么我认为核心业务应该为, 游戏点券充值,购买商品道具这两个。
这里补充一下,老师提到过游戏商城和淘宝商城有不同之处。分析认为主要不同为,游戏商城都是虚拟物品, 所有没有库存数量之说, 或者库存数量是无限的, 所以用户购买后也无需更新库存数量。
设计步骤二:数据分类
充值
1.用户 RoleID,全局唯一,不可变
2.余额,全局强一致性
3.充值订单:每次新建,全局唯一,不会修改
购买商品/道具
1.购买商品 ID(英雄/皮肤):强一致性, 不可重复
2.购买商品 ID(道具):最终一致性,可重复
3.购买购买订单:全局唯一,每次新建,不会修改
注意这里商品分为两种, 一种是只能购买一次的商品,还有是可以重复购买的商品。
设计步骤三:数据同步
充值
1.用户 RoleID,全局唯一,不可变, 采用数据库同步+消息队列同步
2.余额,全局强一致性, 数据库同步
3.充值订单:每次新建,全局唯一,不会修改, 用算法生成, 数据库同步+消息队列同步
购买商品/道具
1.购买商品 ID(英雄/皮肤):强一致性, 不可重复, 数据库同步
2.购买商品 ID(道具):最终一致性,可重复, , 数据库同步+消息队列同步
3.购买订单:全局唯一,每次新建,不会修改, 用算法生成, 数据库同步+消息队列同步
设计步骤四:异常处理
因为微信钱包服务不可用导致充值故障?
告知用户,需要等待微信钱包服务恢复正常
充值成功,无法在别的区服使用,或者购买道具成功,无法在别的区服使用?
需要用户等待一段时间后,余额或者道具就会同步成功。
用户重复购买英雄皮肤类商品?
系统可以自动识别退款。
用户因为系统未同步而重复购买的道具类商品?
用户可发起退货流程。
评论