王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
1. 使用微信或者 QQ 账号登录游戏;
2. 对战:例如匹配、排位、巅峰赛;
3. 商城:购买英雄、皮肤、道具等;
4. 活动:领取各种奖励和道具;
5. 社区:各种攻略,视频等。
【关键业务约束】
1. 登录用户才能对战;
2. 用户属于不同的区服,例如 Android 平台微信 22 区“刺客信条”,同一微信
ID 可以加入多个区服,俗称“大号”、“小号”;
3. 不同区服用户可以一起对战。
设计步骤
业务分级
Top3 为登录、对战、商城,作业要求为商城设计异地多活架构,所以这里直接选择和限定为商城。
数据分类
【充值】
RoleID:登录后就不会变了;
点券余额:和 RoleID 绑定,有修改。
【购买】
RoleID:登录后就不会变了;
购买数据:和 RoleID、商品 ID 绑定,只会新建不会修改。
数据同步
【充值】
RoleID:和区服对应关系,只会新建不会修改,数据库同步即可;
点券余额:和 RoleID 绑定,正常情况下采用数据库同步即可,异常情况下采用临时事务表配合消息队列做事务合并。
【购买】
RoleID:同充值;
购买数据:和 RoleID、商品 ID 绑定,不会修改,数据库同步即可。
异常处理
【充值】
充值渠道挂了怎么办?
换一个,如果都挂了,直接系统公告:充值渠道维护中。
充值过程中系统挂了怎么办?
未付款的作废,付完款的补单完成充值。
【购买】
本地机房挂掉,点券余额没有完全同步到异地机房,玩家登录到异地机房后无法购买,怎么办?
玩家充值后再购买,本地机房恢复后,点券余额会做合并。
同样的英雄和皮肤不能重复购买,玩家的英雄和皮肤数据未同步到异地机房,玩家重复购买了怎么办?
返还到点券余额。
评论