王者荣耀商城异地多活架构设计
王者荣耀业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
1. 使用微信或者 QQ 账号登录游戏;
2. 商城:商品管理、购买商品(英雄、皮肤、道具等)、充值、余额、已购买商品;
【关键业务约束】
1. 登录用户才能购买;
2. 用户属于不同的区服,例如 Android 平台微信 22 区“刺客信条”,同一微信 ID 可以加入多个区服,俗称“大号”、“小号”;
3. 有的商品同一区服只能购买一个,例如英雄、皮肤;
4. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
5. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买。
一、业务分级
如下业务中,异地多活应该保证哪个或者哪几个核心业务?
登录、商品管理、购买商品、充值(余额)、已购买商品。
【答案】登录、充值(余额)、购买商品。
【相关问题】
1.登录不了,购买不了商品怎么办?
2.充值不了怎么办,余额不正确怎么办?
二、数据分类
【登录】
1.依赖 QQ 和微信账号授权登录,本身无需登录信息;
2.微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
3.王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
【充值(余额)】
1.充值记录 ID 每次新增,全局唯一,算法生成,不可变;
2.用户余额 全局强一致性。
3.用户 ID 全局唯一 RoleID 不可以变。
【购买商品】
1.商品 ID:每次新增,全局唯一,算法生成,不可变;商品信息:每次新增,全局唯一,很少变;不用库存。
2.购买商品订单:订单每次新建,订单 ID 全局唯一,算法生成,订单中商品 ID,用户 ID 不会修改;
3.用户 ID 全局唯一 RoleID 不可以变。
4.用户余额 全局强一致性。
三、数据同步
【登录】
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
【充值(余额)】
1.充值记录 ID 每次新增,全局唯一,算法生成,不可变 数据库同步即可;
2.用户余额全局强一致性采用数据库同步余额充值只能充到当前归属区服;
3.用户 ID 全局唯一,RoleID 不可以变同登录。
【购买商品】
1.用户 ID 全局唯一 RoleID 不可以变同登录;
2.商品 ID:每次新建,全局唯一,不会修改,用算法生成,商品信息基本不会变 没库存 数据库同步即可;
3.用户余额:全局一致性,采用数据库同步余额,充值只能在归属区服充值;
4.购买商品 对于英雄和皮肤等只能购买一个的商品,订单 ID 全局唯一,不会修改,用算法生成, 采用数据库同步,商品对可以购买多次的商品每次新建,全局唯一,不会修改,用算法生成,订单信息包含有商品 ID 和用户 ID,数据库同步即可;
四、异常处理
【登录】
1. 微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护;
2. 玩家在某个区服开了小号,没同步到异地机房,玩不了怎么办?
等系统恢复就可以玩了。
【充值】
1.用户充值过程中系统挂掉怎么办?
重新发起充值。
【购买商品】
1.用户购买过程中系统挂掉怎么办?
用户重新购买即可。
2.用户购买数据未及时同步到异地机房,用户看不到购买商品怎么办?
等恢复了再看。
评论