王者荣耀商城异地多活部署设计
业务背景
【业务数据】
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
异地多活架构设计
业务分级
涉及业务
登录:需要使用微信或 qq 登录后才能使用商城
支付:先调用微信钱包或者 QQ 钱包充值点券,然后在商城里面用点券支付;
商品:是虚拟物品商城
买英雄和皮肤的时候同样的英雄和皮肤只能买 1 个,不能重复购买;
用户买鲜花、改名卡之类的道具可以买多个;
核心业务
登录:因为所有服务均发生在登录后,故登录是最影响用户体验的。
充值点券:用户充值点卷后可随时购买,即使商品服务挂掉,用户也可以容忍等待商城服务恢复了再购买。
数据分类
登录
依赖 QQ 和微信账号授权登录,本身无需登录信息;
微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
支付
点券余额:关联 RoleID ,全局强一致。
支付订单 ID:每次新建,全局唯一,不会修改,与微信钱包或者 QQ 钱包的支付记录有绑定关系;
商品
商品信息:实现最终一致性即可,在下单时可单独对价格等敏感信息进行单独校验。
英雄和皮肤:由于每个用户只能购买一个,要求实现全局强一致性。
其他道具:不限制消费次数,实现最终一致性即可。
数据同步
登录
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
支付
点券余额:全局强一致性,采用数据库同步。
支付订单 ID:与微信钱包或者 QQ 钱包的支付记录有绑定关系,全局强一致性,采用数据库同步;
商品
商品信息:实现最终一致性即可,采用数据库同步 + 消息队列同步。
英雄和皮肤:实现全局强一致性,采用数据库同步。
其他道具:最终一致性,采用数据库 + 消息队列同步。
异常处理
登录
登录异常:依赖于 qq 和微信服务,发生异常时可通过公告通知用户,并进行事后补偿。
支付
点券充值异常:客服人工修正,视情况发送不同程度的补偿。
商品
购买商品异常:客服人工修正,视情况发送不同程度的补偿。
架构设计
版权声明: 本文为 InfoQ 作者【Geek_e8bfe4】的原创文章。
原文链接:【http://xie.infoq.cn/article/da1050a930565fdc37e9b8546】。未经作者许可,禁止转载。
评论