王者荣耀商城异地多活分析 - 模块 7
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
什么是异地多活?
异地:服务部署在不同的物理位置,可以是不同机房,不同城市,不同区域,不同国家,避免只部署在一个机房,遇到异常导致业务中断,因此需要异地部署分散风险
多活:异常情况下,总有一个地方能够提供正常服务,不同地区互为备份
异地多活的重点
异地场景导致的网络延迟、数据分区场景下数据如何同步,出了异常如何处理
异地多活的设计步骤
1. 业务分级
如何做业务分级呢?
业务分级判断维度:访问量、核心场景、收入来源
王者荣耀商城领域有哪些核心的业务了?商城的核心场景是交易行为,一次交易行为包括:
登录到具体区服后才能购买,因此包括登录服务
首先需要有展示虚拟商品如英雄、皮肤的商品服务
虽然都是虚拟物品,但也不是无限库存,也需要有库存服务
购买虚拟服务,就会产生订单,因此也需要订单服务
最后订单需要付钱,需要支付服务
核心场景还是登录、和交易两个大场景
2. 数据分类
根据什么维度进行数据分类了?可以根据以下几个维度进行分类
登录场景数据:
依赖 QQ 和微信账户授权登录,本身无登录信息
微信和 QQ 登录后会返回游戏的全局唯一 RoleID,游戏数据只认这个 RoleID
登录后进入游戏需要选择区服,会新增 RoleID2 区服 ID 记录,只新增不修改
交易场景数据:
商品数据,非核心,后台维护数据,新上架商品、或者调价对于分区数据的同步延迟容忍度较高
库存数据,由于是虚拟商品,不向实物商品,卖出去的每一个都必须扣减库存成功,对于不一致性,甚至丢失的容忍性较高
订单 ID 全局唯一,全局 ID 生成器算法生成,
订单数据,同一个账号,同一个区服,同一个英雄,同一个英雄的同一个皮肤不能下多个订单,下单不能丢失,不能重复,最终一致性
点券支付,属于用户余额类数据,强一致性,不能丢失
3. 数据同步
商品数据,一致性,可丢失性,数据幂等,因此可采用数据库同步、消息队列同步多种手段
库存数据,虚拟商品一致性没那么高,可采用数据库同步、消息队列同步
订单数据,可采用数据库同步
点券支付,可采用数据库同步
4. 异常处理
而对于多活场景产生的异常通常有 3 种处理手段:
登录失败场景:
微信、QQ 身份认证服务挂了,区服爆满,无法进入,只能挂停服公告,用户容忍
下单完后服务挂的场景:
订单数据未同步其他机房,看不到订单数据?
等恢复了再看
支付数据未同步?
不会对用户造成损失,恢复后扣减,并通知用户扣减成功即可
数据不同延迟场景:
订单数据未同步,可进行二次读取,回源读取
评论