站务联系

游戏服务器架构演进

发布时间:2021-03-26   来源:网络整理    
字号:

一、游戏服务器特性

游戏服务器,是一个会常年运行程序,并且它需要服务于多个不定时,不定点的网路恳求。所以这类服务的优点是要非常关注稳定性跟功耗。这类程序假如还要多个协作来增加承载能力,则需要关注布署跟扩容的便利性;同时,还须要考虑怎样实现某些程度容灾需求。由于多进程协同工作,也带给了开发的复杂度,这只是还要关注的问题。

功能约束,是构架设计决定性诱因。基于游戏业务的功能特性,对服务器端系统来说,有以下几个特殊的需求:

针对以上的需求特性,在服务器端,我们常常会关注对笔记本显存跟CPU的使用,以求在特定业务代码下,能尽量满足高承载低响应推迟的需求。最基本的做法就是“空间换时间”,用各类缓存的方法来以求得CPU跟显存空间上的平衡。另外也有一个约束:带宽。网络时延直接限制了服务器的处理能力,所以游戏服务器构架也必定要考虑这个诱因。

游戏服务器架构演进

这种服务器构架跟我们常用的web服务器构架差不多,也是选用nginx负载集群支持服务器的水平扩充,memcache做缓存。唯一不同的地点不同的在于通信层还要对合同再加工跟加密,一般每位公司都有自己的一套基于http的协议层框架,很少选用开源框架。

2、长链接游戏服务器

长连结游戏跟弱联网游戏不同的地方在于,长连结中,玩家是有状态的,服务器可以时时跟client交互,数据的传送,不象弱联网通常每天都须要从新争创一个连结,消息传送的速率以及速率上都快于弱联网游戏。长链接网游的构架经过几代的迭代,类型也显得愈发丰富,以下为每一代服务器的特性以及构架方式。

1)、第一代网游服务器(单句柄无阻塞)

最早的游戏服务器是1978年,英国知名的财经学校University of Essex的中学生 Roy Trubshaw撰写了世界上第一个MUD程序,叫做《MUD1》。

MUD1 是一款纯文字的世界,没有任何图片,但是不同计算机前的玩家可以在游戏里共同冒险、交流。与先前具备网路联机功能的游戏相比, MUD1是第一款真正意义上的实时多人交互的网路游戏,它最大的特色是才能保证整个虚拟世界跟玩家角色的持续发展——无论是玩家退出后再次登陆还是服务器重启,游戏中的场景、宝箱、怪物跟谜团仍保持不变,玩家的角色也仍然是先前的状态。

游戏服务器架构演进

线程模型

游戏服务器架构演进

分服模型是游戏服务器中最典型,也是历久最古老的模型。在初期服务器的承载量达到上限的时侯,游戏开发者就通过架设更多的服务器来解决。这样提供了这些个游戏的“平行世界”,让游戏中的人人之间的比较,产生了更多的空间。其特点是游戏服务器是一个个单独的世界。每个服务器的账号是独立的,每台服务器用户的状态都是不一样的,一个服就是一个世界,大家各不牵涉。

后来游戏玩家倡议要国战闹事,于是就出现了跨服战,再加上随着游戏的运行,单个服务器的游戏活跃玩家越来越少,所以后期就有了服务器的合并以及迁移,慢慢的以服务器的开放、合并产生了一套成熟的营运方式。目前多数游戏还选用分服的结构来架设服务器,多数页游还是选用这些机制。

线程调度

分服似乎可以解决服务器扩充的难题,但单台服务器在先前单线程的方法来运行,没办法充分利用服务器资源,于是又演化出了以下2种句柄模型。

异步-多线程,基于每位场景(或者书房),分配一个句柄。每个场景的玩家同属于一个句柄。游戏的场景是固定的,不会太多,如此轮询的数目可以保证不会不断减小。每个场景句柄,同样选用tick线程的方法,来定时更新该场景内的(对象状态,刷新地图,刷新NPC)数据状态。玩家假如跨场景的话,就选用投递跟通告的方法,告知两个场景句柄,以此更新两个场景的玩家数据。

多进程。由于单进程构架下,总会存在承载量的极限,越是复杂的游戏,其单进程承载量就越低,因此一定要突破进程的限制,才能支撑更复杂的游戏。多进程系统的其他一些弊端:能够运用上多核CPU能力、更容易进行容灾处理。

多进程系统比较精典的模型是“三层构架”,比如,基于之前的场景句柄再做改进,把网路部份跟数据库部份分离为单独的进程来处理,逻辑进程埋头处理逻辑任务,不合IO打交道,网络IO跟硬盘IO分别交由网络进程跟DB进程处理。

3)、第三代网游服务器

之前的网游服务器都是分区分服,玩家都被界定在不同的服务器上,每台服务器运行的逻辑相似,玩家不能在不同服务器之间交互。想要更多的玩家在同一世界,保持玩家的活跃度,于是就有了世界服模型了。世界服类别还有以下3种演变:

一类别(三层构架)

网关部份分离成前级的gate服务器,DB部份分离为DB服务器,把网路功能单独提取下来,让用户统一去连结一个网段服务器,再有网段服务器转发数据至前端游戏服务器。而游戏服务器之间数据交换也统一连结至网管进行交换。所有有DB交互的,都连结至DB服务器来代理处理。

游戏服务器架构演进

以上中我们简略的讲下常见服务器的三种类别功能:

场景服务器:它负责完成主要的游戏逻辑,这些逻辑包括:角色在游戏场景中的步入与退出、角色的穿行与跑位、角色战斗(包括打怪)、任务的认领等。场景服务器设计的优劣是整个游戏世界服务器功耗差距的主要展现,它的设计难度不仅仅在于通讯模型方面,更主要的是整个服务器的机制构架跟同步模式的设计。

图说天下

×
二维码生成