架构实战营模块 7 课后作业
作业:王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
设计步骤 1 - 业务分级
这里我们主要是着重在商城的异地多活。
商城的功能主要是:购买英雄、皮肤、道具等
王者荣耀的商城是虚拟物品商城,和实物电商的差别是
1.没有库存 (没有卖完的概念)
2.自动发货,自动收货
商城相关的场景
充值点券
购买英雄、皮肤 (只能买一个)
购买其他道具(鲜花、改名卡之类)可以买多个
支付
设计步骤 2 - 数据分类
1.Role ID : 全局唯一,登录后就不会变了
2.点券余额 : 强一致性, 不可丢失,不可恢复
3.用户道具数量 :强一致性, 不可丢失,不可恢复
设计步骤 3 - 数据同步
1.Role ID:全局唯一,不可变,RoleID 和余额道具对应关系,只会新建不会修改,数据库同步即可。
2.点券余额:全局一致性,和 RoleID 绑定,采用数据库同步余额,充值只能在归属地充值;
3.用户道具数量 :全局一致性,和 RoleID 绑定,每一个区服同步,采用数据库同步;这个部分可以重用“区服服务器”的异地多活设计
设计步骤 4 - 异常处理
1.微信和 QQ 挂了怎么办?
直接挂公告:不允许充值。
2.用户充值了点券,但是余额显示不对,买不了道具
使用事务合并技巧,只要用户充值到超过想消费的数目,则继续处理用户的请求。
3.用户的点卷余额/道具数目不对
人工修复,实在不行,就给点卷/道具补偿
4.用户购买不了道具
等系统恢复再购买
评论