写点什么

架构实战营模块 7 作业

  • 2022 年 7 月 20 日
  • 本文字数:1321 字

    阅读完需:约 4 分钟

王者荣耀商城异地多活架构设计

一、王者荣耀商城业务背景

业务功能:

购买英雄、皮肤和道具。


关键业务约束:

  1. 用户登录后才能使用商城

  2. 先通过微信钱包或 QQ 钱包进行点券充值,然后再用点券在商城里进行支付

  3. 英雄和皮肤只可以购买一次不能重复购买;而鲜花、改名卡等道具可以购买多次

  4. 游戏商城是虚拟物品商城,与实物电商有很大区别,主要体现在不需要考虑库存,也不需要考虑物流这两方面。

二、业务优先级排序

主要有以下几个业务功能:

登录、点券充值、商品购买。

登录属于最基本的功能,如果无法登录商城也就没办法使用充值或购买物品的功能了。

点券充值由于涉及到用户的资金交易,如果出现扣款成功而游戏内余额数据没有同步的情况,可能会导致用户体验非常不好。

而在用户充值后,如果因为服务挂掉而暂时不能购买商品,也可以在服务恢复之后再进行购买行为,这个是可以容忍的。

所以对业务的优先级进行排序后,主要的核心业务为登录和点券充值。

三、数据分类

3.1 登录

  • RoleID:微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;

  • 区服信息,只会新增不会修改

  • 登录 Session。拿到 RoleID 时,生成访问商城所需要的 Session;

3.2 点券充值

  • RoleID:登录后就不会变了

  • 点券余额:依赖微信钱包和 QQ 钱包的支付结果,会在拿到结果后更新数额,全局强一致性

  • 支付订单 id:全局唯一,只会增加,不修改,不可丢失

  • 支付订单数据:比如金额,点券数量等等,与支付订单 id 进行绑定,不会修改,不可丢失

3.3 商品购买

  • RoleID:登录后就不会变了

  • 商品信息:全局唯一,有可能会修改商品详情

  • 英雄和皮肤购买记录:会绑定一个购买记录的全局唯一 id,新建后就不会修改,且同一个 RoleID 在同一个区服下只能存在一条同款的商品记录,最终一致性

  • 道具购买记录:可以有多个购买记录,同样是购买成功就不会修改,保证最终一致性即可

四、数据同步

  • RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。

  • 点券余额,要求全局强一致性,采用数据库同步余额,充值只能在归属地充值,并且每日在固定时间通过系统对账等方式进行补偿修正;

  • 支付订单 id 与支付数据,id 全局唯一,每次创建时通过算法新建一个唯一 id,数据不可修改,通过数据库同步+消息队列同步

  • 商品信息,要求全局唯一,采用数据库同步 + 消息队列同步

  • 英雄、皮肤交易记录:最终一致性,数据库同步+消息队列同步

  • 道具交易记录:最终一致性,采用数据库同步+消息队列同步

五、异常处理

  1. 登录异常:如果是由于微信或 QQ 授权登录异常导致,这时可以使用绑定手机号进行验证码登录。也可以在服务恢复之后,给用户发放补偿道具。

  2. 点券充值发起失败:告知用户目前充值服务暂时不可用,如果影响范围较大,时间较长,也可以通过发放补偿的方式来解决

  3. 点券充值扣款后更新余额失败:可通过客服申诉,人工核实后手动恢复,必要时可以给予一定补偿。

  4. 购买商品数据丢失:如果是购买之后机房挂掉,导致用户登录到另一个机房,并显示没有购买,可以告知用户耐心等待,长时间的情况通过客服接入进行补偿;如果机房挂掉后,用户在另一个机房重复购买,这部分情况会比较少,可以在机房恢复后进行道具的检查与合并,也可以通过反馈客服进行核实,或在后台业务系统对账后,进行点券退款等操作,并给予补偿。

  5. 购买商品失败:提示用户稍后再进行购买

六、异地多活架构设计


发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2018.09.21 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块7作业_架构实战营_挖了蘑菇哩斯_InfoQ写作社区