Використання Node.js технології як платформу для оптимізації серверних потужностей

image
Web-програмування стрімко розвивається і з'являється необхідність вибору між сформованими мовами такими як PERL, C++ і Java і сучасними веб-орієнтованими або прототипно-ориентироваными мовами як наприклад Ruby або Go. Один з таких мов є JavaScript. Багато років була присутня думка JavaScript що це клієнтоорієнтований мова програмування і майбутнього у нього немає, але після того, як компанія Google випустила стабільну версію JavaScript-движка V8 з'явився Node.js і його стали використовувати як абсолютно нової ідеї, серверного JavaScript.

Node.js продовжує розвиватися динамічно і амбіційно. Так наприклад, протягом кількох останніх років розробниками було додано близько 200 000 модулів для Node.js це перевищує в кілька разів темпи розвитку вже усталених серверних мов, таких як Perl у якого кількість модулів у репозиторії менше. Так само потрібно підкреслити що технологія Node.js набирає обертів і використовується такими компаніями, як Yahoo, Microsoft, PayPal і LinkedIn, не кажучи вже про гугл.

Node.js розрахований на задачі, які мають веб-інфраструктуру і мобільні додатки, в back-end яких треба в режимі real-time вносити зміни, використовуючи архітектуру, побудовану на базі микросервисов. Node.js здатний істотно скоротити час на розробку додатка, не змінюючи при цьому логіку програми.

Node.js так само підходить для додатків, побудованих на базі архітектури микросервисов, з-за низького споживання ресурсів процесора, свого ефективного використання ОЗУ і обчислювальної потужності. У більшій мірі це помітно у задачах, пов'язаних з операціями, що споживають багато пам'яті на ввід/вивід, ніж на використання процесора, так як підхід до реалізації моделі виконання Node.js дозволяє симулювати паралельність завдання, спираючись на моделі узгодженого потоку виконання, яка не вимагає складних технік паралельного програмування.



Для побудови власних рішень можуть застосовуватися вже готові модулі, які просто адаптуються до конкретного проекту. Так, наприклад, одним з найпоширеніших Web application framework є «Express», база даних може використовуватися як реляційна (MySql) так і нереляционная (MongoDB), так само можна використовувати різні модулі для варификации і форматування даних.

Установка Node.js і NPM під Linux (Ubuntu 16.04):

sudo apt-get install nodejs
sudo apt-get install npm

Установка бібліотек WS, FS, Mysql і MongoDB з NPM:

npm install ws //установка веб-сокет модуль
npm install fs //установка модуля для роботи з файловою системою
npm install mysql // встановлення mysql модуля
npm install –g mongodb //установка mongodb модуля глобально

Приклад встановлення з'єднання з базою даних:

var url = 'mongodb://127.0.0.1:27017';
var db = '/your_collection';

// init DB
var MongoClient = require('mongodb').MongoClient;
// connect with mongo
MongoClient.connect(url + db, function (err, mongoclient) {
if (err) {throw err}
var db_object = mongoclient.collection('collection');
db_object.find({_id:some_id});
});

Для запуску nodejs скрипта потрібно викликати команду перебуваючи в тій же директорії, де ви встановлювали npm пакети, тобто на одному рівні з папкою «node_modules»:

nodejs путь_к_файлу/имя_файла.јѕ

Завдяки тому що Node.js має відмінний інструмент, NPM — менеджер пакетів, c його допомогою можна керувати модулями і залежностями. Його легко використовувати і масштабувати в рамках серверного оточення. Так наприклад використовуючи Node.js для декількох проектів, ми можемо встановлювати пакети/модулі як глобально, так і локально.

Так само є ряд додаткових інструментів для комфортної роботи з Node.js. Так наприклад для підтримки процесів використовують утиліти: forever або supervisor. Перша встановлюється з менеджера пакетів NPM і служить тільки для підтримки процесів Node.js, в той час як другий вміє працювати і з іншими утилітами такими як RabbitMQ, Bash Scripts і тим самим є більш універсальною. Так само існує модуль supervisor який встановлюється як пакет для Node.js і грає роль спостерігача за змінами в скрипті і автоматичного перезапуску без витоку пам'яті ОЗУ і без очищення межмодульних залежностей.

Установка Supervisor:

sudo apt-get install supervisor

Файл конфігурації supervisor знаходиться в директорії: /etc/supervisor/

Для включення доступу через web-інтерфейс потрібно додати в файл /etc/supervisor/supervisord.conf:

[inet_http_server]
port=*:9001
username=логін
password=пароль

Для проекту необхідно створити файл конфігурації запуску node.js скрипта в директорії:
/etc/supervisor/conf.d/файл.conf:

[program:имя_проекта]
directory=/шлях/до/проекту
command=nodejs путь_к_файлу/имя_файла.јѕ
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/ім'я_файла.err.log
stdout_logfile=/var/log/supervisor/ім'я_файла.out.log

Так само Node.js має ряд модулів для логгирования, найпопулярніші (log4j, winston, bunyan, intel). Вони дозволяють логгировать як сценарій програми так і безпосередньо системні повідомлення (ERROR, WARN, INFO, DEBUG, TRACE). Для повернення помилок у функції може бути реалізований синхронний підхід (throw) або асинхронний підхід (callback-функції або подія), але не можна реалізовувати обидва підходи в одній функції. При використанні функції, щоб обробляти виникають в ній помилки, потрібно буде застосовувати або callback-функції, або конструкцію try/catch.

Node.js так само вміє працювати з файлами для цього він використовує модуль FS з складальника пакету NPM. Його величезний плюс над іншими модулями в тому що практично всі функції по обробці файлів мають два типи синхронне читання і асинхронне читання файлу. Так само модуль вміє працювати як з даними в різних кодуваннях, так і з цілими, дробовими числами, з числами у форматі Double і т. д.

Приклад роботи асинхронного читання файлу (без очікування):

var fs = require('fs');
fs.readFile('шлях', 'utf8', function(err, data) {
console.log(data);
});
console.log('after readFile');

Приклад роботи синхронного читання файлу (очікуванням):

var fs = require('fs');
var data = fs.readFileSync('шлях', 'utf8');
console.log(data);

image
image
image
Незважаючи на те, що Node.js не прагне зайняти місце інших мов програмування, він вже показав себе як перспективна технологія. Говорячи про серверні рішення на основі web-sockets для web і mobile-application, Node.js впевнено захищає свої позиції.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.