王者荣耀商城异地多活架构设计
业务数据
淘手游平台公布了 2017 年 6 月的平台交易数据,这是淘手游继 3 月后,连续第四个月公布其交易数据。6 月份,平台总成交量达到 18 万单,月流水破亿元。
即一天产生 6000 单,假设峰值出现在晚上 7-9 的两个小时,tps 即 6000/(3600*2)≈ 1,不大存在高性能场景,更多考虑高可用的异地多活架构。
业务功能
1)商品类目
2)商品
3)点券充值
4)点券支付
5)订单
6)出货
关键业务约束
1)只有微信钱包/QQ 钱包充值点券后,才能在商场里面用点券支付
2)有些道具只能购买一次,有些商品可重复购买
架构分析
【业务分级】
考虑实现成本,只保证核心业务的异地多活,
选择了:点券充值、点券支付、出货
【数据分类】
1)点券充值
调出微信/QQ 收银台,充完值回调玩家点券余额充值业务,并且增加充值记录,其中,余额必须保证强一致性,充值记录只需最终一致性即可
2)点券支付
点券支付,完成点券余额扣减操作,同时完成扣减记录的审计日志操作,基本同点券充值一样
3)出货
当完成订成下单操作,完成点券扣减后,道具必须出现在玩家的道具列表中,玩家道具记录是只增不减的数据,道具 ID 本身也具有全局唯一性
【数据同步】
1)点券充值/点券支付
玩家 RoleID 全局唯一,且不会变化,登录充值/支付,只需增减玩家对应的点券余额,以及增减余额的审计记录,使用数据库同步
2)下单完成后,出货,道具下放给玩家,出现在玩家的道具列表里面,只增不减,对于可多次购买的道具使用数据库进行同步即可,对于只允许购买一次的道具使用消息队列同步
【异常处理】
1)故障切换后,未能看到刚充值的点券余额
当 A 机房挂掉,切换到 B 机房后,可先在 B 机房再次充值,等到 A 机房恢复后,再同步余额
2)故障切换后,未能找到道具
对于可多次购买的道具,可再次购买,最后再同步
5、架构设计示意图
评论