极客时间架构训练营模块七作业
背景
假设现在决定要实现王者荣耀的商城的异地多活架构,请你分析一下
业务背景
业务数据
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万
业务功能
使用微信或者 QQ 账号登录游戏
商城:购买英雄、皮肤、道具等
关键业务约束
使用微信或者 QQ 账号登录游戏
用户要先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付
用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买
用户买鲜花、改名卡之类的道具可以买多个
王者荣耀的商城是虚拟物品商城,所以用户购买的虚拟物品无需考虑库存和物流
设计步骤
步骤 1-业务分级
服务主要有:注册、登录、充值点券、购买商品(不允许重复购买的商品、允许重复购买的商品)
由于购买商品分为不允许重复购买的商品和允许重复购买的商品,购买商品做异地多活复杂度太高。且商城中均为虚拟商品,用户充值点券后购买商品的意愿非常高,即使服务挂掉,用户可以等待服务恢复后再购买,对于用户也是可以容忍的
所以需要异地多活的核心业务为:登录、充值点券
步骤 2-数据分类
登录
依赖 QQ 和微信账号授权登录,本身无需登录信息
微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID
王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改
充值点券
RoleID:登录后就不会变了
点券余额:强一致性,不可丢失
点券充值订单:每次新建,全局唯一,不会修改
步骤 3-数据同步
登录
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可
充值点券
RoleID:同登录
点券余额:数据库同步
点券充值订单:数据库+消息队列同步
步骤 4-异常处理
登录
QQ 和微信挂了怎么办:直接挂系统公告(系统停服维护)
充值点券
点券余额未及时同步到异地机房怎么办:等待同步完成
用户充值订单数据未及时同步到异地机房,用户看不到充值结果怎么办:等恢复了在看
异地多活架构示意图
版权声明: 本文为 InfoQ 作者【李晨】的原创文章。
原文链接:【http://xie.infoq.cn/article/f88fcbc7f6feca6f10f49aa3d】。文章转载请联系作者。
评论