王者荣耀商城 - 异地多活设计
背景
业务数据:2020 年 11 月,日活跃玩家 1 亿,注册完成 6 亿,最高同时在线 100W.
业务功能:完成通过微信支付,QQ 钱包支付充值点券,商城里的皮肤,英雄使用点券购买
业务约束:
登录后可购买
依赖微信支付,QQ 钱包,才能充值点券
每一个分区中只能购买商城里相同的英雄,皮肤只能购买一次,抽奖有 50 次限制,友好道具没有次数限制.
业务分级
商城是王者荣耀收入来源,一旦故障会影响收入,尤其是活动期间的冲动型消费较多,如果此时故障损失验证,还会对企业声誉有影响.故我们需要异地多活来保障商城系统的运营.
数据分类
商城涉及的数据有:游戏玩家 ID,游戏道具,点券余额,订单
数据量: 其中涉及到修改的数据只有点券和玩家道具仓库,按照日活 10%的玩家消费,每日 1000W 单,之前最高赵云 6 元皮肤销售额 2 亿,可估算日峰值 3000W 单.
一致性要求:玩家点券余额,皮肤,英雄,要求强一致性,仓库道具要求最终一致性
唯一性:订单 id,游戏玩家 id.
不可丢失:游戏玩家 ID,游戏道具,点券余额,订单
可恢复性:当发生故障时,可内部恢复.
数据同步
点券余额,皮肤,英雄:强一致性要求,我们可以采用两地三中心部署。
订单流水:采用数据库同步+消息队列同步。
鲜花,体验卡之类的道具:最终一致性,采用数据库同步+消息队列同步。
异常处理
点券余额,皮肤,英雄的购买采用 oCeanbase,即使故障也能做到 100%可用
鲜花,体验卡之类的道具发生故障是,数据没有同步过来时,时候补偿钻石~
评论