王者荣耀商城异地多活架构设计
1. 业务分级
1.1 业务数据
2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。
因为玩游戏的时候,需要使用英雄或者皮肤,假设日活用户的 5%通过商城购买英雄或者皮肤,那么商城的日活用户量约为 500 万。
1.2 业务功能
登录,使用微信或者 QQ 账号登录游戏;
浏览物品:浏览商城中可供购买的物品,并查看物品的详细信息或属性;
交易:购买商城中的物品;
充值:使用微信钱包或 QQ 钱包充值点券,以便在商城中购买物品;
查看历史记录:查看交易或者充值的历史记录。
物品发布:商城管理员为商城中添加新的物品,或者修改物品的库存。
1.3 业务特点
由于商城中为虚拟物品,所以不用考虑物流功能。
购买物品时,必须先充值点券,然后才可以使用点券余额发起交易。
商城中相同的英雄和皮肤,对于同一个用户 ID,只能购买 1 次,即相同的英雄和皮肤对于一个用户来说库存为 1,而其他物品(鲜花、改名卡等)则库存数量则为无限。也就是说商城中部分物品需要根据用户购买情况严格限制数量,部分物品则没有数量限制。
1.4 关键业务
因为商城的核心业务是物品交易,所以围绕交易,而必须进行的业务功能:登录、充值也同样是关键业务,需要实现异地多活,具体如下:
物品交易是商城的核心业务。
用户登录后才能进行充值、交易操作。
如果交易时,余额不足,那么必须进行充值。
2. 数据分级
2.1 登录
依赖 QQ 和微信账号授权登录,本身无需登录信息;
微信和 QQ 授权登录会返回给上商城全局唯一 RoleID;
商城只需要记录 RoleID ,RoleID 只会新增不会修改。
RoleID 对应的用户信息(英雄、皮肤、等级等)保存在不同的区服服务器中,需要在多个中心保持一致,并且不可丢失。
2.2 交易
物品,新物品的发布或属性的修改,对于交易来说并不是特别重要,故物品本身数据的同步并不是最重要的。每个物品,采用全局唯一 ID 来标识,可以新增或者修改,需要在中心间进行同步。
库存,英雄、皮肤等物品的库存数量取决于当前用户是否已经购买,如已购买则为 0,如未购买则为 1;其他物品的库存数量则没有限制,故不需要在中心间进行同步。
点券余额,点券余额用来对交易进行支付,由于每次交易都要修改,同用户信息一起保存在不同的区服服务器中,需要在多个中心保持一致,并且不可丢失。
订单信息,在交易的过程中,需要记录订单信息,并使用全局唯一 ID 来标识一笔订单,需要在中心间进行同步,以便后续查询。
2.3 充值
点券余额,同交易中的点券余额。
充值信息,在充值的过程中,需要记录充值信息,并使用全局唯一 ID 来标识一笔充值信息,需要在中心间进行同步,以便后续查询。
3. 数据同步
3.1 登录
用户登录信息,只新增不修改,可以重新登录,故不需要同步。
用户信息,按照区服进行同步,一个中心为主,另一个中心为备,采用数据库同步方式同步。
3.2 交易
物品,新物品的发布或属性的修改,全局唯一,可以新增也可以修改,保持最终一致性即可,采用数据库同步+消息队列同步方式。
库存,物品的库存数量取决于用户信息,故不需要在中心间进行同步。
点券余额,点券余额主要为修改,需保持强一致性,且不可丢失,采用数据库同步方式。
订单信息,全局唯一,只会新增不会修改,采用数据库同步方式。
3.3 充值
点券余额,同交易中的点券余额。
充值信息,全局唯一,只会新增不会修改,采用数据库同步方式。
4. 异常处理
4.1 登录
商城的一个中心故障时,可以让用户在正常中心重新登录后购买物品。
微信和 QQ 挂了,无法登录,只能发公告,请用户在微信或 QQ 恢复后再登录。
用户信息未同步,则提示用户”系统维护中,用户信息可能不完整“。
用户信息部分丢失,可以进行人工修正,或者给用户进行事后补偿。
4.2 交易
物品,对于有库存数量限制的英雄或皮肤等,需要等用户信息确认已经完成同步后,才可以开放购买,否则请用户稍后再购买,其他物品没有购买限制。
点券余额,由于点券余额可能未同步,那么在未同步的时间段中,只能请用户先充值,然后再购买物品,只要购买物品的金额小于充值金额即可,等恢复后,再进行交易的合并处理。如果确实因为系统问题,导致余额不一致,那么需要人工修正,或者给用户进行事后补偿。
订单信息,如果未同步,可以请用户在数据同步完毕后再查看。如果发生订单信息丢失,则可进行人工修正,或者给用户进行解释说明。
4.3 充值
点券余额,同交易中的点券余额。
充值信息,如果未同步,可以请用户在数据同步完毕后再查看。如果发生订单信息丢失,则可进行人工修正,或者给用户进行解释说明。
5. 异地多活示意图
新物品的发布或属性的修改,全局唯一,在一个中心维护,然后采用数据库同步+消息队列同步方式同步到另外一个中心。
评论