王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
商城:充值、商品浏览、下单、支付
【业务约束】
1. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
2. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
3. 用户买鲜花、改名卡之类的道具可以买多个;
商品由王者荣耀管理员维护更新。
设计
【数据分类】
充值余额增加:全局强一致性
商品查看:数据可变量可增删,保证最终一致性。
订单数据:生成后不变,保证最终一致性。
支付余额减少:全部强一致性
【数据同步】
充值余额增加:使用数据库同步。充值只能在归属地充值。
商品查看:使用管理员专属服务器更新商品数据,采用数据库+消息队列同步数据。
订单数据:生成后,采用数据库+消息队列同步数据。
支付余额减少:使用数据库同步。只能在归属地。
【异常处理】
如果管理员更新产品后,数据还未同步到其他机房怎么办?
可以接受新上架的产品用户看不到,对业务不影响。可接受延迟。
如果在异地看不到订单怎么办?
可以接受订单的延迟更新。
购买商品后,余额未及时同步其他机房,在异地机房登陆后,发现余额比实际的要多?
余额在数据库数据同步后,会更新。由于用于无法在非归属地购买,多出的余额无法使用。不会造成损失。购买商品的订单和余额的扣减可以同步更新,余额未更新,也无法看到购买的商品;余额更新后看到订单和购买的商品。
评论