写点什么

架构实战营模块 7 作业

作者:星夜
  • 2022 年 7 月 20 日
  • 本文字数:1140 字

    阅读完需:约 4 分钟

架构实战营模块 7 作业

【背景】

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

【作业要求】

1. 分析王者荣耀商城的业务特点,设计其异地多活架构;

2. 按照模块 7 第 5 课的方法来设计异地多活架构。

【提示】

1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;

2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;

3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;

4. 用户买鲜花、改名卡之类的道具可以买多个;

5. 分析步骤参考模块 7 第 6 课的案例。

一、业务背景


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

二、业务分析

2.1 关键业务


  • 用户登录后才能使用商城系统。

  • 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付。

  • 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买。

  • 用户买鲜花、改名卡道具可以买多个。

  • 用户在商城中购买的物品为虚拟物品无需考虑库存和物流,这是和淘宝实物电商的区别。

2.2 业务分级


从关键业务可以分析出:

登录 > 充值点券 > 购买商品

由于用户充值点券后物品可以随时购买,即使服务挂掉,用户可以等待服务恢复后再购买,对于用户也是可以容忍的。

因此需要异地多活的核心业务为:登录充值点券

三、数据分类

3.1 登录


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

  • Role ID:微信和 QQ 授权登录会返回给王者荣耀商城全局唯一 RoleID。

  • Session ID:可重复生成,可丢失。

  • 手机号:全局唯一,很少变。

  • 密码:可丢失。

3.2 充值点券


  • 点券余额:关联 RoleID ,全局强一致。

  • 支付订单:依赖 QQ 钱包和微信钱包的支付结果。


3.3 购买商品


  • 商品信息:全局一致性,会有信息变更。

  • 英雄和皮肤交易记录:为了保证每个用户只能购买一个,需要保证全局强一致性保证。

  • 道具交易记录:可以买多个,保证最终一致性即可。

四、数据同步


  • Role ID: 全局唯一不可变,采用数据库同步 + 消息队列同步

  • 手机号:全局唯一很少变,采用数据库同步 + 消息队列同步

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

  • 商品信息:全局唯一,采用数据库同步 + 消息队列同步

  • 英雄和皮肤交易记录:全局强一致性,同 RoleID 用户所在区服唯一,采用数据库同步

  • 道具交易记录:最终一致性,采用数据库 + 消息队列同步

五、异常处理


  1. 登录异常:微信或 QQ 登录异常可以使用手机号登录。如果登录服务挂掉了可以公告通知用户,服务恢复后给予一定补偿。

  2. 点券充值异常:客服人工修正数据恢复余额,后续给予适当补偿。

  3. 购买商品异常:购买信息没有同步到异地机房,用户无法查看购买商品,短时间用户适当容忍,客服介入给予点券补偿。

  4. 购买数据丢失:允许用户购买,故障恢复后检查重复并进行合并。

六、异地多活架构设计


发布于: 刚刚阅读数: 4
用户头像

星夜

关注

还未添加个人签名 2018.05.07 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块 7 作业_架构实战营_星夜_InfoQ写作社区