Статьи

Основные преимущества запуска Node.js в Windows Azure

Вступление

Эта статья вдохновлена ​​тем, что пишут приложения хост-узла Tomasz на IIS, в которых рассказывается о преимуществах запуска Node.js на сервере Windows через iisnode. В этой статье я хотел сосредоточиться на предоставлении ему цвета Windows Azure и перечислить преимущества запуска Node.js на облачной платформе Microsoft. Некоторые из этих преимуществ уникальны для Windows Azure, а другие применимы как для локальной Windows, так и для Windows Azure. Этот пост предназначен для разработчиков Node.js, которые не знакомы с запуском программ для узлов в Windows Azure. Основы разработки Node.js в Windows Azure можно узнать по адресу http://www.windowsazure.com/en-us/develop/nodejs/ .

Node.JS Архитектура развертывания в Windows Azure и режим ядра Буферизация HTTP-запросов

Iisnode — это включающий компонент, который связывает http.sys (прослушиватель HTTP режима ядра) в Windows с коллекцией процессов Node.exe через именованные каналы. Во время выполнения веб-роль Windows Azure преобразуется в экземпляр Windows Server и, следовательно, использует тот же iisnode для включения автоматического запуска приложений Node в Windows Azure.

Когда веб-сайт Node.js получает запрос на веб-страницу, iisnode запускает процесс Node.exe. Если это еще не сделано, он отправит запрос http через именованный канал. Node.exe обработает соответствующий файл JavaScript и отправит ответ обратно в веб-браузер через iisnode и http.sys. Когда запрос поступает в экземпляр службы Azure, http.sys объединяет их в буфер запроса режима ядра, а затем направляет их в экземпляр node.exe.

Поскольку сам node.js не выполняет буферизацию, архитектура буферизации запросов http.sys поможет уменьшить количество ошибок сервера на веб-сайтах с большим трафиком. Следующая схема показывает архитектуру обработки запросов Node.js с буферизацией http.sys.

образ

Приведенная выше диаграмма представляет собой объединение статических и динамических архитектурных представлений, которые могут запутать некоторых; надеюсь, он передает суть потока обработки запросов Node.js.

Iisnode очень специфичен для Windows и Windows Azure. Он сочетает в себе преимущества кластера , супервизора , инспектора узлов , навсегда и статического узла [источник: блог Томаша Янчука ]. Iisnode упрощает настройку сценариев масштабирования и масштабирования в Windows по сравнению с платформами, отличными от Windows.

Node.JS Масштабируемость в Windows Azure

Масштабирование: Iisnode в Windows Azure порождает несколько процессов Node.exe на веб-сайтах с высоким трафиком автоматически. Это позволяет Node.JS использовать преимущества нескольких ядер в веб-роли, которые могут варьироваться от 1 ядра (маленький экземпляр) до 8 ядер (очень большой экземпляр), что позволяет масштабировать веб-приложение в данном экземпляре службы. На следующей диаграмме показано, что Iisnode породил 4 экземпляра Node.exe в 4-ядерном экземпляре службы Windows Azure:

образ

Без iisnode в Azure необходимо использовать модуль Node, такой как «cluster», и писать код для разветвления дочерних процессов и управления экосистемой «главный / рабочий». Однако «основной» процесс может быть единственной точкой отказа — если мастер отключается, в конечном итоге потребуется ручное вмешательство, чтобы привести главный процесс и рабочие процессы к уровню, который соответствует количеству ядер.

Iisnode в Azure управляет рабочими процессами узла на основе количества экземпляров, заданного в файле конфигурации узла. Сам Iisnode управляется IIS, за которым, в свою очередь, следит ОС Windows. Следовательно, будет меньше возможностей для систематического сбоя обработки Node.js. По сути, с iisnode вам не нужен mater-процесс и вам не нужно писать код для разветвления и управления дочерними процессами.

Масштабирование : Windows Azure позволяет веб-приложениям Node.js автоматически масштабироваться по мере необходимости до веб-фермы из сотен экземпляров службы Azure. Это можно сделать с помощью простых изменений конфигурации службы, как показано ниже:

    <?xml version="1.0" encoding="utf-16"?>
    <ServiceConfiguration>

        <Role name="Node_JS_WebRole">

             <Instances count="4" />

            <Certificates />

            </Role>

    </ServiceConfiguration>

