第九期 - 模块七
业务背景分析
【业务功能】
使用微信或者 QQ 账号登录游戏;
虚拟商品发布
虚拟英雄皮肤购买
虚拟道具(鲜花、改名卡)购买
调用微信、qq 充值点券
【关键业务约束】
登录才能购买,
只能用充值点券购买
购买同样的英雄、皮肤不能重复购买;
虚拟商品无库存限制,有的商品只能购买一次;
设计步骤
业务分级
在登录、发布、购买、充值几个业务中,
登录、购买属于核心业务;
发布故障时,不影响已有虚拟商品售卖,再其发布的商品中没有库存限制,因此可以持续卖
充值故障时,点券有余额可以购买,没有余额可以通过他人代买、或者线下渠道交易再通过激活码购买
数据分类
【登录】
1. 用户 ID:全局唯一,不可变;2. 用户手机号:全局唯一,很少变;3. SessionID:可重复生成,可丢失;4. 密码:可丢失。
【购买】
1.用户 ID:全局唯一,不可变;
2.点券额度:全局强一致性;
3.订单 ID:全局唯一,不可重复,可以算法生成
4.商品品类 ID:全局唯一,不可变;
数据同步
【登录】
1. 用户 ID:全局唯一,不可变,采用数据库同步+消息队列同步;
2. 用户手机号:全局唯一,很少变,采用数据库同步+消息队列同步;
3. SessionID:可重复生成,可丢失,不同步,用户重新登录生成。
【购买】
1.用户 ID:全局唯一,不可变,采用数据库同步+消息队列同步;
2.点券额度:强一致性,数据库同步,支持事务合并
3.订单 ID:全局唯一,不可重复,每次算法生成
4.商品品类 ID:全局唯一,不可重复,每次算法生成
异常处理
【登录】
1. 新注册的用户数据还没有同步到异地机房,如何购买?
提示停服,下次再来
2. 用户密码没有同步到异地机房,登录不了怎么办?
支持多种登录方式,例如手机验证码登录,绑定微信登录。
【购买道具等】
机房故障时,用户购买时点券不足怎么办?
或者支持线下其他方式购买激活码,通过激活码换;
先充值再购买;
他人代买
【购买皮肤、英雄】
机房故障时,用户在故障集群已成功购买,但是没同步到该机房?
如果已经扣费成功,可以提示用户已购买,商品在发货路上请等待...
或者让用户二次购买成功,之后恢复后,给予退帐
异地多活架构示意图
基本如下,会议服务器改为商品服务器
评论