架构实战营模块 7 作业
王者荣耀商城异地多活架构设计
一、王者荣耀商城业务背景
业务功能:
购买英雄、皮肤和道具。
关键业务约束:
用户登录后才能使用商城
先通过微信钱包或 QQ 钱包进行点券充值,然后再用点券在商城里进行支付
英雄和皮肤只可以购买一次不能重复购买;而鲜花、改名卡等道具可以购买多次
游戏商城是虚拟物品商城,与实物电商有很大区别,主要体现在不需要考虑库存,也不需要考虑物流这两方面。
二、业务优先级排序
主要有以下几个业务功能:
登录、点券充值、商品购买。
登录属于最基本的功能,如果无法登录商城也就没办法使用充值或购买物品的功能了。
点券充值由于涉及到用户的资金交易,如果出现扣款成功而游戏内余额数据没有同步的情况,可能会导致用户体验非常不好。
而在用户充值后,如果因为服务挂掉而暂时不能购买商品,也可以在服务恢复之后再进行购买行为,这个是可以容忍的。
所以对业务的优先级进行排序后,主要的核心业务为登录和点券充值。
三、数据分类
3.1 登录
RoleID:微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
区服信息,只会新增不会修改
登录 Session。拿到 RoleID 时,生成访问商城所需要的 Session;
3.2 点券充值
RoleID:登录后就不会变了
点券余额:依赖微信钱包和 QQ 钱包的支付结果,会在拿到结果后更新数额,全局强一致性
支付订单 id:全局唯一,只会增加,不修改,不可丢失
支付订单数据:比如金额,点券数量等等,与支付订单 id 进行绑定,不会修改,不可丢失
3.3 商品购买
RoleID:登录后就不会变了
商品信息:全局唯一,有可能会修改商品详情
英雄和皮肤购买记录:会绑定一个购买记录的全局唯一 id,新建后就不会修改,且同一个 RoleID 在同一个区服下只能存在一条同款的商品记录,最终一致性
道具购买记录:可以有多个购买记录,同样是购买成功就不会修改,保证最终一致性即可
四、数据同步
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
点券余额,要求全局强一致性,采用数据库同步余额,充值只能在归属地充值,并且每日在固定时间通过系统对账等方式进行补偿修正;
支付订单 id 与支付数据,id 全局唯一,每次创建时通过算法新建一个唯一 id,数据不可修改,通过数据库同步+消息队列同步
商品信息,要求全局唯一,采用数据库同步 + 消息队列同步
英雄、皮肤交易记录:最终一致性,数据库同步+消息队列同步
道具交易记录:最终一致性,采用数据库同步+消息队列同步
五、异常处理
登录异常:如果是由于微信或 QQ 授权登录异常导致,这时可以使用绑定手机号进行验证码登录。也可以在服务恢复之后,给用户发放补偿道具。
点券充值发起失败:告知用户目前充值服务暂时不可用,如果影响范围较大,时间较长,也可以通过发放补偿的方式来解决
点券充值扣款后更新余额失败:可通过客服申诉,人工核实后手动恢复,必要时可以给予一定补偿。
购买商品数据丢失:如果是购买之后机房挂掉,导致用户登录到另一个机房,并显示没有购买,可以告知用户耐心等待,长时间的情况通过客服接入进行补偿;如果机房挂掉后,用户在另一个机房重复购买,这部分情况会比较少,可以在机房恢复后进行道具的检查与合并,也可以通过反馈客服进行核实,或在后台业务系统对账后,进行点券退款等操作,并给予补偿。
购买商品失败:提示用户稍后再进行购买
六、异地多活架构设计
版权声明: 本文为 InfoQ 作者【挖了蘑菇哩斯】的原创文章。
原文链接:【http://xie.infoq.cn/article/6c54b05be631e87d6a1bd3834】。文章转载请联系作者。
评论