写点什么

王者荣耀商城异地多活分析 - 模块 7

用户头像
小牧ah
关注
发布于: 3 小时前

【背景】

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


【作业要求】

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

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


【提示】

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

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

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

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


什么是异地多活?

异地:服务部署在不同的物理位置,可以是不同机房,不同城市,不同区域,不同国家,避免只部署在一个机房,遇到异常导致业务中断,因此需要异地部署分散风险

多活:异常情况下,总有一个地方能够提供正常服务,不同地区互为备份


异地多活的重点

异地场景导致的网络延迟、数据分区场景下数据如何同步,出了异常如何处理


异地多活的设计步骤


1. 业务分级

如何做业务分级呢?

业务分级判断维度:访问量、核心场景、收入来源


王者荣耀商城领域有哪些核心的业务了?商城的核心场景是交易行为,一次交易行为包括:

  1. 登录到具体区服后才能购买,因此包括登录服务

  2. 首先需要有展示虚拟商品如英雄、皮肤的商品服务

  3. 虽然都是虚拟物品,但也不是无限库存,也需要有库存服务

  4. 购买虚拟服务,就会产生订单,因此也需要订单服务

  5. 最后订单需要付钱,需要支付服务


核心场景还是登录、和交易两个大场景

2. 数据分类

根据什么维度进行数据分类了?可以根据以下几个维度进行分类

登录场景数据:

  1. 依赖 QQ 和微信账户授权登录,本身无登录信息

  2. 微信和 QQ 登录后会返回游戏的全局唯一 RoleID,游戏数据只认这个 RoleID

  3. 登录后进入游戏需要选择区服,会新增 RoleID2 区服 ID 记录,只新增不修改


交易场景数据:

  1. 商品数据,非核心,后台维护数据,新上架商品、或者调价对于分区数据的同步延迟容忍度较高

  2. 库存数据,由于是虚拟商品,不向实物商品,卖出去的每一个都必须扣减库存成功,对于不一致性,甚至丢失的容忍性较高

  3. 订单 ID 全局唯一,全局 ID 生成器算法生成,

  4. 订单数据,同一个账号,同一个区服,同一个英雄,同一个英雄的同一个皮肤不能下多个订单,下单不能丢失,不能重复,最终一致性

  5. 点券支付,属于用户余额类数据,强一致性,不能丢失

3. 数据同步

  1. 商品数据,一致性,可丢失性,数据幂等,因此可采用数据库同步、消息队列同步多种手段

  2. 库存数据,虚拟商品一致性没那么高,可采用数据库同步、消息队列同步

  3. 订单数据,可采用数据库同步

  4. 点券支付,可采用数据库同步

4. 异常处理

而对于多活场景产生的异常通常有 3 种处理手段:

登录失败场景:

微信、QQ 身份认证服务挂了,区服爆满,无法进入,只能挂停服公告,用户容忍


下单完后服务挂的场景:

  1. 订单数据未同步其他机房,看不到订单数据?

等恢复了再看

  1. 支付数据未同步?

不会对用户造成损失,恢复后扣减,并通知用户扣减成功即可


数据不同延迟场景:

  1. 订单数据未同步,可进行二次读取,回源读取


用户头像

小牧ah

关注

还未添加个人签名 2018.02.24 加入

还未添加个人简介

评论

发布
暂无评论
王者荣耀商城异地多活分析-模块7