国内知名的 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 中文站的相关链接。
评论