首页 > 数据库 > 数据库开发技术 > 异地多活架构实战:王者荣耀、视频会议案例
王者荣耀游业务背景
【业务功能】
1. 使用微信或者 QQ 账号登录游戏;
2. 对战:例如匹配、排位、巅峰赛;
3. 商城:购买英雄、皮肤、道具等;
4. 活动:领取各种奖励和道具;
5. 社区:各种攻略,视频等。
【关键业务约束】
1. 登录用户才能对战;
2. 用户属于不同的区服,例如 Android 平台微信22区“刺客信条”,同一微信ID 可以加入多个区服,俗称“大号”、“小号”;
3. 不同区服用户可以一起对战。
设计步骤1 - 业务分级
如下业务中,异地多活应该保证哪个或者哪几个核心业务?
注册、登录、对战、商城、社区、活动。
【答案】
登录、对战。
设计步骤2 - 数据分类
【登录】
1. 依赖 QQ 和微信账号授权登录,本身无需登录信息;
2. 微信和 QQ 授权登录会返回给王者荣耀全局唯一 RoleID;
3. 王者荣耀只需要记录 RoleID 对应的区服信息,区服数据只会新增不会修改。
【加入对战】
RoleID:登录后就不会变了;
对战 ID:每次新建,全局唯一,不会修改;
对战数据:和对战 ID 绑定,只会新建不会修改,例如对战过程、对战结果等。
设计步骤3 - 数据同步
【登录】
RoleID 和区服对应关系,只会新建不会修改,数据库同步即可。
【加入对战】
1. RoleID:同登录;
2. 对战 ID:每次新建,全局唯一,不会修改,用算法生成,数据库同步即可;
3. 对战数据:和对战 ID 绑定,不会修改,数据库同步即可。
设计步骤4 - 异常处理
【登录】
1. 微信和 QQ 挂了怎么办?
直接挂公告:系统停服维护。
2. 玩家在某个区服开了小号,没同步到异地机房,玩不了怎么办?
等系统恢复就可以玩了。
【加入对战】
1. 用户对战过程中系统挂掉怎么办?
用户重新对战即可,原有对战数据作废。
2. 用户对战数据未及时同步到异地机房,用户看不到对战结果怎么办?
等恢复了再看。
异地多活架构示意图

视频会议业务背景
【部署架构】
某个视频会议系统,用户按照地理位置分为南方区和北方区用户,分别对应深圳机房和天津机房。
【业务功能】
注册、登录、发起会议、加入会议、充值、创建群、用户资料管理。
【关键业务约束】
1. 登录用户才能参加会议;
2. 充值用户才能发起会议;
3. 余额不够不能发起会议。
设计步骤1 - 业务分级
如下业务中,异地多活应该保证哪个或者哪几个核心业务?
注册、登录、发起会议、加入会议、充值、创建群、用户资料管理。
【答案】
登录、发起会议、加入会议。
设计步骤2 - 数据处理
【登录】
1. 用户 ID:全局唯一,不可变;
2. 用户手机号:全局唯一,很少变;
3. Session ID:可重复生成,可丢失;
4. 密码:可丢失。
【发起会议】
1. 用户 ID:全局唯一,不可变;
2. 会议 ID:全局唯一,不可重复,每次算法生成;
3. 用户余额:全局强一致性一致性。
【加入会议】
1. 用户 ID:全局唯一,不可变;
2. 会议 ID:全局唯一,不可重复,每次算法生成。
设计步骤3 - 数据同步
【登录】
1. 用户 ID:全局唯一,不可变,采用数据库同步 + 消息队列同步;
2. 用户手机号:全局唯一,很少变,采用数据库同步 + 消息队列同步;
3. Session ID:可重复生成,可丢失,不同步,用户重新登录生成。
【发起会议】
1. 用户 ID:全局唯一,不可变 ,登录场景已经包含用户 ID 的同步设计;
2. 用户余额:全局一致性,采用数据库同步余额,充值只能在归属地充值;
3. 会议 ID:全局唯一,不可重复,每次新增 ,不同步,每次创建的时候用算法生成。
【加入会议】
1. 用户 ID:全局唯一,不可变 ,登录场景已经包含用户 ID 的同步设计;
2. 会议 ID:全局唯一,不可重复,每次新增,不同步,每次创建的时候用算法生成。
设计步骤4 - 异常处理
【登录】
1. 新注册的用户数据还没有同步到异地机房 ,如何参加会议?
第一种方式是直接不允许参加,用户体验不好;
第二种方式是不登录也可以参加会议,由发起者生成邀请码/会议
码/私密链接等方式邀请加入。
2. 用户密码没有同步到异地机房,登录不了怎么办?
支持多种登录方式,例如手机验证码登录,绑定微信登录。
3. 新用户注册不了,此时有关键会议怎么办?
不做处理,用其它方式加入会议。
【发起会议】
1. 用户在深圳机房开会的时候深圳机房挂了怎么办?
用户重新发起会议即可。
2. 用户异地机房发起会议的时候余额不够,无法发起会议怎么办?
业务上放松一部分约束,允许一定额度的欠费。
视频会议异地多活架构示意图

原文作者:二进制跳动;如有侵权,请联系管理员删除。