Windows Azure平台上的Node.js架构
发布于 2年前 作者 himanokay 1402 次浏览

摘要:本文的灵感来源于文章《Hosting Node Applications on IIS》,本文着眼于剖析在Windows Azure平台上托管Node.js应用的优势。本文适用于不熟悉在Windows Azure平台上运行Node.js应用的开发者。 本文的灵感来源于文章《Hosting Node Applications on IIS》,本文着眼于剖析在Windows Azure平台上托管Node.js应用的优势。本文适用于不熟悉在Windows Azure平台上运行Node.js应用的开发者。

1.Windows Azure平台上的Node.js缓存架构

Iisnode通过Node.exe进程收集信息,使用命名管道与Windows上的HTTP.SYS(内核模式HTTP侦听器)通信。Node.js应用在Windows Azure上运行时,Web角色会自动转换到Windows Server实例上运行,并使用同样的iisnode启动Node应用的自动运行。

当Node.js Web站点收到一个页面请求时,将会启动一个Node.exe进程。当然,Http请求也可以通过命名管道转发。Node.exe将出来JavaScript文件,并通过iisnode和HTTP.SYS将请求回应给浏览器。当请求到达Azure服务实例时,HTTP.SYS在将请求转发到Node.exe实例前,会首先将其推送到一个内核模式请求缓存中。

由于Node.js本身不具备缓冲机制,HTTP.SYS的缓存架构有助于应对高并发站点带来的挑战。下面的示意图,显示了Node.js与HTTP.SYS缓存架构处理Web请求的机制:

2.Node.js在Windows Azure上的可扩展性

Scale Up(向上扩展):Windows Azure上的iisnode会自动启动多个Node.exe进程,以应对高并发站点访问。这使得Node.js可以充分利用多核的优势,下面的图表显示了iisnode在一个4核的Windows Azure服务实例上启动了4个Node.exe进程:

Scale Out(向外扩展):Windows Azure允许Node.js Web应用自动扩展到数百个Azure服务实例,以构建Web Farm。这仅仅需要编辑如下服务器配置文件:

<?xml version="1.0" encoding="utf-16"?> <ServiceConfiguration> <Role name="Node_JS_WebRole"> <Instances count="4" /> <Certificates /> </Role> </ServiceConfiguration> 配置一旦应用,Windows Azure Fabric Controller将会自动匹配指定的配置。另外,在Windows Azure中,还给出了脚本自动部署的服务管理API。

下图显示了一个大型Web角色实例通过Windows Azure Fabric Controller自动扩展到4个角色实例上以实现负载均衡。对于一个给定的Azure角色实例,由Node.exe汇集的HTTP流量被iisnode通过负载均衡管理。

3.在Windows Azure上敏捷部署Node.js解决方案

基于NoSQL的Node.js解决方案快速部署。Windows Azure通过Azure表提供NoSQL数据库服务。因此,开发者不必担心NoSQL数据库的安装部署、可扩展性、网络以及备份和恢复。下面是一个针对Azure表的Node.js存储编程示例:

var tableService = azure.createTableService();
var tableName = 'tasktable’;
http.createServer(function serverCreated(req, res) {
tableService.createTableIfNotExists(tableName, tableCreatedOrExists);
function tableCreatedOrExists(error)
{
res.writeHead(200, { 'Content-Type’: ‘text/plain’ });
if (error === null){
res.write('Using table ' + tableName + ‘\r\n’);
res.end();
} else {
res.end('Could not use table: ' + error.Code);
}
}
}).listen(port); Node.js分布式解决方案快速部署。Windows Azure NPM允许Node.js使用服务总线队列构建面向消息的应用。由于服务总线队列本身是一个托管服务,所有开发人员不必担心其基础设施的配置与扩展性。开发人员只需创建一个服务总线队列的名称空间,即可使用。

4.Windows Azure对Node.js的多环境支持

现实世界中,应用可能需要不同的场景。比如,有的场景用于测试环境,有的场景用于生产环境。Windows Azure支持多环境的移动或部署,下面是一个示意图: 原文链接:The Top Benefits of Running Node.js on Windows Azure

2 回复

Windows Azure是免费的吗?

回到顶部