王者荣耀商城异地多活架构设计
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
充值点券
消费(点券、金币、钻石、积分四种游戏货币);
购买英雄、皮肤,不可重复购买
购买道具,可重复购买
限时购买
赠送礼物
夺宝
【关键业务约束】
商城流通货币有金币、钻石、点券;皮肤和大部分道具只有点券可购买
点券通过充值获取,现金无法直接在商城支付
用户属于不同的区服,可创建多个区服角色,不同区服的商品不共享
商城商品为虚拟商品,无需物流,直接发放至用户账号
限时商品只允许在指定时间可以购买
限次礼包,在指定时间内只能购买最多限制次数
业务分级
异地多活应该保证哪个或者哪几个核心业务?
充值和消费
业务
购买英雄和皮肤,充值点券
相关问题
优先保障充值业务的成功,确保收入
数据分类
【充值】
1、依赖 QQ 钱包和微信支付功能,本身要做收单功能;
2、充值记录,只会新增不会修改,每条充值记录只有一个全局唯一的充值订单 RoleID;
3、充值积分奖励记录,类似充值记录,有一个订单 ID 相关的积分记录 RoleID;
4、用户充值成功之后添加账户点券余额,余额需要保障强一致
【消费】
1、新增订单:全局唯一,不接重复,算法生成
2、每次消费行为创建一条全局唯一的消费订单 RoleID;
3、消费方式有四种货币方式,对应的每个用户应该有四个虚拟货币账户,消费后扣除对应的虚拟货币;
数据同步
【充值】
用户 ID:数据库同步
点券余额: 全局一致性,采用数据库同步余额
充值订单 RoleID、积分记录 RoleID、消费订单 RoleID 都是只新增不修改,主主同步即可;
【消费】
用户 ID:数据库同步
订单 id:每次新建,全局唯一,不会修改,用算法生成,数据库同步
皮肤、英雄数据只有两种状态即有没有,适合用主从同步,数据修改量较小,加消息队列加快同步速度
异常处理
【充值】
充值成功,点券余额同步不及时
刷新重试
人工介入对账
2.qq 钱包、微信支付故障
直接挂公告,暂停充值
【消费】
1、优惠券没有抵扣成功
送用户一点补偿,优惠券或点券
2、限时商品购买异常
再次开放限时商品购买;
后台人工操作购买
3、购买英雄、皮肤,订单信息同步丢失
全局唯一 ID 做幂等
【王者荣耀异地多活架构示意图】
版权声明: 本文为 InfoQ 作者【张靖】的原创文章。
原文链接:【http://xie.infoq.cn/article/5ebe87f173fe20a86c613d1d3】。文章转载请联系作者。
评论