Nodejs在Windows Azure平台上的架构

Nodejs在Windows Azure平台上的架构

摘要:本文的灵感来源于文章《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


4 回复

Nodejs在Windows Azure平台上的架构

摘要

本文探讨了在Windows Azure平台上托管Node.js应用的优势。本文适用于不熟悉在Windows Azure平台上运行Node.js应用的开发者。

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

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

当Node.js Web站点收到一个页面请求时,将会启动一个Node.exe进程。请求可以通过命名管道转发。Node.exe处理JavaScript文件,并通过iisnode和HTTP.SYS将请求回应给浏览器。HTTP.SYS在将请求转发到Node.exe实例前,会首先将其推送到一个内核模式请求缓存中。这种缓存机制有助于应对高并发站点带来的挑战。

// 示例代码:简单的Node.js HTTP服务器
const http = require('http');

http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!\n');
}).listen(8080, () => {
    console.log('Server running at http://localhost:8080/');
});

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

Windows Azure提供了两种扩展方式:Scale Up(向上扩展)和Scale Out(向外扩展)。

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

<!-- 示例配置文件:定义实例数量 -->
<?xml version="1.0" encoding="utf-16"?>
<ServiceConfiguration>
    <Role name="Node_JS_WebRole">
        <Instances count="4" />
        <Certificates />
    </Role>
</ServiceConfiguration>

Scale Out(向外扩展) Windows Azure允许Node.js Web应用自动扩展到数百个Azure服务实例,以构建Web Farm。配置文件中的count属性决定了实例的数量。另外,在Windows Azure中,还提供了脚本自动部署的服务管理API。

<!-- 示例配置文件:定义实例数量 -->
<?xml version="1.0" encoding="utf-16"?>
<ServiceConfiguration>
    <Role name="Node_JS_WebRole">
        <Instances count="4" />
        <Certificates />
    </Role>
</ServiceConfiguration>

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

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

var azure = require('azure-storage');
var tableService = azure.createTableService();
var tableName = 'tasktable';

tableService.createTableIfNotExists(tableName, function(error) {
    if (error === null) {
        console.log('Table created or already exists.');
    } else {
        console.error('Error creating table:', error);
    }
});

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

现实世界中,应用可能需要不同的场景。例如,有的场景用于测试环境,有的场景用于生产环境。Windows Azure支持多环境的移动或部署,开发者可以根据需要配置不同的环境变量。

{
    "test": {
        "connectionString": "UseDevelopmentStorage=true"
    },
    "production": {
        "connectionString": "DefaultEndpointsProtocol=https;AccountName=<your_account_name>;AccountKey=<your_account_key>"
    }
}

通过上述配置,开发者可以在不同环境中灵活地切换数据库连接字符串等配置项,从而确保应用在不同环境下正常运行。


希望以上内容能帮助你更好地理解Node.js在Windows Azure平台上的架构及其优势。


Windows Azure是免费的吗?

在Windows Azure平台上托管Node.js应用具有多种优势,包括缓存架构、可扩展性、快速部署及多环境支持。下面是对这些方面的详细解析:

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

在Windows Azure平台上,iisnode作为IIS的一个模块,负责启动并管理Node.js应用。当Node.js应用接收到HTTP请求时,请求首先会被推送至HTTP.SYS缓存中,然后才会传递给Node.js应用。HTTP.SYS作为内核模式HTTP侦听器,能够提供高性能的请求处理能力。

// 示例代码:简单的Node.js应用
const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

2. 可扩展性

在Windows Azure平台上,Node.js应用可以通过Scale UpScale Out两种方式进行扩展。

  • Scale Up:增加单个实例的计算资源。例如,配置为4核的实例可以启动4个Node.js进程。

  • Scale Out:增加更多的实例。这可以通过修改Azure的服务配置文件来实现。

<ServiceConfiguration>
  <Role name="Node_JS_WebRole">
    <Instances count="4" />
  </Role>
</ServiceConfiguration>

3. 快速部署

Azure提供了多种方式来简化Node.js应用的部署。例如,使用Azure Table进行数据存储,或者使用Azure服务总线队列构建消息驱动的应用。

const azure = require('azure-storage');
const tableService = azure.createTableService();
const tableName = 'tasktable';

tableService.createTableIfNotExists(tableName, function(error) {
  if (error) {
    console.error(error);
  } else {
    console.log(`Table ${tableName} created`);
  }
});

4. 多环境支持

Windows Azure支持不同环境下的部署,例如开发、测试和生产环境。通过配置文件的不同设置,可以轻松切换环境。

<ServiceConfiguration>
  <Role name="Node_JS_WebRole" osFamily="5" osVersion="*" instanceCount="1">
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true"/>
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

通过以上配置和示例代码,可以在Windows Azure平台上高效地部署和管理Node.js应用。

回到顶部