写点什么

王者荣耀商城异地多活设计

作者:皓月
  • 2022 年 2 月 09 日
  • 本文字数:712 字

    阅读完需:约 2 分钟

业务背景

【业务数据】

2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。

【业务功能】

  1. 浏览商品

  2. 点卷充值

  3. 商品订单

  4. 订单支付

【关键业务约束】

  1. 用户需要先调用微信或 QQ 钱包充值点券,才能用点券购买商品;

  2. 英雄和皮肤只能购买一个,不能重复购买;

  3. 其他道具可以购买多个;

业务分级

充值点券

创建/支付订单

浏览商品


数据同步

  1. 浏览商品:商品属于虚拟物品,没有库存和实物物流等信息,并且商品数据修改量小,因此采用数据库同步即可。

  2. 充值点券:微信和 QQ 钱包本身就实现了高可用,所以不需要考虑;

  3. 点券余额:要求强一致,经常修改,不可丢失,不可恢复,采用数据库同步;

  4. 订单:要求强一致,且每个订单 ID 唯一,丢失,可重复生成,采用数据库同步;

  5. 用户购买的商品信息:需要在每个区服呈现客户已经购买的商品信息同步给区服,由于数据允许有延迟,并且信息也是可以恢复的,所以可以采用消息队列同步给各区服。


异常处理

  1. 商品同步问题,如 A 数据中心新上架商品由于机房故障、网络故障或应用程序故障没有及时同步到 B 中心,这时 B 中心暂时不能购买新商品并不会产生大问题,等到 A 中心正常后将数据同步后再给用户购买即可,并不会造成太大的。

  2. 微信和 QQ 挂了怎么办?直接挂系统维护公告。

  3. 点券余额透支,如 A 数据中心使用了点券,但由于故障未能及时同步给 B 数据中心,导致客户在 B 中心透支余额。这样的话是允许的,等到恢复后进行数据同步处理后,再通过事后提示客户补齐点券或者自动撤销购买的商品。

  4. 订单同步失败的情况下,对于可以重复购买的商品增加数量,并支持购买撤销,不能重复购买的商品进行数据合并。

  5. 用户购买的商品信息如果出现未能成功发送给某个区服数据中心,这时可以通过人工重发,或者引入消息确认机制和重发机制。

架构示意图


用户头像

皓月

关注

不积跬步无以至千里。 2021.06.28 加入

个人代码库:https://gitee.com/hon-gitee, 欢迎来踩~~。

评论

发布
暂无评论
王者荣耀商城异地多活设计