王者荣耀商城异地多活架构设计
1 王者荣耀业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
王者荣耀的商城是虚拟物品商城;不存在物流和实物,只是虚拟的数字,即不存在库存
【业务功能】
1.用户先调用微信钱包或者 QQ 钱包充值点券,再在商城里面用点券支付;
2.商城:购买英雄、皮肤、道具等;
【业务约束】
1 王者荣耀的商城是虚拟物品商城;
2.用户买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
3.用户买鲜花、改名卡之类的道具可以买多个;
设计步骤 1 -业务分级
主要业务有登录(qq 或微信,得到 id),充值、支付(需要服务间数据同步)
次要业务英雄、皮肤、道具,修改量非常小,几乎可以忽略,本地数据几乎不更新
设计步骤 2 -数据分类
【登录】
1.依赖 QQ 和微信账号授权登录,本身无需登录信息;
2.微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
3.王者荣耀只需要记录 RoleID 对应的区服信息,
【充值】
增加账号的余额,生成充值流水
【购买】
更新与 roleid 相关的属性,
【点券支付】
减少余额,生成订单流水
设计步骤 3 -数据同步
【登录】
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
【充值】
余额(主主同步,一致性高),充值流水(全量同步,一致性弱),数据库同步
【购买】
roleid 相关的属性,数据库同步(主主同步,一致性高)
【点券支付】
余额(主主同步,一致性高),订单流水(全量同步,一致性弱),数据库同步
设计步骤 4 -异常处理
【登录】
1.微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护。
2.玩家在某个区服开了小号,没同步到异地机房,玩不了怎么办?
等系统恢复就可以玩了。
【充值】
异常,返回用户余额到银行卡,与银行交易有关
【购买】
异常,等系统恢复
【点券支付】
异常,等系统恢复
王者荣耀异地多活架构示意图
评论