当前课程知识点:游戏程序设计 >  第十六章 《游戏支撑系统 》 >  16.4 游戏支撑系统(4) >  16.4 游戏支撑系统(4)

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

16.4 游戏支撑系统(4)在线视频

下一节:16.5 游戏支撑系统(5)

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

16.4 游戏支撑系统(4)课程教案、知识点、字幕

咱们今天讲一下

这个日志相关的技术点

这日志相关这个技术点

其实挺搞笑的一件事

就是今年的IEG的魔方工作室群的

有那个这个技术同学留用

靠一个题来直接决定的

这道题就是把实习生

给实习生两周的脱产的时间告诉他们

要做一个高可用的日志体系

最后在第一周对吧

第一周回来的时候

一个北大的硕士生就说

我不用第一周就是其中两周的时间

其中中间的中我不用参加后面的比赛

就拿这个跟我跟他们两周比赛就行

我ACM金牌得主对吧

这个日志系统一定做的非常的高效

像他这样的同学还有好几个

为什么最后没有得高分

是因为他们过于看中了其中一个点

这个点是他把算法做的非常的牛

这算法什么牛呢

对吧

我怎样利用这种缓存的体系对吧

这个字符串一共有八种组合的方法

有加号

有什么

我全部都比了一遍

这个是最高效的

后来呢

我发现O一O二O三

o2的编辑开发效率非常高

O3要我把编辑效果都想了

后来我又看了汇编发现有两条语句

是多余的

我把它合并了

摘出去了

然后你看我这个代码里

这个F好热这个F如果换一下

这个效率将提高百分之零点几

对啊

然后swich

如果要用什么方法就会提高的更快一些

然后讲了很长时间

这个东西确实做的很好

但是其实我今天给大家讲这个目的

其实是想说

设计一个小模块

哪怕是一个日志

它绝不是plan一句话是可以解决的

它背后有它自己的一整套体系架构

如果你要想做一个高可用的东西

一定要考虑很多很多的点

我今天其实就摘了一些点

其实给大家分享一下

一个日志体系不是拿着一个plan图

打一个logo这么简单

所以咱们先说一下第一个这个日志

你的可配置吧

因为有些信息是很重要的

error日志

非常严重的告警对吧

有些这种

warn日志还有咱们调试的debug日志

还有现在很不重要的info信息

这样话因为你只有把它区别开了

你后面才能做开关

再当这个游戏跑的很正常的时候

我只打error就可以了或者少量的warn

它都有级别开关呢

当我出现一个问题

要跟踪跟一个点的时候

比如我登录体系怀疑坏了

我可以把登陆的debug信息打开

对不对这个开关只打开这一点

让我去分析到后面是不是有问题

再就是你要支持多种记录方式

你支持不支持js 支持不支持xml

方便不方便

输入数据库

这些都是一个完善的一个知识体系

要考虑的

这就是一个这种海量的知识

海量知识我这个就是可滚动打印

这代表什么意思呢

有些日志

可能瞬间会很很短的时间可以打十几级

或者二十几级

所以第一点呢

你首先你这日志要能滚动

这滚动代表对不对

一个文件你可以给它区别成

一个一G的限制

当它超过一G以后

它应该打在一个地方0001的文件上去

如果01超过1G应该打在02文件里

这样你去分析才会快一些

但有些像这种info信息会非常非常大

你也不能让它0102030405

一直算一下可能零两万了

你不可能有两万G的

所以这种info信息其实达到100

要把前面这最早的那个删除掉

对吧删除掉后面再接着在去打零九

我只保留最近的实际就可以了

实际日志因为这是查bug用的

不需要

很持久化

这个就是

日志体系它也要有容灾

要备份

你必须把非常重要的一些信息

比如我付费的信息

我购买商品的这种信息非常重要

你要打在远程服务器上去

这样的话

在远程服务器可以做什么呢

其实可以做这种数据库的分析

或者快速的查询

它不需要到每个每个服务器去爬去

第三个你得支持跨平台

你要支持安卓吧 支持ios 支持windos

对不对你叫代码级的平台无关性

并且要适用于大多数的主流操作系统

和开发工具

如果语言不相同

那你要起很方便提供库级别的方式

跟别人去调用

还有这个其实这个你设计好了

比你把那些上面做好都很重要

那就是因为大家都知道

在计算机里最慢的就是访问硬盘

对不对访问IO

你不能让他组色组

你如果不想让它阻塞不是你打一个缓冲词

比如说买了满了两兆刷一下

满了两兆就可以简单解决的

一般情况下

你要把它打到另外一个线程

或者另外一个进程里去

为什么这样呢

因为在游戏里

就是你刷的两兆的一百毫秒是等不了的

一定会造成玩家体验的卡顿

就玩家的响应要及时在35毫秒以内

响应回来

所以我们不能把这种日志

写在我们的逻辑的那个线程里面

一定要把它做之事多先写到另个线程里

另外就是它写在另外一个线程里

打日志的那个模块本身

是需要需要支持多线程的

因为要支持多线程

