当前课程知识点:游戏程序设计 >  第十四章 《分布式系统设计 》 >  14.6 大系统小做(上) >  14.6 大系统小做(上)

返回《游戏程序设计》慕课在线视频课程列表

14.6 大系统小做(上)在线视频

下一节:14.7 大系统小做(下)

返回《游戏程序设计》慕课在线视频列表

14.6 大系统小做(上)课程教案、知识点、字幕

我这边的课程呢

就是分布式系统设计的第二部分

刚才前面的leeo老师

他讲到了就是分布式系统设计的一个

分布式系统本身的一个概念

然后再讲到了分布式系统中所使用到的

一些主要的一些技术的手段

然后呢

我这节课这边

主要是集中在

分布式系统本身如何进行设计

所以我们来一起

来看一下

然后我也会结合

我在实际开发中

所碰到的一些问题

跟大家去做一些分享

在开始之前

按照惯例

我先做个自我介绍吧

那个我是腾讯互动娱乐

天美J3工作室的

现在主要是负责CODM

在腾讯的从业中

我负责主要有做过两个比较大的一个项目

一个就是逆战

一个就是我们现在做的这个使命召唤手游

逆战是FPS的端游

使命召唤呢

它是手游

在今年国庆在全球上线了啊

当然

除了中国区

因为使命召唤目前

是国内还没有发行

但全球发行的话

就是整个成绩还不错

我这边有啊

给大家展示了一个数据

对大家如果有兴趣的话可以去尝试一下

就是说它是一个全球同服的游戏

也就是说

全球的玩家是在一起玩的

然后我们的最高的PCU

是达到了240万

然后DAU

我不知道大家知道不知道游戏中的

两个很重要的概念就是

PCU和DAU分别是指什么啊

这个非常重要

如果说是要

从事跟游戏相关的

这个行业的话

那么必定要知道的

PCU也就是指最高同时在线

而DAU就是

那个当日的活跃用户

对 所以说

对我们服务器考验最大的就是PCU

就看你同时能够支撑几百万的用户

之前的课leeo老师也说了

如果我们只设计一个给几十个人玩的

或者几千个人玩的

那么我们就不需要分布式系统了

因为这个游戏

它可能拿一台

稍微好一点的服务器就可以搞定了

但是如果我们要服务

几十万上百万的用户

然后DAU达到了千万级别的

那么我们就要考虑说这个游戏

如何能够承载这么大量的一个用户

那接下来我们来看一下

我们这一节课

都有哪些内容吧

这节课在里边呢

我要讲的主要是集中在上面的三个部分

一个大系统小做

还有呢

在分布式系统中

架构层面的技术支撑

以及在我们的分布式系统

它需要具备哪一些关键的能力

才能够让我们的这套系统

能够支撑这么大的一个量级的一个用户

我期望

就是说听完这节课以后

大家能对分布式系统

和我们普通的一些支撑

一些小型的系统之间

一些主要的区别在哪里

我就觉得

这堂课的目的就达到了

因为他里面涉及到内容很多

也不能说让大家一下子

就能够对这所有都有比较深的了解

好我们现在先来看一下啊

大系统小做吧

大系统小做里边我们会来看三个部分

首先呢

我们先来看一下经典的三层架构额

刚才的课程中

也给出了一个经典的三层架构是什么样子的

这个的

我这边在

给大家再重新的说明一遍

在我们的经典的服务器的三层架构中

它主要是分为接入层

逻辑层和数据层

所谓的接入层它主要是负责

业务的接入和连接的管理

就像我们刚才说了

我们的用户量是非常大的

像我们的CODM

它的量级在最高峰的时候达到240万

同时在线

然后呢

这么多的一个用户

你要保持它们连接

对他的连接进行管理

这套系统

这套的能力

必定不能跟后端的业务逻辑相融合在一起

对 因此我们就会有一套接入层

那么

为什么会有单独一套接入层

我们后面的话会具体来说明

另外一个就是逻辑层

逻辑层

说白了

它就是有业务逻辑在内

所有我们的游戏

包括

在座的因为有

很多都有在玩游戏吗

也很清楚的知道

我们游戏里面

一般来说可以分为两大部分

