王者荣耀异地多活架构设计
0 - 业务背景
业务数据:2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
商城业务分析:
1、商城的商品主要包括:英雄,皮肤,道具等,这些都是虚拟商品,没有物流和库存。
2、用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3、用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4、用户买鲜花、改名卡之类的道具可以买多个;
业务功能:登录钱包,充值,购买,
关键业务约束:
1、登录用户才能进入商城,充值和购买商品;
2、用户属于不同的区服,例如 Android 平台微信 22 区“刺客信条”,同一微信 ID 可以加入多个区服,俗称“大号”、“小号”;
3、不同的区服购买的商品,只能在对应的区服内使用
4、用户需要充值点券,才能用点券支付
1 - 业务分级
核心业务:登录,充值,购买,需要保证,充值一定要到账,购买一个皮肤要马上感受的到。
2 - 数据分类
商城登录:
1、游戏登录表明商城登录,不用单独再登录;
2、微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
3、王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改
商城购买:
1、RoleID:登录后就不会变了;
2、购买商品 : 商品和唯一的 RoleId 绑定,购买记录只会新增不会修改
商城充值:
1、充值点券也和唯一的 RoleId 绑定,充值记录只会新增不会修改
3 - 数据同步
商城登录:
1、RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
商城购买和充值:
1、RoleID:同登录;
2、充值点券订单 id 和区服对应关系,只会新建不会修改,数控库同步
3、点券余额与区服对应关系,点券余额和充值点券订单要考虑强一致性,数据库同步即可
4、商品订单与区服对应关系,点券余额和商品订单要考虑强一致性,数据库同步即可
4 - 异常处理
1、 微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护。
2、商城充值过程中,商城挂了怎么办?
做好分布式事务,保持最终一致性,钱退回用户,道具补偿用户
3、用户购买商品过程中,商城挂了怎么办?
做好分布式事务,保持最终一致性,点券退回用户或者商品最终补偿用户,道具补偿用户
评论