После того как указанные выше изменения конфигурации сохранены на портале Azure.com для приложения Node, контроллер фабрики Azure автоматически порождает экземпляры службы, так что окончательное число соответствует номеру, указанному в конфигурации. Windows Azure также предоставляет API-интерфейсы управления службами для сценариев автоматического масштабирования аспектов развертывания.

образ

На приведенной выше диаграмме показано, что каждый большой экземпляр роли (4 ядра) охватывает 4 экземпляра Node.exe, и 4 таких экземпляра автоматически добавляются в балансировщик нагрузки с помощью Windows Azure Fabric Controller. Внутри данного экземпляра роли Azure трафик Http в коллекцию процессов Node.exe управляется iisnode посредством балансировки нагрузки.

Гибкость разработки с управляемыми сервисами

Легко разрабатывайте Node.js-решения на базе NoSQL

Windows Azure предлагает Azure Tables — базу данных NoSQL в качестве службы. Поскольку возможности Azure Table являются управляемой службой, разработчику не нужно беспокоиться о физической настройке базы данных NoSQL с учетом доступности, масштабируемости, работы в сети, резервного копирования и восстановления. Разработчики могут сразу начать работать с помощью привязок JavaScript, доступных как часть Azure NPM, для выполнения операций над таблицами Azure. Ниже приведен отрывок примера доступа к таблицам Azure в Node.JS из Службы программирования таблиц хранения в 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.

Windows Azure NPM содержит привязки Node.js для создания приложений, ориентированных на сообщения, с использованием очередей служебной шины. Поскольку Service Bus является управляемой службой, разработчикам не нужно беспокоиться о настройке инфраструктуры, кластеризации и любых других сетевых конфигурациях. Разработчикам просто необходимо создать пространство имен служебной шины и начать использовать службу для интеграции с другими приложениями и службами в слабосвязанной форме.

образ

Разработчики Node.JS часто борются с такими библиотеками, как ZeroMQ, за типы интеграции, показанные выше. Хранилище служебной шины и очереди Azure может освободить разработчиков от сложности разработки на стороне клиента, а также от управления инфраструктурой на стороне сервера.

Ниже приведен пример кода: [источник: поддержка служебной шины в Azure npm 0.5.2 ]

var serviceBusService = azure.createServiceBusService();

serviceBusService.createQueueIfNotExists('taskqueue', function(error, created){

     if(!created){

         // Queue exists

     }

});

 

