Bootstrap

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

一、需求分析

【背景】

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

【作业要求】

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

【提示】

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

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

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

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

二、异地多活架构设计分析

  • 业务分级(top3)

  • 点券充值,登录,虚拟商品购买 (没有登录和充值就不会产生收入)

  • 数据分类

  • 【登录】依赖 QQ 和微信账号授权登录,生成商城唯一的用户 ID

  • 【Session】可重复生成,可丢失,丢失后重新登录

  • 【点券】全局强一致性,如同账户余额

  • 【虚拟商品编号】全局唯一不可变,算法生成

  • 【订单号】全局唯一不可变,算法生成

  • 数据同步

  • 【用户 ID】全局唯一,不可变,采用数据库同步 + 消息队列同步,注意需要判重

  • 【Session ID】可重复生成,可丢失,不同步,用户重新登录生成

  • 【点券】全局强一致性,变动频繁,采用数据库同步,充值与消费原则上只能在归属地操作,遇到归属地异常需要手动把点券服务切到异地处理

  • 【虚拟商品编号】全局唯一,不可变,采用数据库同步 + 消息队列同步

  • 【订单号】全局唯一,不可变,采用数据库同步 + 消息队列同步

  • 异常处理

  • 异地机房登录时,没有登录 Session 信息怎么办?

  • 用户重新登录

  • 异地机房未及时同步商品时怎么办?

  • 允许部分商品不可购买

  • 异地机房点券为及时同步时怎么办?

  • 允许用户适当透支

  • 如果是系统大规模宕机并切换机房造成的问题怎么办?

  • 礼物

  • 点券

  • 皮肤

三、王者荣耀商城异地多活架构图