模块七作业
王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来; 2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
一、业务分级:
1、分析:王者荣耀商城是虚拟物品商城,和实物电商的2个最大区别是:
① 没有物流环节
② 商品无库存概念
所以这两个业务不用考虑;
2、核心业务场景按优先级排序如下:
① 商品列表/搜索商品
② 购买商品
③ 点券充值
④ 获取余额
⑤ 订单记录和消费记录
3、具体分析:
商城的核心功能是购买商品:①和② 是购买商品的必须环节,③ 是依赖三方实现的,已经高可用;④也很重要但不是必须的;⑤ 的优先级相对低。
只需要考虑①和②的高可用。
二、数据分类
1、【商品列表/搜索商品】:
商品 ID :全局唯一,不可变 ,全局唯一,不可变
商品信息:新增多,修改和删除少
关键词:可重复生成,可丢失
搜索记录:可丢失
浏览记录:可丢失
2、【购买商品】
商品 ID :全局唯一,不可变 ,全局唯一,不可变;
用户余额:全局强一致性
订单ID:全局唯一,不可重复,每次新增 ,不同步
已购数量:可修改
三、数据同步
【购买商品】
商品 ID :全局唯一,不可变 ,全局唯一,不可变,采用数据库同步 + 消息队列同步;
用户余额:全局强一致性,采用数据库同步余额;
订单ID:全局唯一,不可重复,每次新增 ,不同步,每次创建的时候用算法生成。
已购商品及数量:可修改,最终一致性即可,不同库之间用数据库同步,并用消息队列同步给区服;
2、【商品列表/搜索商品】:
商品 ID :同上
商品信息:最终一致即可,新增多,修改和删除少,数据库同步
四、异常处理
1、商品上架故障,导致两个数据服务器不一致,晚一会发现新商品问题不大,可以忽略;等正常后同步即可,影响不大;
2、点券余额获取不到,可以允许透支,用户多买的虚拟物品不会收到实物,等恢复正常同步后扣除即可;
3、订单同步失败,如果是道具,用户可以再买,等服务器正常后合并数量;如果是皮肤或英雄,没数据时也支持再买,等服务器正常可以合并经验值,并在合并时补回用户消费的点券;
4、已购数量读取失败,可以支持像订单失败一样支持再买;如果少量用户投诉的话,可以客服人工触发消息同步或手动同步数据;