国内知名的Node.js社区CNodeJS最近启动了其Node App Engine服务(简称NAE)的内测,用户可以在App Engine中部署发布Node.js应用,并提供mongoDB数据库存储。InfoQ中文站通过内测账号访问了Node App Engine服务,了解了部署的过程,并采访了NAE的负责人廖凯和苏千。
\目前,NAE基于Node.js 0.5.5版提供应用托管服务。对于内测账号,最多支持创建十个应用,每个应用可以选择独立的二级域名(采用xxx.cnodejs.net的格式,例如helloworld.cnodejs.net)。对于新创建的Node.js应用,可以选择启用mongoDB数据库。
\在代码管理方面,NAE支持开发人员以压缩包(gz/zip)方式上传Node.js应用代码(如果多次上传,将覆盖同名文件)。同时,NAE还提供了Git Clone/Pull和npm install的功能,方便开发人员使用第三方代码和模块。
\在线编辑是NAE服务的一个亮点。开发人员可以在称为NAE IDE的Web界面中直接打开有关代码文件进行修改和保存。其中,模块标准的package.json是应用的配置文件,name表示应用名字,main表示应用的执行入口文件。在保存之后,可以点击重启按钮来即时查看修改效果。同时,在IDE界面下方有stdout和stderr输出窗口显示。除此之外,NAE还提供了一些项目管理的功能,比如待办事项、邀请成员加入等。
\在应用代码部署到NAE之后,开发人员即可发布,在汇总信息一览可以近乎实时的看到应用的内存消耗、堆内存、运行时间、进程ID号等。
\针对Node开发者关心的问题,InfoQ中文站采访了NAE平台的两位负责人廖凯和苏千,他们详细介绍了NAE各个方面的情况。
\InfoQ:NAE项目发起的目的是什么?何时会正式上线?
\\\node.js对于初学者的门槛还是比较高的,要完整部署整套开发和运行环境,可能会吓跑很多初学者。CNode社区一直以来的目标是推动node.js在国内的发展。因此希望搭建一个特别简单、易用、高效、适合协作开发的node应用托管平台。同时也可以为国内一些没有自己服务器的node发烧友提供一个免费的应用运行环境。在社区贡献过node技术文章的作者,都可以首批使用NAE。这样有更多的技术文章出现,也会反过来促进node的发展。
\目前还没有正式的上线时间,可能会在年底会发布。当前处于内测阶段,还有很多实用功能正在开发中。
\
InfoQ:内测进展如何?改进了哪些问题?
\\\目前更多侧重核心系统的稳定性、兼容性、内置模块与node模块的筛选。
\已实现对95%的js原生模块无缝支持,提供基于web的开发环境,以及mongodb的存储支持,提供了比较简单的协作开发与开发者社区功能。
\
InfoQ:NAE上线后会继续提供免费服务吗?有何规划?
\\\社区版的NAE永远都不会收费,只是对于使用者会有一点小小的要求,希望是真心希望学习的node初学者或者node发烧友。
\目前NAE的核心引擎部分,同时已经应用在阿里云的ACE中,ACE是一个类似于GAE的商业应用开发者平台。马上NAE核心引擎也会应用在淘宝实验室(Taobao Labs)的开发者平台中,为淘宝的开放平台(T.O.P)应用提供一个快速服务托管环境。
\未来也欢迎和其他机构合作,但是这并不影响社区版服务的免费。
\
InfoQ:NAE系统的硬件配置如何?是否能够承受企业级的负载?
\\\核心系统自身开销很小,线上环境使用阿里云提供的一台云服务器,8G物理内存+4核CPU。Node自身性能来说已经能承受很大的负载,目前性能测试结论在hello worlds erver下可以做到17k qps,更多的scaleout/scaleup处于开发计划中。
\
InfoQ:对每个应用来说,NAE是否有内存、CPU等资源的上限?
\\\内测阶段从挖掘系统潜力来说没有做过多限制,内测结束后会对cpu和内存消耗做一定限制。
\
InfoQ:NAE的基本架构是什么样的?用到了哪些技术?
\\\使用全新实现的Module引擎与沙箱作为应用容器,在沙箱内利用重新实现的require函数对模块调用进行安全处理,并利用v0.5系列提供的child_process.fork功能在独立子进程中运行应用,通过注入原生net模块将端口监听映射为unix sock监听,并结合独立运行的proxy模块解决多应用监听同一端口问题。
\
InfoQ:NAE为何选择mongoDB数据库?对于其他数据库的支持如何?
\\\mongoDb简单易用,扩展性与功能都比较符合目前web开发的需求,且本身和js的结合比较好。
\原则上有可用modules的数据库均可直接支持。
\
InfoQ:目前NAE上有哪些出色的应用可以演示?
\\\目前已知的有趣应用: (估计还有一些参加CNodejs大赛的应用还没暴露出来。)
\在线书法:http://sufa.cnodejs.net/
\
\协助画图:http://paint.cnodejs.net/
\qchat:http://qchat.cnodejs.net/
\随机聊天:http://talk.cnodejs.net/
\天气API:http://weather.cnodejs.net/
\NodeBook:http://nodebook.cnodejs.net/
\NR牛博:http://nrblog.cnodejs.net/
\缩短网址还原:http://urlrar.cnodejs.net/
\NodeBlog:http://blog.cnodejs.net/
\关键词日记: http://keydiary.cnodejs.net/
InfoQ:NAE未来(一年内)会增加哪些新功能?
\\\包括动态扩容、版本控制、web ide的完善与debug支持、协作开发、日志API、存储API、命令行工具、开发者社区等。
\
InfoQ:对Node.js的学习者有何建议?
\\\js基础很重要;了解ecmascript 5;开发思路的转换(同步串行到异步并行);用于尝试,勤于测试。
\
开发人员在使用NAE时,需要注意一些事项:
\- 系统node使用v0.5.5版,使用时请注意与0.4.x的功能区别。\
- 使用fs对文件进行写操作会触发整个文件的重新上传, 在写大文件时请慎重使用。\
- 如有日志方面需求请暂时使用标准输出(stdout/stderr)实现, 很快将开发日志操作API。\
默认支持的第三方模块包括:
\- express\
- connect\
- mongoskin\
- mongoose\
- mysql-libmysqlclient\
- jade\
如需使用其他模块请放入$app_home/node_modules即可。
\另外,禁用的API有:
\- child_process\
- net.listenFD()\
- net.listen() 仅支持port与callback参数, 不支持监听unix domain sock与指定监听ip\
- fs.rename() / fs.renameSync() 不支持对目录进行操作\
- fs.link() / fs.linkSync()\
- fs.symlink() / fs.symlinkSync()\
更多有关Node.js的新闻和文章可以查看InfoQ中文站的相关链接。