写点什么

架构训练营模块七作业

作者:gigifrog
  • 2023-03-13
    贵州
  • 本文字数:1003 字

    阅读完需:约 3 分钟

作业要求

假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。

方案设计

王者荣耀商场属于典型的虚拟物品商店有如下特点,

  • 没有库存信息

虚拟物品可以无限制售卖给用户,不存在库存的概念。王者商店中的英雄、皮肤、道具没有总量的限制,理论上可以卖给每一个玩家。

  • 没有物流的概念

虚拟物品没有物流概念。针对任何的多发、漏发、错发情况只要改动数据库就能完成修改,几乎不会有大的损失。

业务分级

在异地多活架构中必须保证如下核心业务

  • 登陆

  • 充值点券

  • 用点券购买物品

数据分类

1 登陆

  • 依赖 QQ 和微信账号授权登录,本身无需登录信息

  • 微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID

  • 王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。

2 充值点券

  • 依赖平台(AppStore、微信钱包、QQ 钱包)进行具体金融操作,商城无需考虑这块的异地多活

  • 充值 Order ID:全局唯一、不可重复、每次算法生成

  • 点券余额:全局强一致性

3 用点券购买物品

  • 点券购物 Order ID:全局唯一、不可重复、每次算法生成

  • 英雄、皮肤等唯一性物品:全局唯一、不可重复购买;业务上只能新增、不会删除或者修改

  • 鲜花、道具等非唯一性物品:全局不唯一、可以重复购买

数据同步

  • RoleID 和区服对应关系,只会新建不会修改,数据库同步即可

  • 充值 Order ID:每次新建,全局唯一,不会修改,用算法生成,数据库同步即可

  • 点券余额:全局一致性,采用数据库同步余额,充值只能在归属地充值

  • 点券购物 Order ID:每次新建,全局唯一,不会修改,用算法生成,数据库同步即可

  • 英雄、皮肤等唯一性物品:全局唯一,不可变,采用数据库同步+消息队列同步

  • 鲜花、道具等非唯一性物品:全局不唯一,数据库同步

异常处理

  1. Q: 微信和 QQ 挂了,无法登陆怎么办?

A: 直接挂公告:系统停服维护。

  1. Q: 平台出现故障,无法充值,怎么办?

A: 直接挂公告,请求用户稍后再试。

  1. Q:用户在平台完成充值,但是点券余额没有更新?

A: 与平台批处理对账时,更新对应充值 OrderID 的结果。发信息给用户,24 小时内到账。

  1. Q:用户用点券购买了物品,但是没有更新,怎么办?

A:等数据库同步完成。发信息给用户,24 小时内到账。可以适当补偿钻石、碎片等虚拟物品。

  1. Q:用户重复购买了唯一性物品怎么办?

A:如果是同一个账号重复购买了唯一性物品,客服手动退回点券;如果是不同账号赠送同样的唯一性物品,转化为皮肤、英雄碎片,不支持退款。

  1. Q:用户重复购买了非唯一性物品怎么办?

A:非唯一性物品本身支持重复购买,无需任何操作。

架构设计


用户头像

gigifrog

关注

还未添加个人签名 2018-01-17 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块七作业_架构训练营_gigifrog_InfoQ写作社区