王者荣耀商城异地多活设计
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
【业务功能】
浏览商品
点卷充值
商品订单
订单支付
【关键业务约束】
用户需要先调用微信或 QQ 钱包充值点券,才能用点券购买商品;
英雄和皮肤只能购买一个,不能重复购买;
其他道具可以购买多个;
业务分级
充值点券
创建/支付订单
浏览商品
数据同步
浏览商品:商品属于虚拟物品,没有库存和实物物流等信息,并且商品数据修改量小,因此采用数据库同步即可。
充值点券:微信和 QQ 钱包本身就实现了高可用,所以不需要考虑;
点券余额:要求强一致,经常修改,不可丢失,不可恢复,采用数据库同步;
订单:要求强一致,且每个订单 ID 唯一,丢失,可重复生成,采用数据库同步;
用户购买的商品信息:需要在每个区服呈现客户已经购买的商品信息同步给区服,由于数据允许有延迟,并且信息也是可以恢复的,所以可以采用消息队列同步给各区服。
异常处理
商品同步问题,如 A 数据中心新上架商品由于机房故障、网络故障或应用程序故障没有及时同步到 B 中心,这时 B 中心暂时不能购买新商品并不会产生大问题,等到 A 中心正常后将数据同步后再给用户购买即可,并不会造成太大的。
微信和 QQ 挂了怎么办?直接挂系统维护公告。
点券余额透支,如 A 数据中心使用了点券,但由于故障未能及时同步给 B 数据中心,导致客户在 B 中心透支余额。这样的话是允许的,等到恢复后进行数据同步处理后,再通过事后提示客户补齐点券或者自动撤销购买的商品。
订单同步失败的情况下,对于可以重复购买的商品增加数量,并支持购买撤销,不能重复购买的商品进行数据合并。
用户购买的商品信息如果出现未能成功发送给某个区服数据中心,这时可以通过人工重发,或者引入消息确认机制和重发机制。
评论