王者荣耀商城异地多活架构
题目
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
解答
一、 业务分级
核心业务:登录、对战、商城
二、 数据分类
1. 依赖 QQ 和微信账号授权登录,本身无需登录信息;
2. 微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID,王者荣耀只需要记录 RoleID 对应的区服信息, 区服数据只会新增不会修改。
3. 用户在商城里面用点券支付,购买虚拟商品,有的商品(比如英雄、皮肤)限购 1 件,其余商品(比如 其他道具)不限购,需要记录购买订单与对应区服信息、购买商品与对应区服信息。
4. 虚拟物品没有库存,没有物流信息,支付成功即可获取虚拟物品。
1. RoleID:登录后就不会改变;
2. 点券、订单 ID:每次新建,全局唯一,不会修改。
3. 点券数据:和订单 ID 绑定,只会新建不会修改。
三、 数据同步
1. RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
2. 微信钱包或 QQ 钱包充值点券订单 ID 和区服对应关系,只会新建不会修改,数据库同步即可。
3. 所购商品与区服的对应关系,强一致性,数据库同步即可。
4. 购买虚拟商品的订单 ID 和区服对应关系,只会新建不会修改,数据库同步即可。
5. 点券支付订单 ID,全局唯一,每次新增,不会修改,用算法生成,数据库同步即可。
6. 点券支付订单详情,和订单 ID 绑定,数据库同步即可。
四、异常处理
1. 充值过程中 QQ 或者微信挂了:
直接挂公告:系统停服维护,等微信和 QQ 恢复后就可以正常充值了。
2、用户购买道具过程中系统挂掉:
人工订正数据,达到最终一致性,礼包、优惠券等补偿。
3、用户在某个区服充值了点券,没同步到异地机房,购买不了商品:
等系统恢复就可以购买了。
4、用户在商城购买的商品未及时同步至异地机房,用户无法使用商品:
等恢复后再处理。
5、用户在商城的订单数据未及时同步至异地机房,用户看不到订单详情:
等恢复后再处理。
五、异地多活架构图
评论