写点什么

架构实战营 - 模块七 - 作业

作者:小畅
  • 2024-06-12
    北京
  • 本文字数:1026 字

    阅读完需:约 3 分钟

【背景】

假设现在决定要实现王者荣耀里边商城的异地多活架构,请你分析一下。


【业务功能】

充值点券、购买英雄、皮肤、道具

【业务约束】

  • 登录用户才能购买

  • 用户需要先通过微信钱包或者 QQ 钱包充值购买点券,用点券再支付

  • 同样的英雄和皮肤只能购买一个,不可重复

  • 鲜花、改名卡、遗忘之水等道具卡可以买多个


  • 虚拟物品商城与实物电商的两个区别:1)没有库存的概念,因此设计的时候在一致性这一部分处理就简单很多;2)有发货但是没有物流的概念,也就是说用户购买虚拟物品后,商城同步信息给用户的区服即可

  • 调用微信钱包和 QQ 钱包充值的时候,支付本身高可用不需要商城自己实现;

  • 用户的点券看起来是强一致性的数据,但实际上是可以允许一定额度的透支的因为两个原因:1)没有实物发货,不用担心被薅羊毛;2)充值点券后不能提现;3)如果用户在异地多活场景透支,那么恢复后是可以发现的,而且用户也不会因为这点毛头小利退游,因为一旦退游,他充的钱都浪费了;

  • 买英雄和皮肤业务约束不能重复购买,但其实用户买了一个英雄后,遇到机房故障,到另外一个机房再买一个是可以的,这个异常场景的用户很少,如果有的话,将英雄熟练度和经验值合并就可以了

  • 鲜花、改名卡等道具有数量的概念,多买是没有关系的,合并数量就可以了;

  • 整体方案其实用数据库同步 + 消息队列同步就够了,再加上述说的几个业务上的异常处理。其中数据库同步用于异地机房同步订单数据,消息队列用于将购买信息同步给区服服务器


【数据分类】

1、充值

依赖 QQ 钱包、微信钱包、ios 账户授权支付,依赖登录信息

RoleID: 登录后就不会变了

授权 ID: 每次新建,全局唯一,不会修改

充值 ID: 每次新建,全局唯一,不会修改

点券余额:强一致性、不可丢失、不可恢复

2、消费

消费点券:强一致性、不可丢失、不可恢复、数据修改大

RoleID: 登录后就不会变了

支付 ID:只会新增、全局唯一

消费记录:

1)英雄或皮肤 --> RoleID+英雄 ID 或皮肤 ID 全局唯一

2)道具:---> RoleID+道具 ID -->可重复

【数据同步】

1、充值

RoleID、授权 ID、充值 ID 只会新增不会修改 数据库同步+消息队列

点券余额:数据库同步

2、消费

RoleID、支付 ID 只会新增不会修改 数据库同步+消息队列

点券余额:数据库同步

消费记录:购买英雄和皮肤数据 数据库同步+消息队列

购买道具数据:数据库同步

【异常处理】

1、库存

如果采用单点部署,库存服务挂掉,提示用户稍后再试。

2、购买物品

用户购买完某些物品,没有同步到异地机房,提示用户稍后再试,或者进行二次读取,去另外一个机房读取。


【架构设计】




用户头像

小畅

关注

还未添加个人签名 2024-03-09 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 模块七 - 作业_小畅_InfoQ写作社区