ITPub博客

首页 > 数据库 > 数据库开发技术 > 异地多活架构实战:王者荣耀、视频会议案例

异地多活架构实战:王者荣耀、视频会议案例

原创 数据库开发技术 作者:greencoatman 时间:2023-11-29 07:39:00 0 删除 编辑

王者荣耀游业务背景

【业务功能】

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. 用户异地机房发起会议的时候余额不够,无法发起会议怎么办?

业务上放松一部分约束,允许一定额度的欠费。

视频会议异地多活架构示意图

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

请登录后发表评论 登录
全部评论

注册时间:2022-07-08

  • 博文量
    312
  • 访问量
    141137