就要涉及到很多很多同步变量的东西

就一些基本功是要考虑到的

所以我今天拿这个小例子就去讲

如果哪天你要去做一个日志模块

你也不要去写

也不要去想有很多现成的开源的框架

你拿过来就可以用比你写的好多了

因为毕竟经过很多很多人验证了

匹配

匹配这块估计大家体验就比较深了

打王者打吃鸡

对吧

把你搓成五人一个房间

31人一个房间一百人一个房间

背后肯定是一套

自己的一个匹配的

匹配的一个算法

但是这个匹配呢

一般要考虑以下这几个点

第一个点是你要考虑这种匹配的扩展性

什么叫扩展性

因为就在一个游戏不同的副本玩法

它是要求这种匹配规则不一样的

有的要求讲究的职业平衡性

有的可能讲究的是战略平衡性

有些讲究的是

就在我这个玩法里面

积分的平衡性就要和战略和什么都没关系

因为战略反映不了对这个玩法操作

操作水准

再就是匹配时长不能太长

如果超过二十秒

你肯定会我会抓狂的

有些时候会填一些机器人

填些机械人帮你打

那最后一个就是温暖局

那最后一个就是温暖局

你打王者荣耀的第一局

你打和平精英的第一局

一定是跟机械人在打

因为你这时候谁也打不过

上来就被人K了

你肯定是不舒服的

这种温暖局得一方面是要教学

一方面是要教育玩家这个这种这种心态

我要更强

差一点

就差一点

其实这里面呢

这种所有的匹配系统里面

有一个技术的一个点

就是我们假设A和B它们俩要打一场比赛

A如果赢了以后给A加多少积分是合适的

所以这个点

这个点

不仅在游戏里有在我们的象棋比赛里

足球比赛里对不对

篮球比赛里它都是有

在我们的经济里面

魔兽世界lol王者里面

都有也都有这种也都会遇到这个问题

所以我觉得数学家是很伟大的

居然可以用一个很简单的公式

把这个问题给通用的解决了

有人听说过没有

大家看过社交网络没有

拉格伯格在评价他们学校的

那个美女受欢迎程度的时候

他在玻璃上写了一串公式

就这公式

就是我们今天要讲的这个Elo算法

非常权威

放到哪里都准

这个算法背后

他是一套基于统计学的一套理论对吧

它背后的理论如果大家对数学

有学数理的可以去深究一下

但是把它呈现给大家的时候

它就很简单

十几行代码解决短短的一小段

短短一小段

这个算法大概这个流程什么样呢

就是

玩家A有一个自己的积分

叫Ra玩家B有一个自己的积分叫Rb

并且当它们比赛完以后有个结果叫Sa

Sa就是A的结果

A的结果代表着

A是赢了得一分

A打了平局得零点五分

A输了得零分

那同样对吧

那个我没写

念出来不好听

也有另外一个对不对

它其实代表了另外B那个玩家

B那个玩家的那个胜胜负情况所以呢

其实这个是一个观念

就是A选手和B选手决战它的胜率是多少

它的胜率就这些公式

就这个公式

因为Ea有a的胜率

B也有B的胜率是Ea加Eb

应该刚好等于几

刚好等于一

因为你赢和我赢了这个胜率加在一起

刚好应该等于一

所以比赛结束以后

A的积分改变的差值

其实就是它这个胜率

和它这个实际胜率的一个插值

乘一个系数K

K在象棋里面低段位低段位里面是32

高段位是16在我的游戏里是40

基本就在这个数之间就可以了

就用它做这种这种积分排名

非常公平大家也是比较认可的

后面讲一个存储相关的吧

我就把后面几页

一起按照版书的形式给大家讲起来

我觉得比较好理解

我这样讲就比较枯燥在这上面

就这个游戏的存储

游戏的登录我一共讲两个这种设计上面的东西

这两个只要你做互联网

就一定绕不开登陆

也绕不开存储

所以它比较通用给大家讲一下存储

但我们常见的存储肯定是对吧

我不用这个

就是放在那个

内存里对不对

memory

它就内存

但我们今天想说的

想讲的是可持久化存储

就是需要落地的

就是这个结果需要你下次下线

需要能显示出来的一个结果

所以今天我们讲一个

学计算机的同学有没有听过这么一个技术

就是当这个进程crach以后

这个内存没有没有被回收掉

如果你在内存里申请一块内存

这个crach技能应就没了

有没有同学了解学计算机的同学

了解知道是什么技术吗

共享内存

叫共享内存

我们叫share mermory

它的好处就是

就算是这个内存crash掉了

我也可以不回收

那其实他很好解决了一个问题

像我们的这种游戏里面

特别是mmo游戏里面天涯明月刀启动以后

三十二级的后台存储

轩辕传奇还有那个

还有那个秦时明月

他们背后都是二十G+的这种存储

如果你没有它

如果你没有它你的启动

第一

你要从第一页load是不可能的

好多G的数据把它捞回来

不可能瞬间启动起来

就down机了

这恢复过程可能是半小时级别的

这就是放在共享内存里

