架构 -- 模块七 作业
题目:
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来(库存和物流?);
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
1、业务分级
除去已给出的游戏核心业务登录和对战外,需要对商城进行异地多活架构设计。
2、数据分类
RoleId:登录时微信或 QQ 返回给王者荣耀,全局唯一
充值交易 Id:用户发起点券充值时生成的,全局唯一
充值数据:与充值交易 Id 绑定,当 QQ 或微信返回支付成功时生成,只新增,不修改。
商品 ID:全局唯一,一旦生成商品则不再变化
商品数据:与商品 Id 绑定,商品详细描述,会修改。
商品、roleId、区服绑定关系数据:只新增不修改。
订单 Id:全局唯一,一旦生成不能变动
订单信息:购买虚拟商品的详细信息,只新增不修改。
点券余额: 与用户 RoleID 以及区服绑定,全局一致,变化频率高。
3、数据同步
RoleId、充值交易 ID、商品 ID,订单 ID 均为全局唯一数据且不会修改,数据库同步即可。充值交易 ID,订单 ID 等由于唯一性也可以选择消息队列的方式。
充值数据,订单信息,商品信息,依赖于对应的唯一 ID,由于只新增或变动很少,数据库同步即可。
点券余额,全局一致性,需要数据库同步。
点券余额与区服关系、商品与区服关系,可以视为同一类用户信息,数据库同步即可。
4、异常处理
充值:
支付工具(qq 钱包等)异常,导致无法充值?
发布公告提示暂停充值,等待支付工具正常后再充值。
充值时机房宕机,登录异地机房无法看到充值记录,余额不足无法购买商品?
等待机房恢复,如果在异地机房重复充值可以等待充值记录同步完成后恢复点券余额。
购买商品后没有同步到异地机房,用户重新登录后发现商品消失?
等待数据同步,且服务切换异地机房时限制用户购买商品。
架构示意图:
![](https://static001.geekbang.org/infoq/79/79cce053ef66fc884df11c5ea384f09a.png)
评论