Velocity China 2012 Web性能与运维大会在北京召开,在本次Velocity上谢骋超为大家分享的话题是《构建快速、可扩展node.js游戏服务器》。
1049497z8tdw57ddtw57wl.png
  谢骋超 网易杭州研究高级程序专家

  谢骋超 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实现了独一无二的服务器扩展机制,非常简单、非常的轻量级。
  三、性能。性能毫无疑问是所有服务器框架都要重点考虑的, 尤其是游戏服务器要求的响应时间一般是100ms, 远远比普通web应用低。因此在数据的传输, 数据量,服务端的处理等方面都要深入考虑, 并且需要做完整深入的压力测试。
  之前看过暴雪出售的退役服务器,游戏服务器就意味着更高的硬件么?设计游戏架构与采用游戏架构的时候需要怎样看待硬件的使用问题。
  谢骋超:不一定,现在主流的web服务器配置已经非常好了,足够支撑普通游戏服务器的需求。尤其是使用pomelo框架开发的游戏服务器非常的轻量级, 占用的资源非常低。
  很多移动、网页、社交游戏的服务端都是跑在云平台上的, 虚拟机的性能已经足够支撑这些需求。当然大型MMO RPG对硬件的需求要高一些,有一些计算很耗CPU, 一般一组服务器要跑在几台配置较好的刀片上。
 附:pomelo框架的压力测试

104949ud8pgyilgvgmhidu.jpg

  您是怎么看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
锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