王者荣耀商城异地多活架构
业务分级
业务特点
虚拟商品,没有库存限制;
虚拟商品没有实物,可以算近乎 0 成本,即使出现故障导致多发放了也并不会真正产生损失;
履约售后简单,兑换商品后基本不能修改
业务场景
王者荣耀商城主要有如下场景:用户登录、商品上下架、用户充值、用户兑换商品
商城的主要业务就是用户充值并购买,这是主要收入来源,同时只有登录用户才能购买;
兑换商品时必须要获得商品信息,所以商品模块也是核心模块,要做异地多活;
所以综合来看核心场景如下:用户登录、用户充值、用户兑换商品
数据分类
【用户登录】
同对战案例,此处不赘述了
【用户充值】
用户账户 ID:可以同用户 ID,登录后就不会变;
账户点券余额数据:全局强一致性,不可丢失
充值记录 ID:每次新建,全局唯一,不会修改;
充值记录:最终一致、不会修改;
【用户兑换商品】
兑换记录 ID:每次新建,全局唯一,不会修改;
兑换记录:最终一致、不会修改;
商品数据:最终一致性;可以丢失;可恢复,运营重发
数据同步
【用户登录】
同对战案例,此处不赘述了
【用户充值】
用户账户 ID:全局唯一,不可变,登录场景已包含;
账户余额:全局一致性,数据库同步;
充值记录 ID:全局唯一,不可重复,数据库同步+消息队列同步;
充值记录:不可修改,跟随充值记录 ID,数据库同步+消息队列同步;
【用户兑换商品】
兑换记录 ID:全局唯一,不可重复,数据库同步+消息队列同步
兑换记录:不可修改,跟随兑换记录 ID,数据库同步+消息队列同步;
商品数据:可以丢失,可以恢复,商品 ID 全局唯一,数据库同步+消息队列;
异常处理
【用户登录】
同对战分析,此处不赘述。
【用户充值】
微信支付挂了:只能等待微信恢复;
用户在支付的时候某机房挂了:重新发起支付即可,会自动切换到可用机房
充值后余额同步延迟较高:用户余额不足无法购买,需要等待一段时间才能购买,不影响对战;如果用户投诉可以适当补偿
【用户兑换商品】
兑换记录同步延迟较高,导致英雄和皮肤多买了:可以等系统恢复后进行退款、撤销,根据情况进行适当点券补偿
兑换过程中某机房挂了:重启发起兑换,会自动切换到可用机房
新发布商品系统同步延迟较高:短暂看不到新发布商品,影响不大;
某机房兑换后挂了,但是余额扣减数据未同步到另外机房:可能导致用户切换到另外机房发现余额未变化,继续购买导致多发放,这种情况如一开始分析,因虚拟商品几乎 0 成本,偶尔出现问题也不会产生真正损失,可以不用回收,给用户保留
异地多活架构图
版权声明: 本文为 InfoQ 作者【intelamd】的原创文章。
原文链接:【http://xie.infoq.cn/article/e52681ba88fc80f2800522bbb】。文章转载请联系作者。
评论