当前课程知识点:游戏程序设计 > 第十四章 《分布式系统设计 》 > 14.6 大系统小做(上) > 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.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-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.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题









