模块七作业
【作业题目】
作业:王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
(本次作业总耗时:40 min)
思路分析
根据异地多活设计流程(业务分级、数据分类、数据同步、异常处理),此处业务分级已确定,即对商城做异地多活,接下来依次进行后续三个步骤
数据分类
对商城中的多个业务场景,依次分析各业务的数据情况
【充值】
点券:强一致
【查看商城】
已拥有物品:只新增不更新,强一致,全局唯一
商品全集:极少更新,很少新增,数据量不大,一致性弱,全局唯一,可恢复
两者之差即为可购买商品
【购买物品】
消费记录:最终一致,全局唯一
点券:强一致
【查看已买物品】
RoleID:全局唯一,不可变
已拥有物品:只新增不更新,强一致,全局唯一
数据同步
点券:数据库主从同步,充值、消费只能在归属地
已拥有物品:数据库主从同步,新增只能在归属地
商品全集:主主同步
消费记录:唯一标识用算法生成,使用数据库同步 + MQ 同步
RoleID:数据库同步 + MQ 同步
异常处理
1、在一个机房新增商品后宕机了,另一个机房查不到或者查到的数据不是新的
无所谓,用户也不知道有更新。此时用户用旧价格买了商品,少花了或者多花了点卷都可以
如果用户觉得多花了不乐意,可以通过核对消费记录进行修复,给用户退多余的点卷
2、刚用点券在一个机房买了皮肤,机房宕机了,另一个机房查不到新皮肤
无所谓,告诉用户发货有延迟,等一等即可
3、刚消费了一波,机房宕机导致查不到刚才的消费记录了
无所谓,等机房恢复了就能看到了
王者荣耀商城和电商商城的两大区别:
虚拟商城的物品都是虚拟的,多发或者白送都没有直接经济损失,只是数据的修改而已;而电商商城一定不能超卖,一旦卖多了,取消发货会影响用户体验,继续发货则会亏钱,都不合适;
电商的物品有订单,订单中包含该订单的商品信息,没办法看所有买过的商品;虚拟商城中订单比较简单,购买后的全部商品直接能看到
虚拟商城有点券的概念,电商没有点卷,直接用钱结账
版权声明: 本文为 InfoQ 作者【Ryan】的原创文章。
原文链接:【http://xie.infoq.cn/article/dba221ad1a48eadf9f9fe1022】。文章转载请联系作者。
评论