CNodeJS 社区的 Node App Engine 启动内测

  • 崔康

2011 年 10 月 11 日

话题:JavaScript社区性能调优DevOpsNode.js语言 & 开发架构文化 & 方法

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

JavaScript社区性能调优DevOpsNode.js语言 & 开发架构文化 & 方法