架构实战营模块七作业
王者荣耀商城异地多活架构设计
业务功能说明
在商城里面,可以是用金币、砖石和点券这些虚拟货币购买商品
虚拟货币获得途径包括:游戏、商家赠送以及现金充值,主要来源是现金充值
充值通过微信或者 QQ 钱包
商品为虚拟商品,包括英雄、皮肤、鲜花、改名卡、经验卡、回城特效等道具
英雄和皮肤每个玩家账号只能买一个,其他道具内商品可以多个
王者荣耀商城这种虚拟物品商城,与淘宝这类实体电商有以下区别:
虚拟商品没有库存的概念
虚拟商品不需要物流发货,购买就获得,也没有退货。
架构设计
业务分级
商城作为单独的业务,无须再分级
数据分类
商城虚拟商品(英雄、皮肤、道具)的数据商品上架后很少修改(英雄上架就一直存在,皮肤上架后大部分一直存在,另一部分有期限)。商品数据不需要做数据同步。
在商城进行微信或者 QQ 钱包进行充值时,有充值交易 ID,全局唯一,不可修改。
玩家充值虚拟货币余额,随着充值和购买虚拟商品操作会进行修改,且具有强一致性,不可丢失。
购买商品交易 ID,每次新建,全局唯一,不会修改。
玩家已购买的商品数据,数据只有新增,没有修改,只需要最终一致性就可以,不可丢失。这里英雄、皮肤和道具要分开说明:
英雄和皮肤:每个账号只能购买一次。
道具:可以重复购买。
数据同步
玩家的账号 RoleID 与区服有对应关系,玩家的虚拟货币余额、购买商品数据也跟随 RoleID 保存在对应的区服。
充值交易 ID,每次新建,全局唯一,用算法生成,数据库同步。
虚拟货币余额要保持强一致性,采用数据库同步的方式。
购买商品交易 ID,每次新建,全局唯一,不会修改,算法生成,数据库同步。
已购买商品数据通过数据库进行同步。
异常处理
商城不能进入或者无法购买商品?
挂公告:系统维护
购买英雄或皮肤这种一次性商品,没有同步到异地机房;机房挂了转登到异地机房,发现还没购买,重复购买了,怎么办?
数据恢复同步后,出异常数据给营运人员,确认后人工或系统自动退回已花费的虚拟货币
花费了一定虚拟货币购买商品,没有同步到异地机房;机房挂了转登到异地机房,余额还没扣减,再次购买商品,导致实际购买商品数量超过余额,怎么办?
允许余额透支。待数据恢复同步后,显示余额为透支状态,可以提示玩家尽快充值,透支的商品设置暂无法使用。
异地多活服务器设计
区服服务器按地区分机房部署。
不同机房数据互为主备。
充值 ID、交易 ID 全量同步,玩家购买商品数据按照区服进行同步。
评论