写点什么

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

作者:Jack
  • 2022-12-06
    中国香港
  • 本文字数:1091 字

    阅读完需:约 4 分钟

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

一、业务背景


2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。主要业务板块如下:


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

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

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

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

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


关键业务约束:

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

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


假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计这个架构。


二、分析思路


1.异地多活的分析思路如下图:



1.1 业务分级


商城要保证用户正常的调用微信或者 QQ 支付充值,然后能够正常的使用点券购买皮肤角色等虚拟商品。所以充值、支付是主要的业务。


1.2 数据分类


1、RoleID:登录后就不会变了,只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。

2、依赖微信钱包或者 QQ 钱包充值点券,王者本身不需要记录点券充值明细(由微信钱包或 QQ 钱包记录),需要记录充值订单 ID,点券数量对应的区服信息,充值记录数据只允许新增。

3、用户在商城里面用点券支付,购买虚拟商品,有的商品(比如英雄、皮肤)限购 1 件,其余商品(比如其他道具)不限购,需要记录购买订单与对应区服信息、购买商品与对应区服信息。

4、虚拟物品没有库存,没有物流信息,支付成功即可获取虚拟物品。

5、点券支付订单 ID 全局唯一,每次新建,不会修改。

6、点券支付订单详情,和订单 ID 绑定,只会新建不会修改。


1.3 数据同步


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

2、微信钱包或 QQ 钱包充值点券订单 ID 和区服对应关系,只会新建不会修改,数据库同步即可。

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

4、所购商品与区服的对应关系,强一致性,数据库同步即可。

5、购买虚拟商品的订单 ID 和区服对应关系,只会新建不会修改,数据库同步即可。

6、点券支付订单 ID,全局唯一,每次新增,不会修改,用算法生成,数据库同步即可。

7、点券支付订单详情,和订单 ID 绑定,数据库同步即可


1.4 异常处理


1、充值过程中微信钱包和 QQ 钱包挂了怎么办?

直接挂公告:系统停服维护,等微信钱包和 QQ 钱包恢复后就可以正常充值了。

2、用户购买道具过程中系统挂掉怎么办?人工订正数据,达到最终一致性,礼包、优惠券等补偿。

3、用户在某个区服充值了点券,没同步到异地机房,购买不了商品怎么办?

等系统恢复就可以购买了

4、用户在商城购买的商品未及时同步至异地机房,用户无法使用商品怎么办?

等恢复后再处理

5、用户在商城的订单数据未及时同步至异地机房,用户看不到订单详情怎么办?

等恢复后再处理


2. 异地多活架构图



用户头像

Jack

关注

还未添加个人签名 2019-05-12 加入

还未添加个人简介

评论

发布
暂无评论
王者荣耀商城异地多活架构设计_架构实战训练营9期_Jack_InfoQ写作社区