模块七作业
作业:王者荣耀商城异地多活架构设计
【背景】 假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】 1. 分析王者荣耀商城的业务特点,设计其异地多活架构; 2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】 1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来; 2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付; 3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买; 4. 用户买鲜花、改名卡之类的道具可以买多个; 5. 分析步骤参考模块 7 第 6 课的案例
业务特点
王者荣耀内嵌商城,作为游戏的内购商城,商品属性与购物网站的商品有着很大的不同。
首先,物品都是虚拟物品,没有物流系统以及复杂库存系统,大多数可消耗道具没有库存概念,英雄皮肤及限购类商品才有类似库存的概念,但在业务上可以视作某个账号在区服下的购买标识记录。
其次,购买商品不是直接支付,而是需要先支付兑换点券后,使用点券进行购买。
最后,商城识别唯一用户都是 RoleID+区服 ID,同一个账号在不同区服的皮肤、英雄、道具不共享。
设计步骤
业务分级
注册、登录、对战、商城、社区、活动
现对商城进行异地多活设计。
数据分类
1、用户点券余额,会实时变动、全局强一致性、不涉及唯一性、不可以丢失
2、商品信息,变动次数较少、最终一致性、可以丢失、可以恢复、全局唯一
3、商品库存分两种:
英雄、皮肤或者限购类道具; 一个 roleid 在同一个区服中只能购买一次同一个英雄或者皮肤,变动次数少、强一致性、不可丢失
各种消耗类道具;可以多次购买, 虚拟物品,库存无上限(无变动)
数据同步
1、roleId 全局唯一不可变,数据库同步+消息队列
2、用户点券余额,与角色区服信息绑定 ,数据库同步
3、商品信息,数据库同步
英雄、皮肤或者限购类道具;实际为购买标识记录,与角色区服信息绑定,全局强一致性,
数据库同步+消息队列
消耗类道具,无库存概念,无需同步
异常处理
1、点券充值时,已付款,但点券未到账
可能由于第三方支付(如银行卡)后需要一定时间回调支付确认接口,造成点券未及时更新。
处理方式:容忍或者让用户退出后重新登录刷新。
2、本地 ldc 异常,无法同步本地实时余额到异地机房,玩家无法充值进行消费
处理方式:允许玩家在异地 ldc 充值,消费;允许玩家在异地消费前充值大于消费金额的点券,等待本地 ldc 恢复后将充值消费事务通过消息队列进行事务合并
3、新上架商品,未及时同步到异地机房,部分用户访问异地机房看不到该商品
处理方式:等待同步后即可看到,只保证最终一致性。
4、英雄、皮肤或者限购类道具购买标识未及时同步到异地机房,本地服务异常,造成重复购买或者超过限购数量。
处理方式:业务上做退款处理,超过限购数量的道具视具体情况进行回收补偿或者不处理。
评论