一个就是在游戏的核心玩法

比如说王者荣耀的话就是副本

可以开黑 对吧

然后呢

如果是核心玩法以外的

比如说各种的好友啊

聊天啊

商城

这些也都属于在业务逻辑以内

这一块的话我们全部都放在逻辑层来实现的

另外一个呢就有一个数据层

数据层呢

就是用来负责做数据存储的

一般的来说

在我们的数据存储方面

都是会采取数据库的

我想知道一下

有谁知道就是游戏

目前用来做数据存储的话

一般会采用什么样类型的一个数据库

一般来说

在数据库

我们是可以分成关系型数据库和

那个非关系型的数据库

对 关系型数据库的话

像MySQL啊 Oracle啊 微软的SqlServer之类的

然后非关系型数据就是啊

这几年兴起来的叫NoSql 对吧

那像在我们的游戏

在端游时代

我们一般是用的是关系型数据库

但是在我们现在手游

在腾讯内部

我们现在很多的项目所使用的都是

非关系型的也就是

在内部有一套叫做Tcaplus

这个大家以后

如果是有机会啊

就是接触到的话可以知道他使用的

是一套非关系型的

非关系型的数据库呢

它就特别适合去做在线的扩容之类的

这个就是一个整体的一个经典架构

那这样的一个经典架构

映射到我们具体的项目是一个什么样子的呢

下面

我以这个我们分区分服的这个架构

来举个例子吧

应该说是这个是最初的一种分区分服的形态

就是区与区之间的用户是完全隔离的

然后用户的数据在物理存储方面它也是隔离的

对那分区分服

比如说如果说有一个游戏

它是分区分服的

然后他说他的PCU可能会达到十多万

但是呢

我们可能就得要在问一问他啊

你到底分了多少个区

也许他每个区可能就几千人甚至一万人

那这样子的一个体量跟

所谓的全区全服啊

相对应的就是说

所有的用户数据

他们都是在一个

那个物理分区里面

并且他们的用户是可以进行交互的

他所给系统带来的挑战是完全不一样的

然后对刚才有说到一个分区分服

是在物理上是隔离的

其实呢

腾讯有很多的游戏

它也是采用了分区分服

但是呢

他们后面采用了一个

属于改进的

就是逻辑上它是分区分服

但是物理上的

他会在数据层面上

它会去做统一存储

当然他在每个区上

他很有可能还是物理隔离的

就说区与区之间

他的玩家之间的数据

可能还是不互通的

或者说玩家的数据

他仅仅在核心对战的时候

可能会去做跨服通信

但是关系链之类的不进行互通

包括经济系统之类的

他可能都不会有去做互通

就是这个是后来的一个全区全服

为了应对他全区全服本身所带来的一些管理上

以及那个运维上的一些缺陷

所做了一些优化啊

那我们先来看一下

对一个分区分服的一个游戏

在我们腾讯比较早期的时候

或者说

目前大部分的一些游戏

他们都是一个什么样子的状况

这上面是他的一个整体的架构图

这个的话呢

映射到我们的

三层的经典架构里面大概是这样子了

也就是说这一边就是接入层

然后

DB这块就是数据层

中间这一块整体就是逻辑层

它有个什么样子的特点呢

首先呢

接入层它会通过TGW和Tconnd来进行连接

然后数据逻辑层

这边会有一个大的进程

是一个叫world

也就是游戏里面的一个世界的进程

它来负责了大部分的业务逻辑

然后DB会有一个专门的一个DBproxy

我们来看一下这块

因为对于没有接触过腾讯游戏的同学来说呢

可能不太清楚

这里面的有一些名词的概念

我这边做个简单的介绍

然后让大家有一点概念

首先TGW这个是腾讯的一个网关

它最初出现的时候是为了做IP收敛

大家知道那个IPv4的IP地址是

资源很有限的吧

那我们所分配到的

地址数量也是不够

但是腾讯的业务又这么多

所以说

如果所有的业务它全部都是拿到了真实的IP的话

那就会导致很快的这个IP就

资源就枯竭了

所以说我们做了一个

TGW的网关进行做这个IP的收敛

但同时它也还带来一个好处

就是它上面可以做负载均衡

