架构训练营模块七作业
作业
王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。【作业要求】
分析王者荣耀商城的业务特点,设计其异地多活架构;
按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,
注意识别出来;
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
用户买鲜花、改名卡之类的道具可以买多个;
分析步骤参考模块 7 第 6 课的案例。
步骤 1-业务分级
充值,购买,商品(英雄,皮肤,鲜花,改名卡之类),促销,订单
由于是虚拟商品,不涉及到库存控制,不存在超买超卖现象,卖家只有一个,就是平台
核心业务:购买,订单,商品
步骤 2-数据分类
用户余额:需要保证一致性。余额必须大于 0,每次购买都会修改(一般一个用户的购买频率不会高,可一次购买多个),数据不可丢失,难以恢复
英雄,鲜花,改名卡之类商品: 无购买限制,商品 id 唯一,可丢失,易恢复
英雄皮肤之类商品:一个影响只能购买一个,购买数量需要做强一致性。商品一般不会变化,可丢失,易恢复
用户 roleid:全局唯一,不会变
交易订单:订单 id 唯一,不像实体商城那么多状态,用户体验要求那么高,可以在付款后立马生成,所以一般生成不会修改,也没有退货的概念,不可丢失,不易恢复
步骤 3-数据同步
英雄皮肤之类商品
数据库同步
用户 roleid+交易订单+英雄,鲜花,改名卡之类商品
数据库同步+消息队列同步
用户余额
不做双活,不做跨机房同步,双活成本高,发生数据不一致影响程度比较大
步骤 4-异常处理
无法充值怎么办?
公告客户,暂停充值业务
购买点券扣了,商品没到账怎么办?
提供申诉通道,或者等恢复了补上去,补偿优惠券
订单数据未及时同步怎么办?
容忍,等恢复了再看交易记录
用户余额系统所在机房挂了怎么办?
缓存最后一次购买的余额用于临时显示,系统公告停止购买的友好提示
英雄皮肤之类商品还没同步到其他机房就挂了导致购买了多个皮肤怎么办?
最后一个皮肤覆盖之前购买的皮肤
评论