高性能游戏服务器设计

说起高性能的网络游戏,有2个典范,1个是暴雪的WOW,另外一个要数腾讯的QQGame了,因为对于MMPRPG的体系接触不深,几乎属于文盲,没有太多的发言权,而自己又是搞休闲游戏开发的所以本文就主要谈谈QQGame了。

前些天通过朋友得到了QQGame的一个系统分析的文档,看完后很是震惊,彻底被QQ的设计所折服了,到底是千万人在线系统经验的拥有者,牛!

通过资料了解到QQGame目前有以下让我欣赏的特性:

  1. 单机最高容纳35,000人同时在线,对没有看错是这么多,由于它适用了Linux下高性能的网络处理模型ePoll技术,并且一系列高超的优化技术轻松破万人,当然为了稳定性考虑单机保持了2万人的容量,此时的带宽消耗为近30M;
  2. 采用共享内存方式高速完成进程间高速通讯;
  3. 服务器的扩充方式不是平面的方式,而是裂变式的扩充方式,形成负载均衡阵列树状结构;
  4. 所有的游戏服务器不是直接和数据库联系,而是和数据proxy(qq管叫数据交换机和路由器)进行联系,由此带来的就是游戏用户数据的分布存储,我分析着应该是proxy上记录着这个用户数据所在的实际的dbserver的信息,然后定时的将最新的用户信息写回到db中去,这样就大大缓解了数据库服务器的压力,而且可以非常平滑的将数据分裂开来,数据库服务器也就可以无限的扩充,当然我觉得肯定有个数据库信息索引了用户的id和对应的存储地点的关联关系,这点就类似于google的原理了,所以对于数据库的硬件要求也就不是那么高了,qqgame的一组服务器通常是7台服务器,可以容纳5万人,其中就包含了 数据库服务器,这点就不是棋牌游戏所常使用的数据集中存储了;
  5. 游戏服务器的网络和逻辑分开,不仅仅是层次上的分开,而是在进程上分开,然后中间通过共享通道进行管理和协调,并且增加了辅助线程,在主线程处理大压力的异步的操作的时候直接交给辅助线程处理,保障了游戏服务器的高效性运转。

作为游戏服务器的结构方面(以下只讨论休闲游戏部分,MMORPG服务器不属于讨论范围)的设计已经相对于成熟并且统一,结构方面和3年前我所接触的中游系 的那套平台没有太大的差异,无非是服务器群采用星状的结构,以1个中心节点作为核心,然后向四周扩散出一些应用服务器,如负责登陆的 LoginServer,负责具体游戏逻辑的GameServer等等,当然最精简的结构是这样的,这样的结构可以满足50万以下同时在线的容量,如果为了满足更大的容量,如QQGAME这样的目前已经有200万以上同时在线的超大容量的应用则需要额外的优化,从这个结构中分离出一些子应用独立开发出一些 服务器端来处理,一方面降低偶合度,另外一方面作为高可用性系统为负载均衡提供条件.

关于负载均衡,作为整个 游戏平台的所有服务器.我觉得除了具体的游戏逻辑服务器以外都是可以采用负载均衡,多点分担的方式来处理,惟独逻辑服务器不可以,因为休闲游戏,都是分层 次的,不管泡泡堂也好,QQGAME也好这些游戏其实在客户端的表现形式都是分层次的,如QQGAME就是LOBBY-HALL-ROOM这样的结构, LOBBY这层就是游戏广场了,可以看到所有的游戏类别,游戏服务器和具体的游戏大厅,比如:牌类–斗地主–新手场–新手场1 这样的顺序,传统的设计中新手场1就是属于一个独立的游戏逻辑服务器拥有一个独立的IP以及侦听端口,在服务器端通常也是一个独立的进程.一般的游戏服务器允许的连接数通常都是300-600人之间超过的就提示服务器已满了,这样做的原因并不是因为进程的限制因为一个进程完全可以做到同时让3000以上的玩家同时游戏,而是人为设计的考虑,因为在游戏逻辑服务器中有很多需要广播的消息,如游戏玩家的聊天信息,某个房间的开始信息,结束信息,某人进出的信息等,而对于广播来说,给300个人广播和给3000个人广播所消耗的资源是绝对没有可比性的。但是通过从进程上独立来处理这个传统的方式也有个缺陷,比如通过开10个进程来达到3000人和1个进程达到3000人,如果不考虑广播的因素在内的话前者的资源是要高与后者的资源的,并且进程间的通讯也要比进程内的通讯要耗费资源和复杂度方面要高很多,比如说如果要实现一个需求让玩家可以在同一类游戏中可以使用小喇叭类或者跨游戏服务器找人之类的功能的话,同一个进程的优势就显示出来了,为此QQGAME所使用的是Channel(频道)的概念,即一个游戏逻辑服务器的进程可以容纳5000人左右,然后服务器端通过设置分割出很多的Channel如新手1,新手2,新手3之类的传统意义上的游戏大厅,将消息的分发范围进行隔离,节约了资源。这一点可以通过查看连 接属性看到,连接QQGAME的同类型靠近的几个游戏大厅其实端口和IP都是一致的。

我们目前的游戏服务器类型主要有3类:CenterServer,管理着所有的服务器连接,LoginServer 负责处理用户的登陆、注册,并且用来给用户传递游戏逻辑服务器列表等功能, GameServer具体逻辑服务器,根据不同的逻辑来实现不同的游戏需求。