接入层的负载均衡

然后具体的我就不展开讲了

然后另外一个还有个Tconnd

Tconnd的话这个是用来干嘛的

这个是用来做连接的管理

也就是说我们很多的业务

他们要么采用TCP

要么采用UDP

那腾讯有这么多游戏

每一个人大家都去造一个轮子

都去写TCP和UDP的这个组件

那么

这种人类精力

以及运维

最后代码的稳定性这块都很成问题

所以说我们的在腾讯的互娱的

就是技术中心这边

他们出了一套组件就是叫Tconnd

来负责给提供所有的游戏

还提供了一个专门的组件

所以说大家可以认为

这个就是我们做连接管理的

接下来我们的目标主要是要关注到这一块

这块我们知道我们的业务本身除了游戏以外

它可能还会有跟

第三方会有很多的关联

所以这里进程

它会有跟第三方有关联

包括说比如说一些支付吧

还有第三方的一些关系链啊之类的

对游戏的内部

这里为什么会分的rank和mail呢

这两个主要是因为腾讯内

也是由于很多游戏的一个通用性

他们有开发了一些有关于排行啊

邮件啊

这样子的一些组件

所以说这个也认为是

跟游戏本身业务

从剥离出去的一套通用的组件

所以整体这样盘点下来以后就会发现

这个架构有一个特点

就是所有的游戏逻辑基本都在world里面

然后最多的就是呢

这边有一些场景

于是我们像一些副本

里面可能会因为副本特别多

它不会也只有一个进程

所以副本可能会单独

由那个游戏由这个world来进行管理

然后另外一个就是跟

DB相关联的这块

为了屏蔽我们的数据存储存取这一块

所以说会有一个叫DBproxy的

它用来做数据的屏蔽

所以整体这样看下来的话

我们来看一下

如果按照这样子的一个架构

我们来设计一个

全区全服的一个游戏

如果按这样子的架构

又会带来一个什么样子的问题呢

这个界面的话是我们的使命召唤

这个手游的大厅了

就在这个简单的大厅里面

大家可以想想他隐藏了多少的一个功能

如果按照分区分服里面

那么这个大厅的功能

就应该都放在这个world进程里面

我大概稍微就是列了一下

我发现

这个大厅里面包含了这么多的功能

邮件

好友 抽奖

聊天 商店

然后这上面还有这一系列

我就不念了

那这些如果全部放到一个进程里面

大家现在看

这是一个非常多么可怕的一件事情

为什么说很可怕呢

也就是说

所以我们这里说了一个叫做大系统小坐

要把这样的world进程

来进行拆分

在我们的那个分区分服的

游戏里面

他们还真的就把这么多系统

全部都塞到一个进程中去做了

当然也不是说不能做

但它就会有各种各样的问题

我不知道大家有没有考虑过这个问题

就是大家

如果没有考虑过

也可以现在想一想

就是说我们把这么多的系统

全部都搂在一个进程里面去实现

可能带来一些什么样的问题

大家可以想一想没有关系

畅所欲言也许你们提出来的

可能我这里都没有列出来

没有总结出来

有可能

对 互相影响

还有吗

就非常明显的一个就是互相影响

就是所有的就是

比如说像这样子就以我们的这个

CODM为例吧

我们这个团队

现在在做这个手游的一个团队

我们现在有一百多号人对

这仅包括我们的开发团队

然后我们的

我们的后台有二十几号人

然后我们的前台有四十多号人

那所有的这些人都在一个进程里面去写代码

这是一件非常可怕的事情

游戏程序设计课程列表:

第一章 《游戏开发导论》

-1. 1什么是游戏(上)

--1.1 什么是游戏(上)

--选择题

-1.2 什么是游戏(下)

--1.2 什么是游戏(下)

--选择题

-1.3 游戏是如何开发出来的

--1.3 游戏是如何开发出来的

-1.4 游戏引擎(上)

--1.4 游戏引擎(上)

-1.5 游戏引擎(下)

--1.5 游戏引擎(下)

--单选题

-1.6 如何成为一个游戏开发者

--1.6 如何成为一个游戏开发者

--多选题

第二章 《游戏服务器概述 》

-2.1 什么是游戏服务器

