架构实战营 - 模块 7- 作业
1.背景概述
设计王者荣耀商城异地多活架构。
回顾王者荣耀业务数据关键信息如下:
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
使用微信或者 QQ 账号登录游戏
对战:例如匹配、排位、巅峰赛
商城:购买英雄、皮肤、道具等
活动:领取各种奖励和道具
社区:各种攻略,视频等
【关键业务约束】
登录用户才能对战
用户属于不同的区服,同一微信 ID 可以加入多个区服(“大小号”)
不同区服用户可以一起对战
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买
用户买鲜花、改名卡之类的道具可以买多个
【与实物电商的区别】
没有库存和物流的概念及相关流程
2.架构分析
2.1 业务分级
参照课程分析,TOP3 核心业务为:登录、对战和商城。
登录和对战在课程上已分析完成,以下仅对商城业务进行分析。
2.2 数据分类
王者荣耀商城业务的核心数据分为以下几种:
RoleID:登录后就不会再发生改变。
虚拟货币余额:细分为点券、金币和钻石。虽然只有点券是通过支付渠道直接购买获取,但是金币和钻石是用户投入时间/参加限时活动获取的内虚拟货币、且在购买部分商品时可作为点券的替代品使用。因此,所有虚拟货币的重要程度并无明显差别,均需要满足强一致性、不可丢失的要求。在可恢复性方面,游戏虚拟货币与余额不同,可以通过运营手段进行恢复。
账号唯一商品:每个 RoleID 只可购买一件的商品,例如:英雄、皮肤。具备全局唯一性,一旦购买就不会再修改。
普通商品:可持有多个、可使用消耗的商品,例如:鲜花、改名卡。每个用户所持有普通商品的数量会经常发生变化。
订单:和 Role ID 绑定,只会新建不会修改。每个订单包含下单时的商品快照,其属性与订单数据一致,下文与订单数据一起分析。
2.3 数据同步
针对上述数据分类,分析数据同步方式如下表所示:
有关商品及余额的同步方式思路进一步补充说明:
如果需要支持异地可购买及使用商品,则需要引入事务合并的处理流程,实现复杂。
在确保登录及对战体验的前提下,异地支持充值、购买、使用商品对游戏体验影响较小(例如:使用铭文提升角色、改名等操作,都可以等归属地服务恢复了之后再开放),在归属地故障期间提供查询操作即可。
2.4 异常处理
针对商城业务可能出现的异常场景及处理方法分析如下:
归属地下单成功后服务器异常,数商品及余额数据还没有同步到异地机房
处理方法:异地登录时不可使用,待归属地服务器恢复
充值后服务器异常,余额信息还没有同步到异地机房
处理方法:待服务器恢复后处理。如果用户投诉执意要看到最新的余额数据,可以通过运营手段核实后临时修改余额并做好记录,待服务器恢复后进行核对并确保数据一致
3.架构设计
结合上述架构分析,拟定王者荣耀商城业务异地多活架构示意图如下:
设计要点如下:
除 RoleID 需要全量同步外,其余数据均按照区服进行同步
数据库同步为主备同步,即:每个机房包含自己所属区服的主库及其他归属地的备库
如果订单信息存放在单独的数据库中,也可以进行主主同步
评论