模块 7 王者荣耀商城 - 异地多活架构
1. 背景
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
2. 业务分级
在商城余额充值
在商城购买商品
2.2 业务约束
登录后才能进行购买
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买
3.数据分类
3.1 登录
1. 依赖 QQ 和微信账号授权登录,本身无需登录信息;
2. 微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
3. 王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
3.2 充值/购买
充值、购买记录:有全局唯一 ID,与 RoleID,充值/购买记录只会新增不会修改。
剩余点数:记录剩余点数与 RoleID 绑定,具有全局 ID,ID 不能修改。
已购买商品:与区服和 RoleID 绑定,不能跨区服使用。
3.3 商品
虚拟商品没有库存,只有极少部分商品有库存限制
商品 ID:全局唯一,只能添加不能更改。
4.数据同步
4.1 登录
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
4.2 充值/购买
充值记录:算法生成记录 ID, ID 全局唯一,数据库同步即可。
剩余点数:需要更改,但不是很频繁,每个用户对应一条记录,记录 ID 由算法生词,记录 ID 全局唯一,ID 不会进行修改。数据库同步即可。
已购买商品:与区服和 roleID 绑定,可以删除,ID 由算法生成,ID 全局唯一,ID 不进行更改,数据库同步即可。
4.3 商品
商品库存:有数量限定的商品库存,数量需要修改,ID 全局唯一,ID 不能进行修改,数据量较少无需进行分区,数据库同步即可。
商品:虚拟商品,无需库存,ID 全局唯一,ID 不能进行修改。可以进行删除。数据库同步即可。
5. 异常处理
5.1 不能购买商品
系统提示系统正在维护,回复后再购买。
5.2 充值了但余额没有同步到异地机房
等系统恢复就可以购买了,如果客户依依不饶,就送优惠券礼包等补偿。
5.3 用户购买了商品,但没有同步到异地机房,用户无法使用
等系统恢复后就能使用了,如果客户依依不饶,就送优惠券礼包等补偿。
6.架构设计
用户在商城购买道具后,用户服务器会记录用户已购买的商品以及能在哪个区服能够使用。
南北机房区服务器互为主备,存储用户在该区已经购买的道具,通过数据库和消息队列保证数据一致性。
南北商城数据库互为备份,主要存储商品和商品数量。
评论