--2.1 什么是游戏服务器

--单选题

-2.2 游戏服务器的和分类发展

--2.2 游戏服务器的和分类发展

--单选题

-2.3 核心技术和实现难点

--2.3 核心技术和实现难点

--单选题

-2.4 设计原理与方法论

--2.4 设计原理与方法论

--单选题

第三章 《《三维几何学基础》 》

-3.1 三维坐标系统

--3.1 三维坐标系统

--多选题

-3.2 向量与运算

--3.2 向量与运算

--单选题

-3.3 矩阵与线性变换

--3.3 矩阵与线性变换

--双选题

-3.4 四元数

--3.4 四元数

--多选题

第四章 《游戏循环及实时模拟》

-4.1 游戏循环概述(上)

--4.1 游戏循环概述(上)

--多选题

-4.2 游戏循环概述(下)

--4.2 游戏循环概述(下)

--单选题

-4.3 《无尽之路》的实现

--4.3 《无尽之路》的实现

--单选题

-4.4 支撑游戏的功能

--4.4 支撑游戏的功能

--选择题

-4.5 支撑游戏的机制与系统

--4.5 支撑游戏的机制与系统

--多选题

第五章 《随机数在游戏中的应用》

-5.1 基本介绍

--5.1 基本介绍

--单选题

-5.2 随机数生成器

--5.2 随机数生成器

--单选题

-5.3 随机数分布与应用

--5.3 随机数分布与应用

--单选题

第六章 《游戏性系统》

-6.1 什么是游戏玩法开发

--6.1 什么是游戏玩法开发

--单选题

-6.2 建立愿景 Vision

--6.2 建立愿景 Vision

--单选题

-6.3 划定边界 Scope

--6.3 划定边界 Scope

-6.4 迭代 Iteration

--6.4 迭代 Iteration

--单选题

-6.5 迭代 Iteration+抛光Polish

--6.5 迭代 Iteration+抛光Polish

--单选题

第七章 《实时图形渲染管道》

-7.1实时图形渲染管道 宏观渲染系统

--7.1实时图形渲染管道 宏观渲染系统

--单选题

-7.2实时图形渲染管道 应用阶段

--7.2实时图形渲染管道 应用阶段

--单选题

-7.3实时图形渲染管道 几何阶段

--7.3实时图形渲染管道 几何阶段

--单选题

-7.4实时图形渲染管道 光栅化阶段

--7.4实时图形渲染管道 光栅化阶段

--单选题

-7.5实时图形渲染管道 总结 参考

--7.5实时图形渲染管道 总结 参考

第八章 《材质着色与光照》

-8.1 物理回顾1

--8.1 物理回顾1

--单选题

-8.2 物理回顾2

--8.2 物理回顾2

--单选题

-8.3 材质 1

--8.3 材质 1

-8.4 材质 2

--8.4 材质 2

-8.5 材质3

--8.5 材质3

-8.6局部光照

--8.6局部光照

--单选题

-8.7 全局光照

--8.7 全局光照

--单选题

第九章 《游戏动画》

-9.1 动画介绍

--9.1 动画介绍

--多选题

-9.2 游戏动画介绍

--9.2 游戏动画介绍

-9.3 动画技术类型

--9.3 动画技术类型

--多选题

-9.4 骨骼蒙皮动画

--9.4 骨骼蒙皮动画

--多选题

-9.5 动画流水线

--9.5 动画流水线

--多选题

-9.6 动画前沿趋势

--9.6 动画前沿趋势

--多选题

第十章 《网络同步技术》

-10.1 .基本概念

--10.1 .基本概念

--多选题

-10.2 设计目标

--10.2 设计目标

--多选题

-10.3 传输数据分析

--10.3 传输数据分析

--多选题

-10.4 常用同步方案 1

--10.4 常用同步方案 1

-10.4 常用同步方案 2

--10.4 常用同步方案 2

-10.4 常用同步方案 3

--10.4 常用同步方案 3

-10.4 常用同步方案 4

--10.4 常用同步方案 4

--多选题

-10.5 方案对比

--10.5 方案对比

--多选题

第十一章 《游戏常用几何学》

-11.1 基本图元

--11.1 基本图元

