架构实战营模块 7 作业
【背景】
假设现在决定要实现王者荣耀里面的商城的异地多活架构,请你分析设计一下。
【作业要求】
1. 分析王者荣耀商城的业务特点,设计其异地多活架构;
2. 按照模块 7 第 5 课的方法来设计异地多活架构。
【提示】
1. 王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别,注意识别出来;
2. 用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
3. 用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
4. 用户买鲜花、改名卡之类的道具可以买多个;
5. 分析步骤参考模块 7 第 6 课的案例。
一、业务背景
2020 年 11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
二、业务分析
2.1 关键业务
用户登录后才能使用商城系统。
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付。
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买。
用户买鲜花、改名卡道具可以买多个。
用户在商城中购买的物品为虚拟物品无需考虑库存和物流,这是和淘宝实物电商的区别。
2.2 业务分级
从关键业务可以分析出:
登录 > 充值点券 > 购买商品
由于用户充值点券后物品可以随时购买,即使服务挂掉,用户可以等待服务恢复后再购买,对于用户也是可以容忍的。
因此需要异地多活的核心业务为:登录、充值点券
三、数据分类
3.1 登录
商城依赖 QQ 和微信账号授权登录,本身无需登录信息。
Role ID:微信和 QQ 授权登录会返回给王者荣耀商城全局唯一 RoleID。
Session ID:可重复生成,可丢失。
手机号:全局唯一,很少变。
密码:可丢失。
3.2 充值点券
点券余额:关联 RoleID ,全局强一致。
支付订单:依赖 QQ 钱包和微信钱包的支付结果。
3.3 购买商品
商品信息:全局一致性,会有信息变更。
英雄和皮肤交易记录:为了保证每个用户只能购买一个,需要保证全局强一致性保证。
道具交易记录:可以买多个,保证最终一致性即可。
四、数据同步
Role ID: 全局唯一不可变,采用数据库同步 + 消息队列同步。
手机号:全局唯一很少变,采用数据库同步 + 消息队列同步。
点券余额:全局强一致性,采用数据库同步余额,充值只能在归属地充值。
商品信息:全局唯一,采用数据库同步 + 消息队列同步。
英雄和皮肤交易记录:全局强一致性,同 RoleID 用户所在区服唯一,采用数据库同步。
道具交易记录:最终一致性,采用数据库 + 消息队列同步。
五、异常处理
登录异常:微信或 QQ 登录异常可以使用手机号登录。如果登录服务挂掉了可以公告通知用户,服务恢复后给予一定补偿。
点券充值异常:客服人工修正数据恢复余额,后续给予适当补偿。
购买商品异常:购买信息没有同步到异地机房,用户无法查看购买商品,短时间用户适当容忍,客服介入给予点券补偿。
购买数据丢失:允许用户购买,故障恢复后检查重复并进行合并。
六、异地多活架构设计
版权声明: 本文为 InfoQ 作者【星夜】的原创文章。
原文链接:【http://xie.infoq.cn/article/ed81d45e5ac44419048534250】。文章转载请联系作者。
评论