王者荣耀商城异地多活架构设计
设计思路:
1. 分析业务特点:虚拟物品商城,出现问题对游戏主要业务、成交量无显著影响。
2. 异地多活架构:
属于业务定制型异地多活架构。
按照业务分级、数据分类、数据同步、异常处理四个步骤完成异地多活架构图。
业务特点
王者荣耀商城有以下几个特点:
用户量大、商城交易为非频繁操作:
用户量大:2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
日常交易:相比登录、对战业务,即使出现问题,对业务的影响不会特别大。
活动促销:某个特定英雄或皮肤秒杀。
交易模式与商品特点:
先调用微信钱包或者 QQ 钱包充值点券,再用点券支付。
交易物品是虚拟物品,不涉及物流等环节。
货品交易规则:
部分虚拟物品只能买一个,不能重复购买,例如英雄和皮肤。
购买的物品不能跨区使用。
换区后商品需要重新购买。
支持商城购买后赠送。
业务定制型异地多活架构
设计步骤 1 - 业务分级
如下商城业务(不含注册登录)中,异地多活应该保证哪个或者哪几个核心业务?
点券充值、商品购买、赠礼、夺宝。
答案:点券充值、商品购买。
分析:点券购买是主要收入,业务重要性高。
分析:商品购买中,英雄与皮肤是重要的虚拟资产,业务重要性高。
分析:赠礼属于商城中带有社交属性的非核心功能。
分析:夺宝属于业务促销与活动,非核心功能。
设计步骤 2 - 数据分类
【点券充值】
用户 RoleID:全局唯一,不可变;
交易 ID:每次新建,区服唯一,不会修改;
交易数据:和交易 ID 绑定,只会新建不会修改,例如点券 ID、充值点券数量等。
点券余额:区服强一致性。
【商品购买】
用户 RoleID:全局唯一,不可变;
交易 ID:每次新建,区服唯一,不会修改;
交易数据:和交易 ID 绑定,只会新建不会修改,例如商品 ID、商品数量等。
不能重复购买商品:区服唯一,例如英雄和皮肤只能买 1 个。
可重复购买商品:可重复增加,例如鲜花、改名卡之类的道具。
设计步骤 3 - 数据同步
【点券充值】
交易 ID:区服唯一,采用数据库同步充值记录。
点券余额:区服强一致性,采用数据库点券余额,充值只能在归属地充值。
【商品购买】
交易 ID:区服唯一,采用数据库同步商品交易记录。
用户虚拟资产:
不能重复购买商品:区服唯一,很少变,采用数据库同步。
可重复购买商品:区服唯一,很少变,采用数据库同步。
设计步骤 4 - 异常处理
【点券充值】
点券充值服务挂掉怎么办?答:直接挂公告:充值功能维护,待恢复后进行充值。
充值过程中服务挂掉怎么办?答:维护异常订单,为玩家提供虚拟物品作为弥补损失。
充值结果未同步到异地机房,看不到怎么办?答:等恢复了再看。
【商品购买】
商品购买结果异常该怎么办?例如:
点券消耗之后,购买皮肤暂未到账;
点券购买道具后出现重复扣款;
优惠券使用异常,没有正常产生折扣;
点券消耗后,荣耀积分未到账;
魔法球系统奖励异常。
答:维护异常订单,为玩家提供虚拟物品作为弥补损失,例如奖励玩家们 5 个皮肤碎片以及 100 荣耀积分等(王者荣耀点券没了怎么回事?)。
商品购买数据未同步到异地机房,看不到怎么办?答:等恢复了再看。
王者荣耀商城异地多活架构示意图
设计中的思考:
【正常情况】
比如用户在北方充值,在北方机房商城服务器完成交易,交易后的结果存到 22 区主库,同步到南方机房 22 区备用存储。
【异常情况】
比如用户在北方充值,充值完成,北方机房停电,数据未同步到南方机房。异地多活切换到南方机房。
用户在商城中查询余额,发现充值成功点券未到账。
游戏发布公告,待服务修复后可查询之前的充值结果。
这时用户可继续在商城操作,例如用账户的点券余额购物。
异常恢复后,北方机房数据库同步 22 主库信息到 22 备用存储(此时需要同步交易信息,更新并同步余额)。
若异地多活未切换,用户在南方机房可查询到之前的充值记录。
若异地多活切换,用户回到北方机房,从 22 主库查到之前的结果。
版权声明: 本文为 InfoQ 作者【唐尤华】的原创文章。
原文链接:【http://xie.infoq.cn/article/841bda10ba29f8991a4b525c5】。文章转载请联系作者。
评论