它一定不会丢

这种数据重启接着运算就可以了

那好所以呢

在游戏里大量地使用这种share mermory技术

那它只是在这个

只是说在咱们的内存来缓存一下

那真的要持久有话

大家应该了解

对不对你要入库的DB系统

正常情况下

它要和DB去交流

学数据库的话

你们应该去了解过这个DB

你不是简单的用语句

可能就是就完了

你要考虑最重要就是它的容灾

我出了问题以后怎么从DB把它恢复回来

这块我直接讲这块可能偏工程的

如要想容灾

一般要保证几点

第一要有一个冷热倍

这个大家能不能明白

就是同时还有一个DB2

也在往里面写数据

但它可能不读

所有的数据改变都在那DB二里

它是你的一个备份

如果哪天这个硬盘坏了

ok没关系

切到那个切到另外一个就可以了

第二就是你要定期

你要定期的备份

每天24小时24点的时候

这个DB一定要把它备份出来

备份出来

至少要存在同样存半年以上

你要哪天有问题

至少我可以恢复到任何一个指定天数

零点的数据是很容易把它恢复回来的

那还有一个叫binlog

这个就是基于因为DB

在自己操作的时候

它也会在硬盘里记一个人log

它是基于更细的

我要恢复到几点几分几秒的没关系

就基于log

是可以把它回滚回来的

基本就是靠这三个

但是呢

我在11年第一次在北京

这边做手游的时候

其实就犯了一个错误

这个错误是什么呢

就我的玩家就是大概是一兆左右

一兆左右

就一个玩家的数据是一兆左右

因为我们那个游戏运营到后期以后

每个服平均都有三十万的数据

三十万的数据

那这代表什么呢

这是三百G

这三百G的数据

突然有一天我们的公司的数据库大升级

就我们自己用来做

不要你用了

公司有统一的一个大库管理的

更好的管理让我们迁移过去

这可把我给累坏了几十个服

每天晚上

我从两点我就每天两点

我在公司睡觉两点到到九点

我每天都在迁数据库

因为三百G的数据库

你把它备份出去

再导出来

需要非常长的时间

所以后面呢就学了一个经验教训

到底需不需要三百G

其实它完全是不需要的

为什么因为这一m的数据

它其实我是存的数据结构

大家讲过数据结构吗

就我把整个数据结构都存进去了

都存进去了

如果你要想把它降低

有两个非常好的方法

一个叫序列化

大家知道谷歌那个开源protobuf

大概能理解

序列化的意思是

我只存有效的数据

哪怕我开了一个一千个数组

里面可能就存了三个有效的数据

那我只存了三个

另外

那997个是不需要存储的

它只需要存个类比3就行了

没必要把这一千都丢数据库里

就这一步至少可以降低百分八十以上

我这几个游戏我都看过可以降的

第2个其实就是一个很简单的技术

就压缩那么成熟的一个技术

当时问没有用

这个技术可以降低90%以上

你看这就多少了零点零二

我这三百G乘以零点零二

可能就成了多少了六G

我如果再操作

这个时间我可能就几分钟就完成了

所以后续我在做游戏都给大家去讲

虽然后面是一个大库

你想用多少用多少

还省着点用这个越小对你对你更好

但其实在这个设计里面

其实还存在着一个问题

什么问题

这个游戏的逻辑如果直接访问数据库

这个时间比你访问硬盘还大

比你读一块硬盘还快

因为它毕竟要在mencache里查询出来

再返还给你

它是一百毫秒级别的

但我的业务遇到这种高并发的时候

什么叫高并发down机重启的时候

玩家集中登陆

刚开服的时候

玩开新区的时候玩家集中登陆

它们的压力是很大的

它们的压力是很大的

所以在腾讯体系里面

基本上没有直接访问数据库的业务

大家可以想一想用什么技术

比如说我举个例子

我们CPU是要访问存储的对不对

但我们CPU不能直接访问

那个硬盘这太慢了

中间有一层什么介质

叫内存

其实内存是什么

就是它的一个池子

然后内存有啊啊

有命中算法

它会预测将来谁用的多

谁就在这里面

所以在这个体系里面

整个腾讯里面

无论叫有的叫

有的叫

没关系

都有一个就是内存数据库的概念

就是cache mero

异常简单就是个

就是一个可以把这个数据检索出来

他只需要存储他在里面的10%以内就可以

命中率

绝对能高达百分96以上

这样话你就其实可以解决了

在高并发的情况下

就是当前在线的用户

如果down机了

它才最有可能下一次再启动起来再去登陆

所以在这一块就解决了这种

这种比较大的这种比高并发的问题

这也是一个通用的解决方案吧

整个游戏应该现在都用大家早期

我刚开始刚毕业做游戏的时候

在那个搜狐那家公司

它就没有用这个技术

但是后来后来现在也都改掉了

游戏程序设计课程列表:

第一章 《游戏开发导论》

-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运维案列分析

--多选题

16.4 游戏支撑系统(4)笔记与讨论

也许你还感兴趣的课程:

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