写点什么

王者荣耀商城异地多活架构设计

作者:swallowluo
  • 2022 年 2 月 08 日
  • 本文字数:1852 字

    阅读完需:约 6 分钟

1. 业务分级

1.1 业务数据

2020.11 月公布数据,全年日均活跃 1 亿,注册玩家数 6 亿,最高同时在线 100 万。

因为玩游戏的时候,需要使用英雄或者皮肤,假设日活用户的 5%通过商城购买英雄或者皮肤,那么商城的日活用户量约为 500 万。

1.2 业务功能

  1. 登录,使用微信或者 QQ 账号登录游戏;

  2. 浏览物品:浏览商城中可供购买的物品,并查看物品的详细信息或属性;

  3. 交易:购买商城中的物品;

  4. 充值:使用微信钱包或 QQ 钱包充值点券,以便在商城中购买物品;

  5. 查看历史记录:查看交易或者充值的历史记录。

  6. 物品发布:商城管理员为商城中添加新的物品,或者修改物品的库存。

1.3 业务特点

  1. 由于商城中为虚拟物品,所以不用考虑物流功能。

  2. 购买物品时,必须先充值点券,然后才可以使用点券余额发起交易。

  3. 商城中相同的英雄和皮肤,对于同一个用户 ID,只能购买 1 次,即相同的英雄和皮肤对于一个用户来说库存为 1,而其他物品(鲜花、改名卡等)则库存数量则为无限。也就是说商城中部分物品需要根据用户购买情况严格限制数量,部分物品则没有数量限制。

1.4 关键业务

因为商城的核心业务是物品交易,所以围绕交易,而必须进行的业务功能:登录、充值也同样是关键业务,需要实现异地多活,具体如下:

  1. 物品交易是商城的核心业务。

  2. 用户登录后才能进行充值、交易操作。

  3. 如果交易时,余额不足,那么必须进行充值。

2. 数据分级

2.1 登录

  1. 依赖 QQ 和微信账号授权登录,本身无需登录信息;

  2. 微信和 QQ 授权登录会返回给上商城全局唯一 RoleID;

  3. 商城只需要记录 RoleID ,RoleID 只会新增不会修改。

  4. RoleID 对应的用户信息(英雄、皮肤、等级等)保存在不同的区服服务器中,需要在多个中心保持一致,并且不可丢失。

2.2 交易

  1. 物品,新物品的发布或属性的修改,对于交易来说并不是特别重要,故物品本身数据的同步并不是最重要的。每个物品,采用全局唯一 ID 来标识,可以新增或者修改,需要在中心间进行同步。

  2. 库存,英雄、皮肤等物品的库存数量取决于当前用户是否已经购买,如已购买则为 0,如未购买则为 1;其他物品的库存数量则没有限制,故不需要在中心间进行同步。

  3. 点券余额,点券余额用来对交易进行支付,由于每次交易都要修改,同用户信息一起保存在不同的区服服务器中,需要在多个中心保持一致,并且不可丢失。

  4. 订单信息,在交易的过程中,需要记录订单信息,并使用全局唯一 ID 来标识一笔订单,需要在中心间进行同步,以便后续查询。

2.3 充值

  1. 点券余额,同交易中的点券余额。

  2. 充值信息,在充值的过程中,需要记录充值信息,并使用全局唯一 ID 来标识一笔充值信息,需要在中心间进行同步,以便后续查询。

3. 数据同步

3.1 登录

  1. 用户登录信息,只新增不修改,可以重新登录,故不需要同步。

    用户信息,按照区服进行同步,一个中心为主,另一个中心为备,采用数据库同步方式同步。

3.2 交易

  1. 物品,新物品的发布或属性的修改,全局唯一,可以新增也可以修改,保持最终一致性即可,采用数据库同步+消息队列同步方式。

  2. 库存,物品的库存数量取决于用户信息,故不需要在中心间进行同步。

  3. 点券余额,点券余额主要为修改,需保持强一致性,且不可丢失,采用数据库同步方式。

  4. 订单信息,全局唯一,只会新增不会修改,采用数据库同步方式。

3.3 充值

  1. 点券余额,同交易中的点券余额。

  2. 充值信息,全局唯一,只会新增不会修改,采用数据库同步方式。

4. 异常处理

4.1 登录

  1. 商城的一个中心故障时,可以让用户在正常中心重新登录后购买物品。

    微信和 QQ 挂了,无法登录,只能发公告,请用户在微信或 QQ 恢复后再登录。

  2. 用户信息未同步,则提示用户”系统维护中,用户信息可能不完整“。

  3. 用户信息部分丢失,可以进行人工修正,或者给用户进行事后补偿。

4.2 交易

  1. 物品,对于有库存数量限制的英雄或皮肤等,需要等用户信息确认已经完成同步后,才可以开放购买,否则请用户稍后再购买,其他物品没有购买限制。

  2. 点券余额,由于点券余额可能未同步,那么在未同步的时间段中,只能请用户先充值,然后再购买物品,只要购买物品的金额小于充值金额即可,等恢复后,再进行交易的合并处理。如果确实因为系统问题,导致余额不一致,那么需要人工修正,或者给用户进行事后补偿。

  3. 订单信息,如果未同步,可以请用户在数据同步完毕后再查看。如果发生订单信息丢失,则可进行人工修正,或者给用户进行解释说明。

4.3 充值

  1. 点券余额,同交易中的点券余额。

  2. 充值信息,如果未同步,可以请用户在数据同步完毕后再查看。如果发生订单信息丢失,则可进行人工修正,或者给用户进行解释说明。

5. 异地多活示意图


新物品的发布或属性的修改,全局唯一,在一个中心维护,然后采用数据库同步+消息队列同步方式同步到另外一个中心。

用户头像

swallowluo

关注

还未添加个人签名 2020.09.11 加入

还未添加个人简介

评论

发布
暂无评论
王者荣耀商城异地多活架构设计