王者荣耀商城异地多活架构设计
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万
【业务功能】
商城:购买英雄、皮肤、道具等
【业务约束】
登录用户才能购买
商城是虚拟物品商城
要先调用微信钱包或者 QQ 钱包充值点券,商城使用点券消费
英雄、皮肤只能买一个,不能重复购买
鲜花、改名卡之类的可以买多个
数据分类
商城是个人商城
玩家不能多机登录
商城只使用自己的点券
必须登录才能购买
所以可以通过用户的 roleId 和自增 id 操作 id 保证最终一致性
英雄、皮肤只能购买一个,满足幂等
鲜花、改名卡多次调用会出问题,可以通过唯一 id 保证幂等
需要保存玩家点券、物品、记录
点券数和 RoleID 绑定
RoleID+自增订单 id+操作 id
物品数据:和 RoleID 绑定,需要查询是否已有
数据同步:
RoleID 同登录
订单 ID 根据用户记录的 id 自增
操作 ID 具体定义即可
用户数据检查是否拥有该道具
异常处理
1. 微信和 QQ 挂了,如果点券不够那就买不了,有点券就还能服务
2. 支付之后没到账,利用消息队列保证最终一致性,可以让玩家重新刷新,稍后再试
3. 真的没有恢复,那就客服补偿该物品即可
评论