网易NodeJS开源游戏框架pomelo访谈
被采访者介绍:
谢骋超,网易杭州研究高级程序专家,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.org, infoq的node社区内容也不错, howtonode是个不错的学习博客,只是最近更新稍慢。
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折优惠。