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