架构实战营模块七作业

/ 架构实战营 / 没有评论 / 134浏览

【背景】

假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。

【作业要求】

分析王者荣耀商城的业务特点,设计其异地多活架构;
按照模块 7 第 5 课的方法来设计异地多活架构。

【提示】

王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
用户买鲜花、改名卡之类的道具可以买多个;
分析步骤参考模块 7 第 6 课的案例。

业务背景

2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。

关键业务约束

用户登录后才能使用商城系统;
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
王者荣耀商城的物品主要包括碎片、英雄、皮肤、夺宝、礼物等虚拟物品,无需考虑库存和物流;
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
用户买鲜花、改名卡道具可以买多个。

业务分级

王者荣耀商城涉及核心业务:购买、充值

数据分类

RoleID:从第三方(QQ 和微信)登录或者具有全局唯一不变性;
商品信息:修改较少,全局数据
点券:与用户 RoleID 关联,全局强一致
支付信息:依赖 QQ 钱包和微信钱包
商品信息:根据不用商品分类有不同的购买限制

数据同步

1、RoleID 和区服对应关系只会新增,不会修改,数据库同步即可
2、点券 ID 在上一步中根据 RoleID 和区服 ID 通过算法自动生成,全局唯一,无需同步
3、点券余额需要保证分布式一致性,使用数据库同步
4、点券充值记录只会新增,不会修改,使用数据库同步
5、订单 ID 每次新建,不会修改,通过数据库同步
6、订单信息每次新建,不会修改,通过数据库同步,同时由于包含全局唯一的订单 ID,也可通过消息队列同步
7、商品 ID 每次新建,全局唯一,不会修改,通过数据库同步
8、商品信息存在修改,通过数据库同步

异常处理

【点券充值】点券数量不对,或者未到账,客户介入,事后给予点券补偿
【购买】购买后没有同步到异地机房,玩家看不到买的东西,客服介入,给予点券补偿。

异地多活架构图