游戏服务器的架构设计

摘要:
游戏服务器的设计是一项具有挑战性的工作。游戏服务器的发展也从以前的单服务器结构转变为多服务器结构,甚至出现了bigworld引擎的分布式解决方案。最近,据了解,虚幻服务器解决方案图集也是基于集群的。负载平衡是一个非常复杂的话题。我们暂时不会讨论Bigworld和Atlas等服务器的设计,而是更多地讨论基于功能和场景的服务器结构划分。

游戏服务器的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的分布式解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。

负载均衡是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。

首先说一下思路,服务器划分基于以下原则:
1:分离游戏中占用系统资源(cpu,内存,IO等)较多的功能,独立成服务器
2:在同一服务器架构下的不同游戏,应尽可能的复用某些服务器(进程级别的复用)
3:以多线程并发的编程方式适应多核处理器。
4:宁可在服务器之间多复制数据,也要保持清晰的数据流向
5:主要按照场景划分进程,若需按功能划分,必须保持整个逻辑足够的简单,并满足以上1,2点

服务器结构图:

null
各个服务器的简要说明:

Gateway:应用网关,主要用于保持和client的连接,该服务器需要2种IO,对client采用高并发连接,低吞吐量的网络模型,如IOCP等,对服务器采用高吞吐量连接,如阻塞或异步IO。

网关主要有以下用途:
1:分担了网络IO资源
2:同时,也分担了网络消息包的加解密,压缩解压等cpu密集的操作。
3:隔离了client和内部服务器组,对client来说,它只需要知道网关的相关信息即可(ip和port)。
4:client由于一直和网关保持常连接,所以切换场景服务器等操作对client来说是透明的。
5:维护玩家登录状态

World Server 是一个控制中心,它负责把各种计算资源分布到各个服务器
它具有以下职责:
1:管理和维护多个Scene Server
2:管理和维护多个功能服务器,主要是同步数据到功能服务器
3:复杂转发其他服务器和Gateway之间的数据
4:实现其他需要跨场景的功能,如组队,聊天,帮派等

Phys Server 主要用于玩家移动,碰撞等检测
所有玩家的移动类操作都在该服务器上做检查,所以该服务器本身具备所有地图的地形等相关信息。具体检查过程是这样的:首先,Worldserver收到一 个移动信息,WorldServer收到后向Phys Server请求检查,Phys Server检查成功后再返回给world Server,然后world server传递给相应的Scene Server.

Scene Server 场景服务器,按场景划分,每个服务器负责的场景应该是可以配置的。理想情况下是可以动态调节的。

ItemMgr Server 物品管理服务器,负责所有物品的生产过程。在该服务器上存储一个物品掉落数据库,服务器初始化的时候载入到内存。任何需要产生物品的服务器均与该服务器直接通信

AIServer 又一个功能服务器,负责管理所有NPC的AI。AI服务器通常有2个输入,一个是Scene Server发送过来的玩家相关操作信息,另一个时钟Timer驱动,在这个设计中,对其他服务器来说,AIServer就是一个拥有很多个NPC的客户 端。AIserver需要同步所有与AI相关的数据,包括很多玩家数据。由于AIServer的Timer驱动特性,可在很大程度上使用TBB程序库来发 挥多核的性能。

免责声明:文章转载自《游戏服务器的架构设计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[C#基础知识] ReadOnly关键字修饰的变量可以修改,只是不能重新分配Educational Codeforces Round 40 (Rated for Div. 2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SOA架构设计分析

  SOA(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。   SOA可以满足企业软件架构的需要,大大增加了企业对于IT系统更改的灵活性,它为企业软件架构的搭建定义了一种新方法,使得一些大企业或不在同一地区的开发团队...

Photon——Application LoadBalancing 负载均衡应用

Application - LoadBalancing 负载均衡应用        This article explains the server-side implementation of the LoadBalancing application.      本文解释服务端是如何实现LoadBalancing应用程序的。   Content...

Sun公司开源游戏服务器Project Darkstar Server——(Sun game server , 简称 sgs)学习笔记(五)

Managed Objects and Managed References管理对象和管理关系 数据管理对象主要是一个持久化对象的集合,存储在一个叫做对象仓库的池中。和一个正常的Java 对象一样,每个对象都包含一个方法和其自己的数据。要成为一个管理对象,这个对象就要实现ManagedObject(管理对象的接口)和Serializable(序列化接口)。...

大型网络游戏服务器的框架设计

服务器是用来处理高并发的请求,同时能够满足扩展的业务逻辑的需求,最重要的是满足三点:并发性,稳定性,扩展性。 经历过两款上线游戏产品,见识到了游戏行业的杂乱无章,虽然和传统软件行业相比,少了那么些规范,但是对个人能力要求还真不比传统软件行业低。 今天开始,陆续利用业余时间将自己设计的一个服务器的框架贴出来,也会包好一些基本的代码,也会用到一些开源库。从最基...

软件架构设计-五视图方法论

1.每个人都可以做成为架构设计师 不懂软件的和刚入行的人们一听到架构设计,都认为是非常的高大上课题,是一个遥不可及的领域,一般人是不能做的。听起来云里雾里的,第一印象除了来自微软,阿里这些NB的公司里面的人其余的都不能做出架构似的,这是一种先入为主的思想,因为大家都在强调架构师的重要性,他的薪资有多么的高,在整个社会对他的认定导致很多人对架构设计望而生畏...

常用的三层架构设计(转载)

常用的三层架构设计 软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。 常见的三层架构基本包括如下几个部分,如图14-1所示。 图14-1 常见的三层架构 l 数...