第七周作业 - 王者荣耀商城异地多活架构设计
业务背景
2020.11 月 全年日均活跃 1 亿,注册玩家 6 亿,同时最高在线 100w
业务功能
充值点券、购买英雄、皮肤、道具
业务约束
登录用户才能购买
用户需要先通过微信钱包或者 QQ 钱包充值购买点券,用点券再支付
同样的英雄和皮肤只能购买一个,不可重复
鲜花、改名卡、遗忘之水等道具卡可以买多个
业务分级
充值点券、消费点券
数据分类
【充值】
依赖 QQ 钱包、微信钱包、ios 账户授权支付,依赖登录信息
RoleID: 登录后就不会变了
授权 ID: 每次新建,全局唯一,不会修改
充值 ID: 每次新建,全局唯一,不会修改
点券余额:强一致性、不可丢失、不可恢复
【消费】
消费点券:强一致性、不可丢失、不可恢复、数据修改大
RoleID: 登录后就不会变了
支付 ID:只会新增、全局唯一
消费记录:1)英雄或皮肤 --> RoleID+英雄 ID 或皮肤 ID 全局唯一
2)道具:---> RoleID+道具 ID -->可重复
数据同步
【充值】
RoleID、授权 ID、充值 ID 只会新增不会修改 数据库同步+消息队列
点券余额:数据库同步
【消费】
RoleID、支付 ID 只会新增不会修改 数据库同步+消息队列
点券余额:数据库同步
消费记录:购买英雄和皮肤数据 数据库同步+消息队列
购买道具数据:数据库同步
异常处理
Q: 微信和 QQ 挂了
A: 直接挂公告系统停服
Q:第三方授权支付异常
A: 只能无法充值
Q: 玩家在某个区服充值或消费,点券余额没同步到异地机房,在异地机房再充值或消费怎么办?
A: 临时事务表合并+消息队列同步+数据库同步
Q: 玩家购买了某个英雄或皮肤,没同步到异地机房
A: 客服告知退出登录重新二次读取,可做金币或者钻石的赔偿策略,或者少许积分也可以
Q: 玩家购买道具卡没同步到异地机房,导致用户再次购买
A: 业务上允许多次购买,如果玩家要求退款,客服可操作退款
评论