写点什么

架构实战营 - 模块 7- 作业

发布于: 3 小时前

1.背景概述

设计王者荣耀商城异地多活架构。

回顾王者荣耀业务数据关键信息如下:

【业务数据】

2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。

【业务功能】

  1. 使用微信或者 QQ 账号登录游戏

  2. 对战:例如匹配、排位、巅峰赛

  3. 商城:购买英雄、皮肤、道具等

  4. 活动:领取各种奖励和道具

  5. 社区:各种攻略,视频等

【关键业务约束】

  1. 登录用户才能对战

  2. 用户属于不同的区服,同一微信 ID 可以加入多个区服(“大小号”)

  3. 不同区服用户可以一起对战

  4. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付

  5. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买

  6. 用户买鲜花、改名卡之类的道具可以买多个

【与实物电商的区别】

没有库存和物流的概念及相关流程

2.架构分析

2.1 业务分级

参照课程分析,TOP3 核心业务为:登录、对战和商城。

登录和对战在课程上已分析完成,以下仅对商城业务进行分析。

2.2 数据分类

王者荣耀商城业务的核心数据分为以下几种:

  1. RoleID:登录后就不会再发生改变。

  2. 虚拟货币余额:细分为点券、金币和钻石。虽然只有点券是通过支付渠道直接购买获取,但是金币和钻石是用户投入时间/参加限时活动获取的内虚拟货币、且在购买部分商品时可作为点券的替代品使用。因此,所有虚拟货币的重要程度并无明显差别,均需要满足强一致性、不可丢失的要求。在可恢复性方面,游戏虚拟货币与余额不同,可以通过运营手段进行恢复

  3. 账号唯一商品:每个 RoleID 只可购买一件的商品,例如:英雄、皮肤。具备全局唯一性,一旦购买就不会再修改。

  4. 普通商品:可持有多个、可使用消耗的商品,例如:鲜花、改名卡。每个用户所持有普通商品的数量会经常发生变化。

  5. 订单:和 Role ID 绑定,只会新建不会修改。每个订单包含下单时的商品快照,其属性与订单数据一致,下文与订单数据一起分析。

2.3 数据同步

针对上述数据分类,分析数据同步方式如下表所示:

有关商品及余额的同步方式思路进一步补充说明:

  1. 如果需要支持异地可购买及使用商品,则需要引入事务合并的处理流程,实现复杂。

  2. 在确保登录及对战体验的前提下,异地支持充值、购买、使用商品对游戏体验影响较小(例如:使用铭文提升角色、改名等操作,都可以等归属地服务恢复了之后再开放),在归属地故障期间提供查询操作即可。

2.4 异常处理

针对商城业务可能出现的异常场景及处理方法分析如下:

  1. 归属地下单成功后服务器异常,数商品及余额数据还没有同步到异地机房

处理方法:异地登录时不可使用,待归属地服务器恢复

  1. 充值后服务器异常,余额信息还没有同步到异地机房

处理方法:待服务器恢复后处理。如果用户投诉执意要看到最新的余额数据,可以通过运营手段核实后临时修改余额并做好记录,待服务器恢复后进行核对并确保数据一致

3.架构设计

结合上述架构分析,拟定王者荣耀商城业务异地多活架构示意图如下:

设计要点如下:

  1. 除 RoleID 需要全量同步外,其余数据均按照区服进行同步

  2. 数据库同步为主备同步,即:每个机房包含自己所属区服的主库及其他归属地的备库

  3. 如果订单信息存放在单独的数据库中,也可以进行主主同步

用户头像

还未添加个人签名 2017.12.17 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 模块 7- 作业