架构实战营模块七作业
王者荣耀商城异地多活架构设计
王者荣耀的商城是虚拟物品商城,和淘宝这种实物电商有两个很大的区别:
1.虚拟物品没有库存限制,但有些商品比如英雄、皮肤一个用户只能买一个,需要判断用户是否买过。
2.虚拟物品购买后要立即到账的,没有物流过程,没有缓冲过程。
额外想到的
3.商城是在游戏软件中的,浏览商品需要登录,但是可以有第三方软件提供商品目录。
4.商品是游戏公司自己维护的,电商平台的商品是别的商家维护。
业务分级
根据访问量、核心场景、收入几个方面综合考虑后的分级:
登录>商品浏览>购买下单>充值>注册
因为用户需要先登录才能访问商城,用户需要先浏览商品才能完成下单,而充值和购买过程能直接影响收入,但是充值的频率是小于等于购买下单,注册的量是最少的。
数据分类
【登录】
1. 依赖 QQ 和微信账号授权登录,本身无需登录信息;
2. 微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
【商品】
1.商品 ID,全局唯一,不会修改,公司自己维护商品数据,可重复,可丢失,可恢复。
【订单】
1.订单 ID,全局唯一,不会修改
【用户账户数据数据】
1.已有的英雄、皮肤,可以使用 HashSet 保存已有的英雄和皮肤,全局强一致性。
2.余额数据,全局强一致性。
数据同步
【登录】
RoleID ,只会新建不会修改,数据库同步。
【商品】
存储系统同步即可。
【订单】
订单数据,全局唯一,不会修改,不可丢失,数据库同步。
【用户账户数据数据】
全局强一致性,数据库同步。
异常处理
【登录】
1. 微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护
【商品】
1.浏览商品过程中系统挂掉怎么办?
直接切换流量到备用机房,并不影响浏览商品。
【订单】
1.下单过程中,系统挂掉怎么办?
用户重新下单。
2.下订单后未及时同步到异地机房,用户看不到订单怎么办?
保证用户账户数据是一致的,历史订单暂时看不到没关系,可以给予提示,让用户等系统恢复了再看。
【用户账户数据】
1.用户账户数据未及时同步到异地机房,用户看到的英雄、皮肤、余额数据和印象里不一致怎么办?
人工订正数据,达到最终一致性。
2.修复数据之后,部分用户的账户数据丢失了,比如修复时购买了皮肤或者充值,怎么办?
送英雄、皮肤补偿。
异地多活架构示意图
版权声明: 本文为 InfoQ 作者【老猎人】的原创文章。
原文链接:【http://xie.infoq.cn/article/1ec6b6c7d745939ffac665377】。文章转载请联系作者。
评论