模块七:王者荣耀商城异地多活架构设计(作业)
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【商城业务功能】
购买英雄、皮肤、道具等。
【商城业务分析】
商城售卖的都是虚拟物品,没有物流,流程相对实体商城简单。虚拟物品如果丢失,损失并不严重。运营方可以通过补偿玩家,或者补发道具的方式解决。
商城内售卖的虚拟物品主要有两类:
限购一次:英雄,皮肤。如果发生重复购买,把后来购买的记录,按原路退回即可。
可多次购买:各种道具。如果数据发生异常,根据玩家的申述,审核后补偿响应道具即可。
商城购买使用的是虚拟货币。虚拟货币的来源有两类:
充值获得:通过腾讯的支付渠道充值点券获得。充值方式单一,没有其他充值渠道。如果腾讯的支付渠道异常,只能选择暂时关闭充值功能,没有其它选择。另外,充值使用的是真钱,异地多活的过程中,如果数据发生异常,处理流程比较复杂且审核过程漫长,不建议做异地多活。
任务获得:玩家通过游戏,游戏内的活动获得的不同类型的虚拟货币。虚拟货币容易获得,主要消耗的是玩家的时间。这种货币消费也频繁。就算数据异常,玩家可能都不会注意到货币值有问题。
商城购买的商品,只在当前游戏区有效,切换游戏区无法跨区使用道具,英雄,皮肤。
【业务分级】
商城的业务,可以划分为以下几个:
购买商品、充值点券
根据分析,异地多活应保证购买商品这一核心业务。
【数据分类与同步】
玩家 RoleID 登录后不会变,数据库同步即可。
玩家的英雄、皮肤购买后也不会变,数据库同步即可。
道具被购买后,数量会增加,使用后,会减少,道具的操作会有购买和使用日志,操作日志只会写入一次,不会更改。数据库同步使用日志即可保证最终数据一致性。
货币余额,玩家充值和消费都会有日志,消费日志只会写入一次,不会更改。数据库同步操作日志即可保证最终数据一致性。
【异常处理】
玩家在购买英雄、皮肤之后,系统挂了,但是数据还没同步到备份服。
玩家重新登录游戏,发现刚购买的英雄、皮肤不见了。客服可以安抚玩家,等到服务器恢复即可,也可以选择核实后补偿玩家或先发放商品。
如果玩家比较迷糊,发现商品不见了又重复购买。在服务器恢复的时候,通过数据检查和购买记录对账,将重复购买的商品退款即可。
玩家在购买道具后,系统挂了,但是数据还没同步到备份服
方式类似购买英雄、皮肤。可以先安抚玩家,等到服务器恢复,重新对账道具使用日志,增减道具即可。
玩家在充值中,系统挂了
可以根据充值记录,和腾讯那边的对账,人工补发货币,或者给玩家退款。
异地多活架构图
商城服的异地多活,需要使用的是数据库的互备。当某地机房故障,立刻将游戏切换到备份服,使用备份服的备份数据库启动商城即可。待故障解决,再将数据同步回本地,游戏可以停服维护,在停服期间,将备份服新产生的商城操作日志,和故障前的日志对账。对异常商品进行处理即可。
评论