写点什么

模块七作业

作者:21°Char
  • 2021 年 12 月 24 日
  • 本文字数:1155 字

    阅读完需:约 4 分钟

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

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

【作业要求】 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、英雄、皮肤或者限购类道具购买标识未及时同步到异地机房,本地服务异常,造成重复购买或者超过限购数量。

处理方式:业务上做退款处理,超过限购数量的道具视具体情况进行回收补偿或者不处理。

商城异地多活架构



用户头像

21°Char

关注

还未添加个人签名 2021.09.22 加入

还未添加个人简介

评论

发布
暂无评论
模块七作业