【架构设计模块七】:王者荣耀商城异地多活架构设计
业务背景
- 【业务数据】:2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万 
- 【业务功能】: 
- 使用微信或者 QQ 账号登录游戏 
- 对战:例如匹配、排位、巅峰赛 
- 商城:购买英雄、皮肤、道具等 
- 活动:领取各种奖励和道具 
- 社区:各种攻略,视频等 
- 【关键业务约束】: 
- 用户登录后才能使用商城系统 
- 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付,点券不允许透支 
- 商城售卖均为虚拟物品,无需考虑库存和物流 
- 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买 
- 用户买鲜花、改名卡之类的道具可以买多个 
- 【重要背景】:假设现在决定要实现王者荣耀里面的商城的异地多活架构 
设计步骤
业务分级
王者荣耀按重要性排序,最重要的前三个业务为登录、对战、商城,这里主要分析【商城】的异地多活方案
数据分类
- 【充值】: 
- RoleID:全局唯一,不可变 
- 用户余额:全局一致性,采用数据库同步余额,充值只能在归属地充值 
- 【购物】: 
- RoleID:全局唯一,不可变 
- 订单信息:每次新建,全局唯一,不会修改 
- 用户余额:全局一致性,采用数据库同步余额,充值只能在归属地充值 
- 物品: 
- 唯一性物品:全局一致性, 
- 非唯一性物品:最终一致性,根据需要可以使用事务合并 
数据同步
- 【充值】: 
- RoleID 和区服对应关系,只会新建不会修改,数据库同步即可 
- 用户余额:全局强一致性,数据库同步 
- 【购物】: 
- RoleID:同充值 
- 订单信息:全局强一致性,数据库同步 
- 用户余额:同充值 
- 物品: 
- 唯一性物品:全局一致性,数据库同步 
- 非唯一性物品:最终一致性,数据库同步 + 消息队列同步 
异常处理
- 【充值】 
- 充值过程中系统故障了怎么办?可回滚这段期间的充值 
- QQ 钱包或微信钱包挂了怎么办?直接挂公告暂停点券充值,待钱包系统恢复 
- 【购物】: 
- 刚购买的物品未同步到异地机房,用户看不到物品怎么办?等恢复了再看 
- 在系统挂时想购买唯一性物品怎么办?禁止购买 
架构示意图
 
 版权声明: 本文为 InfoQ 作者【Ryoma】的原创文章。
原文链接:【http://xie.infoq.cn/article/d45512d48c99b205769646aa2】。文章转载请联系作者。












 
    
评论