分布式高性能游戏服务器的设计与实现文献综述

 2022-09-24 14:57:04

文献综述(或调研报告):

前言

随着智能手机和移动互联网的普及,网络游戏成为移动互联网商业发展的突破口。玩家在线时长增多,数量急剧增长,游戏服务器的性能和稳定性成为游戏竞争力的重要挑战。国内外有许多学者对游戏服务器的发展做出了各个方面的贡献,对各种问题和瓶颈都提出了相关的解决方案,以及各个方案之间的区别和相关的测试结果。我通过学习以前学长的论文,打算对分布式高性能游戏服务器解决的一些问题优点和方案进行综述。主要从服务器架构,语言选择,高速缓存,持久数据,负载均衡,分布式高并发等方面进行比较。

正文

1.游戏服务器往往需要不停地更新调整,张宁[1]学长对比发现Lua 具有其他脚本语言所不具备或突出的特性: 可扩展性。Lua 的可扩展性非常优秀,Lua 设计的初衷之一便是其可扩展性,Lua 的扩展性强的一种方式便是,Lua 的大部分的基础功能就是通过调用外部库实现的。即得益于 Lua 超强的可集成性,要将 Lua 与 C/C 配接是非常容易的,而且 Lua 也能集成到包括 Ruby 和 Perl 等的脚本语言中。 简易性。Lua 是一种很简单、小巧的语言,正如前文所说,简单即意味着较小的出错机会,它所具有的概念都是精而非常有用的,这样的 Lua 是非常易于学习的,你甚至只用花短短的一两天便能熟悉 Lua 的基本语法和使用,Lua 的小巧、灵活,以至于使用 Lua 开发出来的成品也可以节省甚多空间。 高效性。Lua 是效率非常高的,据相关统计,测评,Lua 是解释型的脚本语言中效率最快的语言之一。 可移植性。这里的可移植性除了是指 Lua 能够在 windows 或者是 UNIX 上执行,让人惊讶的是,Lua 能够在任何操作系统平台上无阻碍的执行,包括 Mac OS-9、OS X、BeOS、RISC、Symbian、ARM、类 UNIX 或类 Windows 系统等等各种各样。而且,Lua 并不需要用额外的编译方式针对不同运行平台来作任何特殊的处理,针对所有这些运行平台的源代码都是同一套代码,只需要用依赖于 ANSI(ISO)C标准来编写 Lua 的具体实现代码适应某个新的平台而去修改它,只需要有一个ANSIC的编译器就够了。 Lua 的执行速度也是非常快的,我们很少能看到有一个项目会因为 Lua 的使用而造成瓶颈。 人们开发游戏的初衷一般源于某个灵感,Lua 便能快速的基于这种灵感来实现游戏的核心概念,设计并测试,并且能很方便的管理大量的运行时数据,而且由于 Lua 的易学习,就算只是稍微具备计算机学习背景的人也能在很短期的时间内就掌握它的基础知识,并立马投入正式的游戏开发中。 不同于其他的传统脚本语言,一般的传统脚本语言都用于控制执行重复的任务,如 shell 脚本等等,但是 Lua 是一种非常容易整合的语言,它能把其他的大多数语言开发的功能整合在一起,如此,程序员使用脚本便不再仅仅只是执行命令,而是有更大的发挥空间。 Lua 的处理字符能力和数学执行的能力都是非常强的,而且它的数据类型是动态的,以及定义函数的功能也是非常方便好用的。Lua 是一种基于 C 函数库的快速开发语言,Lua 可以说是经过 C 语言精简而来的,Lua 的变量是在定义前是没有固定类型的,只有设定了值之后才有类型,也即,在使用时,是不需要类型声明的,这是对语言的一种极大的简化。 在 Lua 中,表是唯一的数据结构机制表,其在语言的运用中起了非常重要的作用,表中是一系列的关系数组,关系的索引可以是任意类型的值,并且表是可以动态增长的。 Lua 还能自动进行内存管理,使用者不必担心对象的内存分配与回收问题,Lua 会自动的运行垃圾收集器来收集脏数据。 Lua 是一种非常轻量级的语言,编译后只有 100K 左右,启动速度非常快,能热更新,适合嵌入在其他的程序中,Lua 在当前所有的脚本引擎中是最快的,Lua 能很容易的被扩展,Lua 虽然并没有包括一些诸如网络通信等方面的功能,但它的宿主语言(一般是 C 或 C )能提供,Lua 能使用他们,就像自己内置的功能一样。

