写点什么

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

作者:哈喽
  • 2022 年 5 月 26 日
  • 本文字数:855 字

    阅读完需:约 3 分钟

一、业务分级

已经限定了要对商城功能做异地多活,因此这一步可以忽略。

二、数据分类

1、RoleID:登录后就不会变了

2、商品 ID:每次上新品,新创建商品,商品 ID 全局唯一,不会修改

3、商品库存:虚拟物品,不存在库存限制,不需要这个数据

4、订单 ID:每次购买,生成订单 ID,全局唯一,不会修改

5、点券余额:强一致

6、拥有的英雄和皮肤:强一致

三、数据同步

1、RoleID:RoleID 和区服对应关系,只会新建不会修改,数据库同步即可

2、商品 ID:每次上新品,新创建商品,商品 ID 全局唯一,不会修改,使用算法生成,数据库同步即可

3、订单 ID:每次购买,生成订单 ID,全局唯一,不会修改,使用算法生成,数据库同步即可

4、点券余额:数据要求强一致性,不可丢失,为了保证异常情况下可以购买,可以采用临时余额表的方式,先要求充值再消费,等故障恢复后同步最新余额,使用数据库+消息队列同步数据。

5、拥有的英雄和皮肤:数据要求强一致性,不可丢失,可以采取判断订单是否不重复但是拥有相同的英雄或皮肤,做回退处理,使用数据库+消息队列同步数据。

四、异常处理

1、当购买过程中系统挂掉怎么办?

一般支付宝和微信都有消息回查接口,记录号中间状态,中间状态和订单一起生成,保证事务,如果出现故障,恢复后要对中间状态数据做结果回查。

2、购买完成后订单数据没有同步,看不到已拥有的英雄怎么办?

等恢复了再看

3、购买完成后订单数据没有同步,看不到已拥有的英雄,重复购买怎么办?

可以采用临时记录表,记录在系统故障期间对于只能购买一次商品的记录,等系统恢复后,通过消息队列的方式同步到其他 IDC,其他 IDC 判断是否重复,不重复就入库,如果重复,可以选以第一次为准还是以最后一次为准,删除多余订单,增加对应余额

4、购买完成后或者充值完成后余额没有同步,余额数据不确定怎么办?

为了保证余额正确和玩家正常购买需求,可以使用临时表,记录系统故障期间的余额变动,消费使用的点券都是来自于临时表,待系统恢复后,通过消息队列将数据同步到故障恢复的 IDC,从故障中恢复的 IDC 将余额数据汇总后,通过数据库同步数据。

五、异地多活架构示意图


用户头像

哈喽

关注

还未添加个人签名 2018.11.14 加入

还未添加个人简介

评论

发布
暂无评论
王者荣耀商城异地多活架构设计_「架构实战营」_哈喽_InfoQ写作社区