写点什么

模拟游戏商城多活架构

作者:艾瑾行
  • 2023-08-20
    山东
  • 本文字数:1259 字

    阅读完需:约 4 分钟

一、业务分析

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

在此背景下实现王者荣耀商城的异地多活架构。

关于商城做如下分析:

1.  登录用户才能进入商城购买

2.  王者商城经营的是虚拟物品,无需管理库存和物流信息

3.  充值方式:调用微信或 QQ 钱包充值点券,然后用点券购买商城中的物品

4.  同一个用户可以加入不同的区服,俗称“大号”、“小号”,商城购买约束绑定的是“登录 ID+区服 ID”,订单、已购商品信息、优惠券等绑定的也是“登录 ID+区服 ID”

5.  购买约束:同一个登录 ID,在同一个区服,同样的英雄和皮肤只能购买一次;鲜花、改名卡之类的物品可以多次购买

6.  订单 ID 全局唯一,只新建不修改;订单详情绑定订单 ID,只新建不修改

7.  商城商品 ID 全局唯一,商品信息如价格、折扣等可修改

二、  业务分级

商城业务主要包含:登录、商城展示、点券充值、点券管理、商品购买、订单管理、玩家已购商品管理。

异地多活应该保证的业务为:登录、点券管理、玩家已购商品管理。


三、  数据分类

1.  登录

依赖 QQ 和微信授权登录返回的 RoleID,本身无需登录信息,王者荣耀只需记录 RoleID 对应的区服信息,这里的区服数据只会新增不会修改,使用数据库同步即可

2.  点券管理

商品购买订单 ID,全局唯一,只新建不修改,数据库同步即可

3.  玩家已购商品管理

英雄、皮肤:每个区服同一账号只能买一次,只有新增,没有修改

其他道具:可多次购买,数量可修改

四、  数据同步

1.  RoleID 和区服对应关系,只会新建不会修改,数据库同步即可

2.  充值订单 ID 和区服对应关系,全局唯一,只会新建不会修改,数据库同步即可

3.  商品购买订单 ID 和区服对应关系,全局唯一,只会新建不会修改,数据库同步即可

4.  点券余额与区服的对应关系,强一致性,数据库同步即可。

5.  区服账号已购商品信息,强一致性,数据库同步即可

五、  多活设计



系统会存在这样的风险点:

本地机房故障时数据未同步,故障恢复前在切换后的机房又产生了充值或购买行为,导致本地机房恢复时数据不一致(点券不一致、商品不一致、英雄或皮肤重复购买等情况),为预防这种情况的产生,可按照下图实施数据同步机制



六、  异常处理

1.  微信和 QQ 怎么办?

商城登录依赖微信、QQ,如果它们有故障,商城端没有处理能力,只能在官网、社区等渠道发公告,说明原因。

2.  充值过程中,本地机房故障导致异常怎么办?

本次充值失败,重新发起充值即可切换到另外的机房正常充值了

3.  充值点券后,本地机房故障,数据未同步导致玩家看到点券数额不对怎么办?

发公告,尽量给一个玩家可接受的理由,并承诺恢复时间,恢复后可以给予一些额外点券作为补偿

4.  购买商品时,本地机房故障导致购买异常怎么办?

重新发起购买即可

5.  购买商品后,本地机房故障,数据未同步,导致玩家看到已购商品未到账怎么办?

和问题 3 一样,发公告,给补偿

6.  本地机房故障时数据未同步,故障恢复前在切换后的机房又产生了充值或购买行为,导致本地机房恢复时数据不一致(点券不一致、商品不一致、英雄或皮肤重复购买等情况),怎么办?

这一点需要在架构设计时就

用户头像

艾瑾行

关注

还未添加个人签名 2020-08-12 加入

还未添加个人简介

评论

发布
暂无评论
模拟游戏商城多活架构_架构训练营_艾瑾行_InfoQ写作社区