2.服务器选取数据库,或者多个数据库分别分情况使用也是非常棒的,李一白[2],吴晓菊[3],Mariacute;a Teresa Gonzaacute;lez-Aparicio, Adewole Ogunyadeka, Muhammad Younas, Javier Tuya, Rubeacute;n Casado[4] D. Goacute;mez Ferro, F. Junqueira, I. Kelly, B. Reed and M. Yabandeh[5]都对数据库进行了分析,Redis 是一种开源的缓存数据库,是基于内存或虚拟内存的数据库,它是一项介于内存式的缓存技术和传统的关系型数据库之间的技术补充,具有强大的客户端 Lua、PHP、Ruby 等等,Redis 有包括 String、Hash、List 和 Set 以及 Zset在内的 5 种基本的数据类型。 Redis 性能很高,根据官方的关于性能的测试结果,我们能知道:Redis 能每秒执行 11 万次 set 操作,能每秒执行 8.1 万次的 get 操作。Redis 数据库为了提高其执行效率,是把数据都保存在内存或虚拟内存中的,这两种方式都能持久的保存数据,避免数据的丢失,实现持久化的两种方式是,一是通过使用RDB 快照,将当前的数据快照写成 RDB 文件,实现将内存中的数据逐渐写入到磁盘上,但这种可能会造成文件的丢失,第二种方式是使用类似 mysql 的日志形式,AOF 日志,记录随时更新的日志,虽然这种方式日志文件大,但是不容易丢失文件。对于 key_value 的存储模式,我们提高效率的重要方法是如何快速查找键值和内容的对应和排序,而且更容易满足分布式理论中的三个要求,一致性、可用性和分区容错性。Redis,即远程字典服务器,顾名思义,它是借助于字典的结构来存储数据的,并且能允许其他的应用来读写其数据库中的 value 内容,Redis 中的 key 值不仅能够是 string 类型的,还能是另外的多种数据类型。Redis 是将其所有数据都保存在内存或虚拟内存中的,我们都知道,内存的读写速度是硬盘读写速度的十倍以上,所以,相对比于其他的硬盘存储的数据库而言,Redis 的性能是非常高的。但是如果仅仅只是将数据存储在内存上也能带来很多的问题,比如,在程序退出时,可能会造成内存中的数据的丢失,基于这一点,Redis 对持久化的支持刚好可以解决这一问题,Redis 能够通过 RDB 快照或者 AOF 日志将数据异步的写入到硬盘中,这种异步的方式也不会影响系统继续向程序提供服务。除了作为数据库开发,Redis 还提供很多其他的功能,如使用 Redis 作为缓存、队列系统等等。Redis 可以作为缓存系统,而且能保证数据的持久化和具有丰富的数据类型,是 Memcached 的竞争者,Redis 是单线程的数据库,而Memcached能够支持多线程,所以在多核服务器上,Memcached 的性能会更高,但是Memcached 不能够支持持久化,而且它所支持的数据类型是有限的,如果系统需要用到这些时,Redis 是最佳选择,因为相对于 Memcached,Redis 解决了断电后数据完全丢失的情况,而且还能选择多种其他的数据类型。