当然,根据业务的发展需要,我们正准备把用户的状态在服务器端保存,并且增加一个类似IM服务器的功能来满足玩家跨服务器聊天和查询其他玩家状态的需要。以及GM服务器实现多功能的网管室的需求,这些将在以后慢慢写。

今天开始写些技术的题材,一方面记录一些自己的本分工作的东西,另外一方面也是充实一下BLOG,工作太忙也没有什么太多的思绪来一直写其他的题材,所以就拿工作来填充了.同时如果有人有幸看到了这些文章,并且也有兴趣的话也希望多多探讨.

先简单介绍一下,由于本人的工作就是游戏开发公司的,一直与游戏开发打交道,主要做休闲类的游戏,目前又以棋牌游戏为主,在这个行业中摸爬滚打了整3年了, 从运营开始做起,运营过当时国内一流的游戏平台中游系列的产品,然后由于合作方面的原因又自主开发过一套游戏平台,然后由于发展方向上的分歧出来单独做, 目前在开发并运维一套全新的产品.

这篇主要是对于游戏服务器的一些想法,结合目前自身的产品的一些问题延伸开来的.

目前我们的服务器还是属于Windows平台的架构,暂时还没有考虑到跨平台,主要原因有2:

1. 成本:作为公司来说首先得考虑的就是成本了,虽然说Linux类的平台存在着操作系统成本低廉,性能优异,稳定性高这几个特色,但是作为全局考虑来说,一个Linux的系统管理员,以及开发人员的成本要比Windows平台要高很多,并且作为操作系统方面是免费的,但是支持几乎是没有的只有一些不适合商业应用的开源社区作为支撑,要得到更加好的服务或者额外的支持还是得通过大厂商的高额的产品或服务来实现,而Windows平台则不同,虽然操作系统貌似价 格不扉,但是本身就带了很多的模块,比如组件服务,日志服务等等,加上平台上各种软件的数量也和Linux下的不是同一量级的,可选择性要大的多,而让 Linuxer所诟病的Win32的安全性其实完全可以通过另外独立的安全模块,如硬件防火墙等来完善,毕竟操作系统不是专门做安全防护的Linux也存 在很多的漏洞,并且随着Linux发行版的日益增多,用户的逐渐了解,漏洞也日益的增多.

2. 开发效率.无疑Visual Studio系列开发套件是目前开发领域最方便最强大的IDE环境,这已是不争的事实,而如果用VI + GCC的模式去开发LINUX下面的服务器其效率和质量至少从我目前的水平(可以部分代表国内目前中小游戏软件开发商实际现状)要彻底的领悟并转换需要一 定的时间,并且还没有成熟的开发平台作为保证, JAVA好象有 但是C++还没有听说有超过VC++的.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以用如此少的代码达到强大的扩展性和伸缩性。当然还不仅仅是游戏,很多人断言未来的web时代是实时web应用的时代, 我们发现用pomelo开发高实时web应用也如此合适, 而且伸缩性比其它框架好。目前不推荐将pomelo用于大型的MMO rpg游戏开发,尤其是3d游戏, 还是需要象bigworld这样的商用引擎来支撑。 Pomelo的理念 pomelo的第一个理念是让游戏(高实时web应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟rails是很类似的;第二个理念是重视性能和可伸缩性,用户用pomelo开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行;第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件component、路由规则、甚至管理控制台都可以完全由第三方扩展。 Pomelo的框架组成 pomelo包括三部分: 框架, pomelo的核心, 与以往单进程的游戏框架不同, 它是高性能、分布式的游戏服务器框架,并且使用很简单 库, 包括了开发游戏的常用工具库, 如人工智能(ai), 寻路, aoi等 工具包, 包括管理控制台, 命令行工具, 压力测试工具等 pomelo特性 快速、易上手的游戏开发模型和api 高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略 方便的服务器扩展机制,可快速扩展服务器类型和数量 方便的请求、响应、广播、服务器通讯机制, 无需任何配置 注重性能,在性能、可伸缩性上做了大量的测试、优化 提供了较多扩展组件,包括游戏开发常用的库和工具包 提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考 基于socket.io开发,支持socket.io支持的多种语言客户端 为什么使用pomelo? 高并发、高实时的游戏服务器的开发是很复杂的工作。跟web应用一样, 一个好的开源容器或开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开发领域一直没有太好的开源解决方案。 pomelo将填补这个空白, 打造一款完全开源的高性能(并发)游戏服务器框架。 pomelo的优势有以下几点: 架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js的网络io优势提供了高可伸缩性。 使用非常容易, 开发模型与web应用的开发类似,基于convention over configuration的理念, 几乎零配置, api的设计也很精简, 很容易上手。 框架的松耦合和可扩展性好, 遵循node.js微模块的原则, framework本身只有很少的代码,所有component、库、工具都可以用npm module的形式扩展进来。任何第三方都可以根据自己的需要开发自定义module。 提供完整的开源MMO游戏demo参考(基于HTML 5)。 一个超过1万行代码的游戏demo,使开发者可以随时借鉴demo的设计与开发思路。 在线演示:http://pomelo.netease.com/demo.html 标签:开发框架  游戏框架

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值