架构实战营 王者荣耀商城异地多活架构设计
作业:王者荣耀商城异地多活架构设计
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
一、业务分级
1、个人资金账户
2、商城
3、购物
二、数据分类
【个人资金账户】
1、点券、金币的数量
2、消费、充值的记录
【商城】
1、商品分类(皮肤、英雄、鲜花等)、
2、商品信息(名称、价格、描述等)
【购物】
1、订单信息
2、用户已购买的商品(皮肤、英雄、鲜花等)
三、数据同步
【个人资金账户】
1、点券、金币等数据是强一致性,采用数据库同步
2、消费、充值的记录 id 全局唯一 数据不可变, 采用数据库同步
【商城】
商品分类、商品信息等信息很少修改,并且没有库存、物流等数据,所以采用数据库同步即可
【购物】
1、订单 id 全局唯一 需要后续改变订单状态 采用 数据库同步 + 消息队列同步
2、商品和用户的对应关系数据可能会变化 采用 数据库同步 + 消息队列同步
四、异常处理
1、刚充完钱服务就挂了, 异地机房点券还没有同步过来
可以等服务恢复后再买, 或者再充值一次购买, 事后通过消费充值记录给予用户一定补偿
2、在原机房充值消费后数据还未来得及同步到异地机房服务就挂了, 导致用户在异地机房又可以消费一次
属于透支金额, 可以容忍,因为虚拟商品本来就没什么成本
3、购买信息未来得及同步,用户重复购买了商品
服务恢复后 鲜花等可以重复购买的商品做数量合并即可, 英雄皮肤等不可重复购买的商品, 可以给予用户一定的补偿
4、 微信钱包或者 QQ 钱包挂了
充值购买服务不可用, 挂维护通告 先打游戏 等恢复了再买
评论