MySQL 特性: 1.它使用的核心线程是完全多线程,支持多处理器。 2.有非常多的类型,包括有符号整型和无符号整型,float,double,char,data 等等。 3.MySQL 既可以独立的运行在客户端服务器下,还可以成为一个库嵌入到其他的应用系统中,来提供相应的支持。 4.多种连接途径:TCP/IP、ODBC 和 JDBC 等。 5.提供用于操作、检索、优化数据库体验的管理工具,简单有效的用户特权系统。 6.可以同时处理几乎不限数量的用户。 7.MySQL 命令执行速度极快,也许是现今最快的。 8.提供多种优化、管理、检查数据库的工具。 9.作为目前最为流行的 WEB 开发语言,对 PHP 支持良好。 10.可定制,可以根据自己的需求开发自己需要的功能模块。

3.MongoDB 的几个特点: (1) 面向集合存储。MongoDB 中 collection 的概念,类似于传统关系型数据库中的表的概念,但是 collection 并不会像表那样需要事先定义好对应的模式,collection 会在数据库中会默认定义一个唯一的标识 ID,并且还能包含不限数目的文档,文档中又能嵌套无限数目的文档,因此,MongoDB 能存储对象和json 形式的数据信息。 (2)模式自由。我们要将数据存储到 MongoDB 之前,不需要为数据预先定义任何的结构,MongoDB 中的数据结构是非常灵活的,同一个集合中的数据可以是不同结构的,MongoDB 很有包容性。这种弹性是的模式的变动或增删变得非常的容易。MongoDB 不用事先对文档定义模式,这意味着文档中不同域和域的值是可以随时变化的,MongoDB 中没有类似于传统关系型数据库中的“alter table”的操作来用于增删域的数目,而且,MongoDB 中对集合的修改操作都是通过update 来进行的。并且,这种自由的机制能使得基于 MongoDB 的系统可以很容易的进行重复性开发,不需要经常的变动存储模式,也能极大的减少因这方面所产生的工作量。 (3)支持动态查询。MongoDB 有非常丰富的查询表达,如 find、findOne等,以及其他一些附加条件,查询指令为 JSON 形式的标记,能方便的查询文档中多重嵌套的对象和数组。 (4)MongoDB 能提供很好的、完善的索引支持,这些索引甚至可以是集合中内嵌的对象以及数组。 (5) 支持复制和故障恢复。MongoDB 能支持主从模式和服务器之间的数据复制,复制的主要目的是提供冗余和进行自动故障恢复。 (6)支持二进制数据的存储,MongoDB 使用的存储方式是高效的二进制数据的存储,能支持包括二进制数据的存储和图片或视频等的大型对象的存储。(7)MongoDB 内建了分片的机制,而且还能支持云级别上的分片性。 (8)支持多种语言。MongoDB 支持 C、C 、Erlang、JavaScript、Java、Perl、PHP、Ruby 等驱动语言。 Mongo DB 的优势在于: (1)扩展性好。MongoDB 是面向文件存储的数据库,这使得它能够自动的在多个服务器之间拆分数据,能平衡数据负载,自动的分发文件。这能很大的减少程序员要扩展服务器的工作量,使程序员更专注于对数据库的应用优化,而且,由于 MongoDB 自动分片的功能,当系统需要更大的处理能力的时候,便能在 DB群中加入新机器,MongoDB 数据库能自动的处理数据。 (2)多种功能。MongoDB 的查询表达式非常丰富的,能存储整个对象和 JSON形式的数据,对大文件和文件元数据提供了简单易用的协议。 (3)高性能。MongoDB 有其自带的传输协议,可以用它来和服务器实现交互,不需要事先建立文档结构,能动态的写入文档,实现保存数据文件的预先分配,用消耗空间来确保稳定的性能,由操作系统对内存进行管理,使用动态查询优化器,它能记录历史查询中效率最高的一次查询方式,将其作为下一次的查询方式,这样能很大的提高性能。 MongoDB 能建立索引,这里的索引概念和关系型数据库中索引概念相似,都是能用于提升查询的性能,是一种数据结构,MongoDB 自带了查询优化器,它就是借助于索引来实现对数据的快速排序和查找文档的。

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。