架构实战营模块七 作业
解答:
一. 王者荣耀商城是一个虚拟物品商城,有以下几个特点:
没有物流系统。
安全认证非常重要:所有产品以电子形式保存,账号就是也就是产品丢失。
因为产品可复制,所以无法实现退货。
用户使用微信或 QQ 账号登陆,在商城对应一个 roleid,使用获取自己的微信钱包或 QQ 钱包数据进行充值点劵,再在商城里用点劵支付。
游戏的英雄和皮肤是全局唯一的,用户只能买一个。在数据同步的时候,这部分数据和 roleid 数据一样是全服数据,由全局产生。为保障唯一性,写发生在唯一的 zone,并单向同步到其它 zone。
鲜花、改名卡是 session 或局部数据,修改发生在各个 zone 内,交叉同步到其它 zone。
二. 三原则:
核心业务约束: 登陆和支付是核心业务,在数据同步模式上体现登陆和支付的业务特点
最终一致性:异地多活遵循 CAP 理论的 AP,可用性优先保障,一致性表现在:容忍一定时间的不一致条件下,达成最终的一致性。
保证绝大部分用户:容忍少数用户的异常。对于绝大多数的用户,归属地路由会把用户带到正常的 zone 进行处理。但少数极端情况,比如跨 zone 的边界用户,或者地域数据错误导致跨到错误的 zone,此时由异常处理模块来处理。
三. 数据分类和数据同步
全局数据:主从同步,写入操作指引到 master zone 的 master DB,下发到其它 zone,保证唯一性。游戏的英雄和皮肤是全局唯一的,用户只能买一个。在数据同步的时候,这部分数据和 roleid 数据一样是全服数据,由全局产生,并在各个 zone 内部同步。
局部数据:主主同步,允许各个 zone 产生购买行为,并同步到其它 zone。鲜花、改名卡是 session 或局部数据。
四.异常处理
微信和 QQ 挂了:
登陆:此时王者荣耀游戏也不能登陆,商城交易可以暂停,等恢复再登陆
支付:此时王者荣耀游戏也不能登陆,商城交易可以暂停,等恢复再支付
roleid 等全局数据没有在各个 zone 之间及时同步:仅对少数分区错误的
登陆:等同步延迟消失后再登陆
支付:等同步延迟消失后再支付
购买英雄、皮肤等全局性质的道具:由于每个用户只能购买一个,所以写入只发生在一个主 zone 的 master DB;
购买鲜花改名卡之类的局部性道具:主主同步,各个 zone 购买的数据经同步后合并保存在所有的 zone DB。
五.异地多活架构示意图
版权声明: 本文为 InfoQ 作者【库尔斯】的原创文章。
原文链接:【http://xie.infoq.cn/article/801ac853f6645dc47c944f2b6】。文章转载请联系作者。
评论