【架构实战营】模块七作业
王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
(1)王者荣耀的商城是虚拟物品商城
(2)用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付
(3)用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买
(4)用户买鲜花、改名卡之类的道具可以买多个
1. 业务分级
王者荣耀商城涉及登录、充值、商品(英雄、皮肤、道具等)、交易等业务。
在异地多活架构设计中,需要优先保障的是登录、充值、交易。
2. 数据分类
RoleID:微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID。
商品 ID:唯一标识英雄、皮肤、道具等虚拟物品,全局唯一,不可修改。
点券信息:充值依赖 QQ 钱包、微信钱包支付,充值成功后,按对应平台的回调信息更新点券数值即可。
订单 ID:交易单号,全局唯一,不可修改。
订单数据:RoleID 与商品 ID 之间的交易关系。不能丢失,不能重复,最终一致性。RoleID 与英雄、皮肤的购买关系一一绑定,不可重复购买。RoleID 与道具之间的购买关系可以 1 对多条。
3. 数据同步
RoleID:只会新建不会修改,数据库同步即可。
商品 ID:只会新建不会修改,数据库同步即可。
点券信息:会更新,满足全局一致性,数据库同步即可。
订单 ID:每次新增,全局唯一,不可修改,数据库同步即可。
订单数据:和订单 ID 绑定,每次新增不会修改,数据库同步即可。
4. 异常处理
(1)微信和 QQ 挂了怎么办?
此时王者荣耀无法登陆,直接挂公告:系统停服维护。
(2)购买英雄、皮肤、道具失败怎么办?
重新发起购买交易
(3)用户的商城购买数据未及时同步到异地机房,用户看不到所购的道具怎么办?
等待数据同步完成后再查看
5. 王者荣耀商城异地多活架构示意图
评论