专访网易谢骋超 探秘游戏类服务器架构

原创
系统
北京时间2012年12月4日 Velocity China 2012 Web性能与运维大会在北京召开,在会中51CTO记者有幸采访到了网易pomelo开源游戏框架负责人谢骋超。在本次Velocity上谢骋超为大家分享的话题是《构建快速、可扩展node.js游戏服务器》。下面是51CTO对谢骋超的采访实录。

【51CTO专访】北京时间2012年12月4日 Velocity China 2012 Web性能与运维大会在北京召开,在会中51CTO记者有幸采访到了网易pomelo开源游戏框架负责人谢骋超。在本次Velocity上谢骋超为大家分享的话题是《构建快速、可扩展node.js游戏服务器》。下面是51CTO对谢骋超的采访实录。

[[105478]]

谢骋超 网易杭州研究高级程序专家 微博: @圈圈套圈圈 twitter: @xiecc PPT下载请点击这里

谢骋超 2006年浙江大学硕士毕业后加入网易,参与过网易博客开发,主持过博客圈子,及开放平台等开发,2年前转向游戏开发领域。 专注于服务端开发技术,对高性能高并发网站(游戏)的架构设计、调优有较丰富经验。 对node.js与java开发有丰富的经验。目前是pomelo开源游戏框架负责人。

游戏服务器架构与其他类型的服务器架构有哪些不同?在稳定性、扩展性以及安全性上有哪些不同?

谢骋超:相比web服务器的无限扩展能力, 游戏服务器在可伸缩性上要受到很多限制。 主要包括以下几点:

一、长连接与基于request/response的短连接模式。由于实时性要求(100ms返回响应),所有的实时游戏(或实时web应用)都需要这种长连接模式, 它占用的资源必然比短连接模式多。

二、分区模式不同。由于游戏中玩家交互的相邻性, 游戏的分区模式是基于场景的分区。 这种分区模式可使相邻玩家的交互代价最少,但这种分区是有状态的,可扩展性也必然受到影响。

三、大量的实时广播。游戏中有大量其它玩家或怪物的动态需要实时广播给玩家, 广播的代价是指数增长的,如果玩家数量达到1,000,如果每个人都要看到其它玩家的变化,则广播将需要消耗 1,000,000次传送。 因此必须要想出一些策略来减少广播的代价, 利用AOI(Area of Interested)和分进程等策略能减少一部分代价。

四、服务端的实时tick。实时游戏一般都会在服务端每隔一段时间(如100ms)跳一下, 这就决定了每个tick所消耗的时间要远远少于100ms, 这对于场景中的实体和逻辑也有很大的限制。

稳定性: 由于分区的有状态性, 决定了游戏服务器中某个场景服务器挂了以后不能实时切到其它服务器。当然也可以通过备份进程的方法来解决, 但这会大量增加服务器的通讯和运行代价。幸好一般的游戏服务器组不是太大。

安全性: 游戏服务器的安全性设计原则是只相信服务端的数据,所有客户端发过来的请求都需要校验, 如果客户端数据与服务端数据有冲突, 则只相信服务端的数据。这点跟web开发有点类似,但校验逻辑更复杂。

pomelo框架在以上各方面都进行了深入的考虑和实践, 并提供了完整的解决方案。

在设计游戏的服务器架构时思考的重点应该放在哪些地方呢?

谢骋超:设计游戏服务器架构重要点思考的重点有以下几个地方:

一、可伸缩性。这个在前面都提到了。更详细的信息可以看pomelo的文档:https://github.com/NetEase/pomelo/wiki/pomelo架构概览

二、可扩展性。可扩展的架构很重要, 不仅包括应用的扩展点,组件的可替换性, 还有服务器扩展。pomelo实现了独一无二的服务器扩展机制,非常简单、非常的轻量级。

三、性能。性能毫无疑问是所有服务器框架都要重点考虑的, 尤其是游戏服务器要求的响应时间一般是100ms, 远远比普通web应用低。因此在数据的传输, 数据量,服务端的处理等方面都要深入考虑, 并且需要做完整深入的压力测试。

之前看过暴雪出售的退役服务器,游戏服务器就意味着更高的硬件么?设计游戏架构与采用游戏架构的时候需要怎样看待硬件的使用问题。

谢骋超:不一定,现在主流的web服务器配置已经非常好了,足够支撑普通游戏服务器的需求。尤其是使用pomelo框架开发的游戏服务器非常的轻量级, 占用的资源非常低。

很多移动、网页、社交游戏的服务端都是跑在云平台上的, 虚拟机的性能已经足够支撑这些需求。当然大型MMO RPG对硬件的需求要高一些,有一些计算很耗CPU, 一般一组服务器要跑在几台配置较好的刀片上。

附:pomelo框架的压力测试

 

您是怎么看node.js与Lua语言的呢?两者之间的区别与相同之处。

谢骋超:Lua在是游戏开发领域非常常见的轻量级嵌入式语言, node.js则是最近非常火的服务端异步IO语言。两者有一些很类似的特性, 如垃圾收集、单线程、函数式编程、高效的实现。

Node.js独一无二的优势是它在IO上的优势, 由于网络游戏是网络密集型的,这使node.js的可伸缩很强。另外,从跨语言开发和社区支持的角度来看,Javascript有更大的优势。由于很多客户端也是用js开发(如html5 , unity 3d), 同种语言会带来很大开发上的便利性。

Lua天生就是作为一个极其轻量、可嵌入的设计实现,它更适合做API的封装或是数据传输的中间层,假如需要跨设备边界,并在不同语言环境中进行移植,Javascript是个更好的选择,而且Javascript似乎已经证明了具有构建大规模复杂程序的能力。因此 , 如果是开发web、移动或社交游戏,毫无疑问node.js的优势更大。Lua则更适合做大型MMO RPG中的嵌入式脚本语言。

责任编辑:张浩 来源: 51CTO.com
相关推荐

2012-11-21 09:47:42

Pomelo游戏服务端框架开源

2019-09-16 15:30:51

2014-12-31 16:14:57

曙光超融合架构

2017-07-19 08:30:31

2020-03-02 17:49:40

大型游戏服务器

2017-07-19 16:17:53

2017-07-20 10:35:51

2013-07-25 09:56:07

谷歌水冷服务器数据中心

2009-12-17 09:13:44

微软服务器主管微软云

2018-05-18 09:43:37

服务器架构大型网站

2009-07-24 15:33:32

网易服务器魔兽

2010-08-23 15:51:36

DHCP服务器Linux

2010-08-06 12:29:17

Linux NFS服务

2010-09-08 08:55:00

后台架构数据库SNS网站

2012-03-05 15:33:21

大服务器云计算

2009-01-09 22:45:21

2022-04-28 11:19:13

WebRTC服务器架构

2013-07-22 13:51:24

监控CDN服务器刘宇

2016-08-09 19:36:48

2018-06-04 10:30:47

游戏服务器框架
点赞
收藏

51CTO技术栈公众号