架构实战营 模块七 作业
业务功能
购买英雄、皮肤、道具等;
业务约束
登录用户才能购买
用户充值商城点券之后才能购买
点券余额不足不能购买
皮肤和道具都是虚拟商品,不考虑库存,物流情况
用户只能购买一个相同的皮肤或者英雄
用户可以购买多个道具
业务分级
商城中的核心业务:充值点券,购买皮肤,道具
皮肤和道具是虚拟商品,不需考虑库存,物流情况
相关问题:
充值成功或者购买道具/皮肤后,切换到异地机房,发现点券余额或者道具/皮肤没有同步
数据分类
RoleID:登录后就不会变了
点券余额:全局强一致性,不可丢失
英雄,皮肤:每个 RoleID 只有一个,全局强一致性,不可丢失
道具:每个 RoleID 可以购买多个,全局强一致性,不可丢失
充值记录:记录 id,每次新建,算法生成,全局唯一,只增加,不修改,不可丢失
购买记录:记录 id,每次新建,算法生成,只增加,不修改,不可丢失
数据同步
RoleID:同登录
点券余额:全局一致性,采用数据库同步
英雄、皮肤:全局一致性,和 RoleID 绑定,每一个区服务器数据库同步
道具:全局一致性,和 RoleID 绑定,采用数据库同步,每一个区服务器数据库同步
充值记录:记录 id,每次新建,全局唯一,只增加,不修改,采用数据库同步即可
购买记录:记录 id,每次新建,全局唯一,只增加,不修改,采用数据库同步即可
允许用户进行异地充值和购买,因为异常同步中断,当恢复后可以通过消息队列读取临时事务表,使用事务合并技巧,获取到最终一致的数据,最后通过数据库进行同步
异常处理
1、微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护。
2、点券充值无法支付成功怎么办?
提示:当前无法进行充值,等系统恢复之后在进行充值
3、点券充值后未及时同步到异地机房,道具,皮肤,英雄在异地机房无法正常购买?
可以等恢复后进行购买
4、服务器之间数据同步异常,导致同步中断?
可以采用事务合并的技巧,等服务恢复后处理用户的数据,期间如果用户购买了多个皮肤或者英雄,可以自动退回,同时返还用户点券,多购买的道具允许用户在一定时间内退单
评论