网易 NodeJS 开源游戏框架 pomelo 访谈

阅读数:16493 2012 年 11 月 20 日

话题:Web框架QConDevOpsNode.js语言 & 开发架构

被采访者介绍:

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

谢骋超曾在 9 月份的HuJS 活动中分享过“Node.js 游戏服务器开发 ”的话题。目前他准备对相关研究成果 pomelo 框架进行开源发布,InfoQ 对其进行了专访。

InfoQ:能不能介绍一下 pomelo 的起因及发展历程?

从 2011 年下半年开始, 我们在游戏开发上有了些积累,希望在游戏服务器上有更前沿的研究,在技术选型时我们比较了 erlang, node.js,java 等多种语言,发现 node 很适合做开发游戏服务器,它的事件 IO 模型与单线程应用模型跟游戏服务器简直是绝配。于是在 2011 年 11 月, 我们正式立项并取名项目为 pomelo。

项目的开发经历了原型、框架开发、demo 开发,性能优化, 不断重构、调优、整理等几个阶段。

我们的原型开发只经历了一个月, 当时做了个很简单的捡宝游戏; 框架的抽取和开发是项目最难的阶段, 要定义抽象出框架模型很难, 而且我们是多进程的应用框架, 完全没有蓝本参考, 到了 2012 年 4 月终于完成了框架雏形;之后的 demo 开发比较快, 我们用了一个半月时间就搭建了一个 HTML5 客户端的网页版的 MMORPG, 并在 6 月底的 node party 上小试牛刀了一把;然后我们用了两个月时间做压力测试和性能调优,做了一些性能优化的工具,并把遇到的性能瓶颈都解决了;到了 9 月之后我们的主要工作就是重构、文档, 不断地优化接口,并在 11 月 20 日左右开源我们的框架。

InfoQ:给这个框架命名为“pomelo”的含义是什么?它有什么特点?

pomelo 的中文含义是柚子, 当时是想借某水果公司的光环,而且这个名字够短, 读起来也有点酷酷的感觉。我们的 logo 是切成两半的柚子, 代表着分享、开源。

pomelo 包含了框架、工具集、库三部分。它最大的特点是将易用性和可伸缩性结合得非常好,我们会发现写一个非常复杂的多进程游戏运行架构只需要很少的代码。

InfoQ:请介绍一下 pomelo 在网易的使用情况吧。另外你觉得它最适合的应用领域是什么?

pomelo 到现在为止刚刚一年,刚刚可以使用,目前公司内部的一些团队正在试用, 但还没有在网易线上的游戏中使用。 它最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现 pomelo 可以用如此少的代码达到强大的扩展性和伸缩性。 当然还不仅仅是游戏,很多人断言未来的 web 时代是实时 web 应用的时代, 我们发现用 pomelo 开发高实时 web 应用也如此合适, 而且伸缩性比其它框架好。

我们不推荐将 pomelo 用于大型的 MMO rpg 游戏开发,尤其是 3d 游戏, 还是需要象 bigworld 这样的商用引擎来支撑。

InfoQ:pomelo 面向的群体是哪些人?要掌握其使用需要哪些技能?有哪些资源可供开发者学习和应用?

pomelo 面向的群体是国内外网页、移动、社交游戏的开发团队,或开发高实时 web 应用的团队,即使以前没有游戏开发的经验,通过简单的学习也很容易上手。

pomelo 的目标是让本来游戏开发经验不多的人能迅速上手开发游戏,而且做出的游戏天然有很强的扩展性和可伸缩性,可直接在产品环境上跑,而不象一些游戏教程只能做出支撑很少在线用户。

开发者需要掌握 javascript 和 node.js 的开发知识, 也要学习一下 pomelo 框架。幸好这几项技术都比较容易上手, node.js 的异步事件 io 需要一点点时间适应, 但这样的学习完全是值的。

node.js 的学习可以去 node.js 官网: nodej.org,cnode 社区 cnodej.orginfoq 的 node 社区内容也不错,howtonode是个不错的学习博客,只是最近更新稍慢。

pomelo 的学习可以去我们的wiki, pomelo 的官方网站,和 pomelo 的github

InfoQ:现在有没有和 pomelo 类似的框架?能否请比较一下他们的优势与劣势?

目前没有发现与 pomelo 完全类似的框架, 尤其将多进程应用架构和服务器扩展做的这么简单,属完全创新。

游戏服务器框架在社区范围里乏善可陈, SmartfoxServer 算是一个不错的了,但它是商用的,而且它是基于 jvm 的单进程架构,可伸缩也打了折扣。

Bigworld 则是很强大的商用 3d 游戏引擎(涵盖服务端、客户端)。Bigworld 更适合大规模的游戏开发,但时间,复杂度,成本等比较高。pomelo 的优势是开源,简单,快速开发,可以让使用者很快地开发出并发布他们自己的游戏,并能很灵活地规划调整服务器资源,支撑的游戏类型和规模也不错。

在高实时 web 应用领域,有 derby,meteor, SocketStream, 但跟 pomelo 的关注点很不一样,它们基本都是单进程架构,核心关注点是 web 应用的实时数据同步。

InfoQ:能否讲讲关于 pomelo 的理念及实现?

pomelo 的第一个理念是让游戏(高实时 web 应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟 rails 是很类似的。

第二个理念是重视性能和可伸缩性,用户用 pomelo 开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行。

第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件 component、路由规则、甚至管理控制台都可以完全由第三方扩展。

InfoQ:我们注意到 pomelo 已经准备好了项目英文站点,是打算将 pomelo 做全球推广吗?

是的, 我们认为目前的开源产品必须走国际化的路线,目前国外的开源环境也比国内好。况且 node 社区和 github 是非常活跃的社区, 通过与国外开发者的沟通和交互,可以使我们最快地完善我们的开源框架。

另外,我们的设计理念和架构在国际社区里也是领先的,可以去国际开源社区试一试。

InfoQ:最后一个问题,有没有什么意见或者建议给转用 Node 的开发者?

首先, 对于非 node 的开发者,建议无论如何看一看 node 的开发模型,了解一下,也许哪天你就会用到;异步编程也没那么可怕,很多关于异步代码太丑, 甚至异步反人性的言论, 只是因为他们还没有深入去用,用 node 完全可以写出很漂亮的代码。

对于 node 的开发者,

一、多看资料,多实践 。对于入门学习的,可以看 node.js in action 等书籍,如果过了入门阶段,建议去 mailing list 或 youtube 上看视频可以学到更深入的内容。

二、多来社区交流, node 社区, cnode 社区,node party,jsconf 中国 (今年叫沪 js,明年可能叫京 js),github,沟通很重要。

谢骋超之后会对 pomelo 框架的技术细节做详尽解析。请关注 InfoQ 的后续技术文章。

另外,QCon 北京 2013亦与时俱进,新增了 Node 专场。Node 现在到底只吸引了眼球,还是在企业中已经成熟落地广为应用?敬请关注此次 QCon,聆听诸多一线专家在各个场景应用 Node 的经验。11 月 25 日前报名,可享 6 折优惠。