Вот как вы отправляете сообщение с определенной темой [источник: http://codebetter.com/glennblock/2012/02/14/servicebus-support-in-azure-npm-0-5-2/] 

var serviceBusService = azure.createServiceBusService();

serviceBusService.sendTopicMessage('taskdiscussion', 'Hello world!', function(error){

      if(!error){

          // Message sent

      }

});

И, наконец, вот как вы опрашиваете очередь на наличие сообщения.

var serviceBusService = azure.createServiceBusService(),

topic = 'taskdiscussion',

subscription = 'client1';

serviceBusService.createSubscription(topic, subscription, function(error1){

    if(!error1){

       // Subscription created

        serviceBusService.receiveSubscriptionMessage(topic, subscription,

            function(error2, serverMessage){

                if(!error2){

                    // Process message

             } 

        });

    }

});

Поддерживает гетерогенные среды приложений

Node.JS в Windows Azure может работать параллельно с ASP.NET, PHP, RAILS и любыми другими средами серверов приложений, которые программист желает использовать для доставки полного приложения. Iisnode будет в пути выполнения только для предварительно настроенных файлов .js. Остальная часть контента будет обходить iisnode и, следовательно, может мирно сосуществовать на одном виртуальном сервере. Давайте проиллюстрируем это на простом примере. В данном виртуальном каталоге у меня есть webform.aspx, clientutil.js и productservice.js.

Следующий простой файл web.config гарантирует, что productservice.js будет обрабатываться Node.exe, а webform.aspx — через механизм asp.net на сервере. ClientUtil.js будет обрабатываться IIS как клиентский JavaScript и, следовательно, передает его как файл сценария.

//web.config file that maps .js files to node.exe

<configuration>
     <system.webServer>
        <handlers>
           <add name="iisnode" path="productservice.js" verb="*" modules="iisnode" />

  </handlers>
</system.webServer>
</configuration>

Управление и Операции

Несколько Node.JS Сред

Windows Azure автоматически поддерживает пару сред для каждого экземпляра службы Azure, в которой размещено приложение Node.js — подготовка и производство. После развертывания и тестирования приложения Node в промежуточной среде простой обмен виртуальными IP-адресами сделает его доступным в производственной среде. Конечно, необходимо убедиться, что любые зависимости, такие как базы данных, также переключаются на производственные среды перед таким VIP-обменом.

Многие реальные приложения требуют более двух сред; Azure позволяет создавать несколько экземпляров службы Azure и при необходимости перемещать развертывание из одной среды в другую. Вот схема, которая дает представление о типичной среде развертывания Node.js в Azure:

образ

Windows Azure позволяет создавать несколько экземпляров службы, которые представляют типичную среду ALM. На приведенной выше диаграмме в Azure определены 3 экземпляра службы. Каждый экземпляр службы будет иметь промежуточную и производственную среду, между которыми можно переключать развертывания одним движением переключателя. Среди многих облачных платформ это уникально для Windows Azure; эта настройка позволяет развернуть сборку с ошибками регрессии путем простой замены IP-адреса. Несколько экземпляров службы позволяют разработчику изолировать зависимости приложений, что позволяет упростить управление конфигурацией.

Автоматическое обновление

Iisnode в Azure автоматически управляет жизненным циклом процесса Node.exe во время обновления кода. Если модуль JavaScript изменяется, iisnode позволяет обслуживать текущие запросы из существующих экземпляров Node.exe, в то время как он перенаправляет новые запросы во вновь созданный процесс Node.exe. Старые процессы в конечном итоге будут уничтожены, когда больше не будет запросов в полете.

Без iisnode нужно использовать такой Node-модуль, как supervisor, который отслеживает список файлов .js. Если файл JavaScript должен был измениться, супервизор убивает текущий процесс и перезапускает его для выполнения измененного кода. Чтобы получить то же поведение, что и в автоматическом управлении процессами Windows Azure с помощью iisnode, необходимо сочетание «кластер» и «супервизор». Кластер и супервизор создают два дополнительных процесса для управления трафиком и мониторинга изменений файлов, что добавляет дополнительные точки отказа.

Supportability

Отладка удаленного сервера часто включает запись console.log в stdout и / или stderr. Iisnode в Azure перенаправляет эти журналы в файл, к которому можно получить доступ как к обычным текстовым файлам. Это может быть включено с помощью простой конфигурации; iisnode создает специальный каталог для каждого файла .js и может скрывать файлы, чтобы скрыть их от посторонних глаз. Защита файлов журналов с помощью традиционной интернет-безопасности является ключом для предотвращения несанкционированного доступа к этим файлам журналов. Для доступа к журналу через http дополнительные модули NPM не требуются.

Доступ к файлу журнала Node.js в других операционных системах потребует дополнительных модулей NPM, таких как log.io, чтобы упростить доступ к файлу журнала, когда у вас нет доступа к серверу через удаленный рабочий стол или SSH.

Отладка нулевой настройки через нод-инспектор

Отладка приложений JavaScript требует ручного запуска процесса инспектора узлов перед отладкой логики приложения в ОС, отличной от Windows. В Windows Azure и Windows OS при установке iisnode автоматически устанавливается инспектор узлов. Доступ к отладчику отладки (например, http: // <dnsname> /server.js/debug) для данного файла .js автоматически запустит прослушиватель отладки инспектора узла, который позволяет устанавливать точки останова в веб-браузере с поддержкой WebKit.

Как только сеанс отладки подготовлен таким образом, последующая отладка приложения может начаться с обращения к соответствующему файлу .js в другом окне браузера. Как упоминалось выше, отладка Windows Azure с помощью инспектора узлов может быть выполнена в любом веб-браузере с поддержкой webkit, включая Google Chrome и FireFox. Пошаговое руководство по отладке приложений Node.js в Windows можно найти по адресу: http://tomasz.janczuk.org/2011/11/debug-nodejs-applications-on-windows.html .