王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
一、业务特点
核心业务:登录,充值,购买(英雄、皮肤)
需要保证:充值一定要到账,购买一个皮肤后应立即可以查询到。
二、登录
1、通过微信、QQ 登录,登录成功后,生成全局的 RoleID,后续所有操作都是基于这个 roleID 操作。
2、王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
三、商城购买
1、RoleID:登录后就不会变了;
2、购买商品 : 商品和唯一的 RoleId 绑定,购买记录只会新增不会修改
3、虚拟商品和实体商品两个主要区别是:虚拟商品没有物流和实际库存的概念
4、用户点券的记录存在 mysql 数据,通过数据复制同步两个机房的数据
5、因为没有库存概念及物流,可以超卖,及购买后直接受到货。
四、商城充值
1、充值点券也和唯一的 RoleId 绑定,充值记录只会新增不会修改
五、数据同步
1、登录信息利用数据库加消息队列同步
2、订单信息,订单 ID 全局唯一,数据库加消息队列同步
3、充值点券账户,需要强一致性,数据库同步
4、商品库存,可以允许超卖,每个机房可以放置不同库存,无需同步
六、异常处理
1、用户购买商品过程中,商城挂了怎么办?
做好分布式事务,保持最终一致性,点券退回用户或者商品最终补偿用户,道具补偿用户
2、 微信和 QQ 挂了怎么办?
给予系统停服维护的公告。
3、商城充值过程中,商城挂了怎么办?
钱退回用户,提示暂未充值成功,道具补偿用户
评论