--单选题

-11.2 图元距离(上)

--11.2 图元距离(上)

--单选题

-11.2 图元距离(下)

--11.2 图元距离(下)

--单选题

-11.3 图元相交测试+ 其他几何方法

--11.3 图元相交测试+ 其他几何方法

--单选题

第十二章 《游戏物理模拟》

-12.1 著名物理引擎介绍

--12.1 著名物理引擎介绍

--单选题

-12.2 物理引擎原理(上)

--12.2 物理引擎原理(上)

--单选题

-12.3 物理引擎原理(下)

--12.3 物理引擎原理(下)

--单选题

-12.4 游戏中的物理体

--12.4 游戏中的物理体

--单选题

-12.5 物理引擎使用入门

--12.5 物理引擎使用入门

--单选题

第十三章 《开发工具 》

-13.1开发语言

--13.1开发语言

--单选题

-13.2 开发环境

--13.2 开发环境

--单选题

-13.3 腾讯开发组件介绍

--13.3 腾讯开发组件介绍

--单选题

-13.4 网络通信+业务框架介绍

--13.4 网络通信+业务框架介绍

--多选题

第十四章 《分布式系统设计 》

-14.1 进程间通信(上)

--14.1 进程间通信(上)

-14.2 进程间通信(下)

--14.2 进程间通信(下)

-14.3 通信格式

--14.3 通信格式

-14.4 并发模型

--14.4 并发模型

-14.5 超时处理

--14.5 超时处理

-14.6 大系统小做(上)

--14.6 大系统小做(上)

--多选题

-14.7 大系统小做(下)

--14.7 大系统小做(下)

-14.8 架构层面的技术支持(上)

--14.8 架构层面的技术支持(上)

--单选题

-14.9 架构层面的技术支持(下)

--14.9 架构层面的技术支持(下)

-14.10 分布系统的关键能力

--14.10 分布系统的关键能力

--多选题

第十五章 《游戏人工智能》

-15.1 游戏人工智能综述

--15.1 游戏人工智能综述

-15.2 人工智能在游戏中主要方法 上

--15.2 人工智能在游戏中主要方法 上

--多选题

-15.3人工智能在游戏中主要方法 (下)

--15.3人工智能在游戏中主要方法 (下)

-15.4 人工智能在游戏制作中的应用领域1

--15.4 人工智能在游戏制作中的应用领域1

--多选题

-15.5 人工智能在游戏制作中的应用领域2

--15.5 人工智能在游戏制作中的应用领域2

-15.6 人工智能在游戏制作中的应用领域3

--15.6 人工智能在游戏制作中的应用领域3

--多选题

-15.7 人工智能在游戏运营中的应用实践(上)

--15.7 人工智能在游戏运营中的应用实践(上)

-15.8 人工智能在游戏运营中的应用实践(下)

--15.8 人工智能在游戏运营中的应用实践(下)

--多选题

第十六章 《游戏支撑系统 》

-16.1 游戏支撑系统(1)

--16.1 游戏支撑系统(1)

--单选题

-16.2 游戏支撑系统(2)

--16.2 游戏支撑系统(2)

--单选题

-16.3 游戏支撑系统(3)

--16.3 游戏支撑系统(3)

--单选题

-16.4 游戏支撑系统(4)

--16.4 游戏支撑系统(4)

--单选题

-16.5 游戏支撑系统(5)

--16.5 游戏支撑系统(5)

第十七章 《游戏逻辑服务器和反外挂》

-17.1 游戏逻辑服务器(上)

--17.1 游戏逻辑服务器(上)

--单选题

-17.1 游戏逻辑服务器(下)

--17.1 游戏逻辑服务器(下)

-17.2 外挂与反外挂(上)

--17.2 外挂与反外挂(上)

-17.2 外挂与反外挂(下)

--17.2 外挂与反外挂(下)

--多选题

第十八章 《运行环境和运维 》

-18.1运行环境

--18.1运行环境

--多选题

-18.2物理部署

--18.2物理部署

--多选题

-18.3系统的可运维性

--18.3系统的可运维性

--多选题

-18.4运维案列分析

--18.4运维案列分析

--多选题

14.6 大系统小做(上)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。