架构训练营模块七作业
作业要求
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
方案设计
王者荣耀商场属于典型的虚拟物品商店有如下特点,
没有库存信息
虚拟物品可以无限制售卖给用户,不存在库存的概念。王者商店中的英雄、皮肤、道具没有总量的限制,理论上可以卖给每一个玩家。
没有物流的概念
虚拟物品没有物流概念。针对任何的多发、漏发、错发情况只要改动数据库就能完成修改,几乎不会有大的损失。
业务分级
在异地多活架构中必须保证如下核心业务
登陆
充值点券
用点券购买物品
数据分类
1 登陆
依赖 QQ 和微信账号授权登录,本身无需登录信息
微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID
王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
2 充值点券
依赖平台(AppStore、微信钱包、QQ 钱包)进行具体金融操作,商城无需考虑这块的异地多活
充值 Order ID:全局唯一、不可重复、每次算法生成
点券余额:全局强一致性
3 用点券购买物品
点券购物 Order ID:全局唯一、不可重复、每次算法生成
英雄、皮肤等唯一性物品:全局唯一、不可重复购买;业务上只能新增、不会删除或者修改
鲜花、道具等非唯一性物品:全局不唯一、可以重复购买
数据同步
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可
充值 Order ID:每次新建,全局唯一,不会修改,用算法生成,数据库同步即可
点券余额:全局一致性,采用数据库同步余额,充值只能在归属地充值
点券购物 Order ID:每次新建,全局唯一,不会修改,用算法生成,数据库同步即可
英雄、皮肤等唯一性物品:全局唯一,不可变,采用数据库同步+消息队列同步
鲜花、道具等非唯一性物品:全局不唯一,数据库同步
异常处理
Q: 微信和 QQ 挂了,无法登陆怎么办?
A: 直接挂公告:系统停服维护。
Q: 平台出现故障,无法充值,怎么办?
A: 直接挂公告,请求用户稍后再试。
Q:用户在平台完成充值,但是点券余额没有更新?
A: 与平台批处理对账时,更新对应充值 OrderID 的结果。发信息给用户,24 小时内到账。
Q:用户用点券购买了物品,但是没有更新,怎么办?
A:等数据库同步完成。发信息给用户,24 小时内到账。可以适当补偿钻石、碎片等虚拟物品。
Q:用户重复购买了唯一性物品怎么办?
A:如果是同一个账号重复购买了唯一性物品,客服手动退回点券;如果是不同账号赠送同样的唯一性物品,转化为皮肤、英雄碎片,不支持退款。
Q:用户重复购买了非唯一性物品怎么办?
A:非唯一性物品本身支持重复购买,无需任何操作。
评论