写点什么

【架构设计模块七】:王者荣耀商城异地多活架构设计

用户头像
Ryoma
关注
发布于: 3 小时前

业务背景

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

  2. 【业务功能】

  3. 使用微信或者 QQ 账号登录游戏

  4. 对战:例如匹配、排位、巅峰赛

  5. 商城:购买英雄、皮肤、道具等

  6. 活动:领取各种奖励和道具

  7. 社区:各种攻略,视频等

  8. 【关键业务约束】

  9. 用户登录后才能使用商城系统

  10. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付,点券不允许透支

  11. 商城售卖均为虚拟物品,无需考虑库存和物流

  12. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买

  13. 用户买鲜花、改名卡之类的道具可以买多个

  14. 【重要背景】:假设现在决定要实现王者荣耀里面的商城的异地多活架构


设计步骤

业务分级

王者荣耀按重要性排序,最重要的前三个业务为登录、对战、商城,这里主要分析【商城】的异地多活方案


数据分类

  1. 【充值】

  2. RoleID:全局唯一,不可变

  3. 用户余额:全局一致性,采用数据库同步余额,充值只能在归属地充值

  4. 【购物】

  5. RoleID:全局唯一,不可变

  6. 订单信息:每次新建,全局唯一,不会修改

  7. 用户余额:全局一致性,采用数据库同步余额,充值只能在归属地充值

  8. 物品:

  9. 唯一性物品:全局一致性,

  10. 非唯一性物品:最终一致性,根据需要可以使用事务合并


数据同步

  1. 【充值】

  2. RoleID 和区服对应关系,只会新建不会修改,数据库同步即可

  3. 用户余额:全局强一致性,数据库同步

  4. 【购物】

  5. RoleID:同充值

  6. 订单信息:全局强一致性,数据库同步

  7. 用户余额:同充值

  8. 物品:

  9. 唯一性物品:全局一致性,数据库同步

  10. 非唯一性物品:最终一致性,数据库同步 + 消息队列同步


异常处理

  1. 【充值】

  2. 充值过程中系统故障了怎么办?可回滚这段期间的充值

  3. QQ 钱包或微信钱包挂了怎么办?直接挂公告暂停点券充值,待钱包系统恢复

  4. 【购物】

  5. 刚购买的物品未同步到异地机房,用户看不到物品怎么办?等恢复了再看

  6. 在系统挂时想购买唯一性物品怎么办?禁止购买


架构示意图


发布于: 3 小时前阅读数: 7
用户头像

Ryoma

关注

学如逆水行舟 2018.05.14 加入

一只菜菜的全沾工程师

评论

发布
暂无评论
【架构设计模块七】:王者荣耀商城异地多活架构设计