拥抱 Node?最新的 AWS 云提供 Node.js 应用服务

  • Richard Seroter
  • 李彬

2013 年 4 月 22 日

话题:AWS云计算DevOpsNode.js语言 & 开发架构

最近,Amazon Web Services(AWS)团队在Elastic Beanstalk服务中加入了对 Node.js 的支持,使它所支持的平台的集合处于行业领先地位。除了 Node.js,AWS Elastic Beanstalk 还支持开发者打包、部署和管理使用 Java、PHP、.NET、Ruby 和 Python 开发的应用。AWS 加入了“青睐 Node.js 的云服务”这个竞争激烈的领域,并将尝试通过整合其他顶级 AWS 服务来让自己与众不同。

在一篇关于向 AWS Elastic Beanstalk添加 Node.js 的博客文章中,AWC 的首席技术官 Werner Vogels 解释了将这个日趋流行的平台纳入支持范围的一些原因。

我花了大量的时间与许多在游戏和移动领域工作的 AWS 开发者沟通,他们中的大部分都在寻找适合自己的 Web 应用的 Node.js。凭借其异步的事件驱动编程模型,Node.js 允许开发者们处理大量并发连接并保持低延迟。这些开发者们一般使用与我们的一个数据服务相结合的 EC2 实例来创建 Web 服务,这些 Web 服务可用于数据检索或创建动态的手机界面。

针对 Elastic Beanstalk 中的 Node.js,AWS 团队的 Jeff Barr 列出了一些他喜欢的特性

  • 开发者选择NginxApache作为自己 Node.js 应用的反向代理。如果应用的客户端需要建立起直接连接,开发者甚至可以选择不使用任何代理。
  • 根据应用需要,配置 HTTP 和 TCP 的负载均衡。如果应用使用 WebSockets,那么对应用的工作负载而言,TCP 负载均衡可能更加适用。
  • 使用应用需要的特定版本的 Node.js,或提供用于启动 Node.js 应用的命令,以配置 Node.js 栈。开发者还可以使用npm管理依赖关系。
  • 当使用 Nginx 或 Apache 时,通过配置 gzip 压缩和静态文件以帮助提升性能。使用 gzip 压缩,开发者可以减少面向客户端的响应的大小,从而加快传输速度。使用静态文件,开发者可以让 Nginx 或 Apache 快速提供静态资源(例如图片或 CSS),而不必与 Node.js 应用在执行的数据密集型处理争抢时间。
  • 将应用与Amazon RDS无缝整合,以便在相关的数据存储中存储和检索数据。
  • 定制自己的 EC2 实例,或使用 Elastic Beans 配置文件将应用连接到 AWS 资源(访问 AWS Elastic Beanstalk 开发者指南以进一步了解配置文件)。
  • Amazon 虚拟私有云中运行 Node.js 应用以获得额外的网络控制。

除了以上列出的特性,Elastic Beanstalk 还支持Git 整合高可用性集群以及使用针对特定环境的变量。2012 年 12 月,AWS 初次尝试涉足 Node.js 领域,并为 Node.js 开发者发布了一套 SDK。该 SDK 支持使用绝大多数 AWS 服务,包括 Amazon DynamoDB、Amazon Simple Storage Service (S3)、Amazon Relational Database Service (RDS)、Amazon Simple Queue Service (SQS) 和 Amazon Elastic Compute Cloud (EC2) 等。

AWS 与其他许多提供 Node.js 应用服务的云服务建立了连接。除 Google App Engine 外,几乎每个主流平台即服务(PaaS)厂商都提供了基于 Node.js 的 fabric(注:fabric 计算,指的是由松散耦合的存储、网络、高速宽带连接所组成的并行处理高性能计算系统。),包括HerokuWindows AzureOpen ShiftEngine Yard,以及众多 Cloud Foundry 的提供者。这些厂商也都在与Nodejitsu竞争,它是 Node.js 领域的精神领袖并提供专用的平台。那么这些厂商如何体现自己的独特性?一种方法是通过工具来体现。Werner Vogels 指明了 Elastic Beanstalk 是如何与众多顶级平台的开发工具紧密结合的。

开发者可以在除 GovCloud 外的任何 AWS 域中部署和管理应用。有许多工具适用于应用的部署和管理,开发者可以选择自己喜好进行选择。Java 应用的开发者可以使用用于 Eclipse 的 AWS 工具包;.NET 应用的开发者则可以使用用于 Visual Studio 的 AWS 工具包;如果开发者希望在命令行中工作,可以与 Git 一起使用一个名为“eb”的命令行工具。诸如 eXoCloud IDE 等合作伙伴也提供与 Elastic Beanstalk 的整合。

Codenvy从 exoCloud 中独立出来,它针对用于 Node.js 部署的 Elastic Beanstalk,为开发者提供一个基于云的开发环境。

云服务提供商为了在同类对手中寻求差异化竞争,除了为开发者提供构建和部署 Node.js 应用的工具外,正在整合额外服务并提供应对应用管理中的“困难”问题的解决方案。在 Elastic Beans 上运行 Node.js 的一个有吸引力的因素,是能够轻松地整合 AWS 提供的许多应用服务。Node.js 应用在 AWS 环境里运行,将能够以低延迟使用数据库、存储、计算、队列、缓存以及其他许多服务。诸如 Windows Azure 这样的云也拥有相似的价值主张,在其上部署 Node.js 应用的开发者同样能够使用不同的本地服务集合,包括数据库、存储和消息传递。如HerokuNodejitsu这样的供应商则没有自己的额外应用服务集,但它们维护了一个策划管理的目录,列出了能够与其上运行的应用整合的服务。

除了提供额外服务作为差异化竞争手段外,云服务提供商还兜售自己具有让应用部署和管理变得更容易的能力。这意味着支持基于 Web 的源代码管理仓库——像 AWS、Windows Azure 和 Nodejitsu 这些云所做的那样——并提供持续部署服务,例如 Nodejitsu 通过 TravisCI 支持这一服务。高质量监控和响应系统,让开发者和管理员的容量管理工作变得简单了许多。AWS 拥有用于监控云的使用情况并自动调整应用环境大小的产品,而Werner Vogels 描绘了 Elastic Beanstalk 如何帮助提供具有全部管理能力的应用。

Elastic Beanstalk 能够自动化提供、监控和配置许多 AWS 基础资源,例如 Elastic 负载均衡、自动扩展和 EC2。Elastic Beanstalk 还提供了用于部署应用、处理日志并自定义 EC2 实例的自动化工具。

请密切关注这一领域。云服务提供商正在提高其平台的应用管理能力,并提供本地的或整合的服务以提升其平台上运行的应用有效性。

查看英文原文Got Node? AWS Latest Cloud to Offer Node.js Application Services


感谢崔康对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

AWS云计算DevOpsNode.js语言 & 开发架构