Вступление
Создание реальных приложений на языке JavaScript требует динамического программирования, когда размер приложения JavaScript неуправляемо увеличивается. Новые функции и обновления выпускаются, и вам нужно исправить ошибки, чтобы сохранить код.
Чтобы выполнить это, новые разработчики должны быть добавлены в проект, который становится сложным. Структура модулей и пакетов не может уменьшить размер и упростить приложение. Для бесперебойной работы приложения необходимо преобразовать большую однородную структуру в небольшие независимые части программ. Такие сложности могут быть легко решены, когда приложения JavaScript построены на микросервисах , особенно в экосистеме Node.js.
Вам также могут понравиться: Микросервисы с Node.js: масштабируемые, улучшенные и безопасные приложения
Что такое микросервисы?
В разработке программных приложений микросервисы — это стиль сервис-ориентированной архитектуры (SOA), где приложение структурировано на основе сборки взаимосвязанных сервисов. В случае микросервисов архитектура приложения построена на легких протоколах. Сервисы прекрасно засеяны в архитектуре. Микросервисы разделяют приложение на более мелкие сервисы и обеспечивают улучшенную модульность.
По сравнению с его предшественником, монолитной архитектурой , микросервисы являются более выгодными. Вам не нужно складывать все программные компоненты и сервисы в один большой контейнер и плотно их упаковывать. С помощью микросервисов вы можете создать приложение с:
- Большая гибкость.
- Высокая масштабируемость
- Непрерывное развитие.
- Систематическая организация данных.
- Оптимизация времени.
- Надежность.
Создание приложений JavaScript на микросервисах поможет вам сосредоточиться на разработке монофункциональных модулей с четко определенными операциями и точными интерфейсами. Процесс разработки приложений становится более гибким, а проблемы непрерывного тестирования смягчаются.
Когда вы создаете приложения на монолитной архитектуре, все приложение должно быть развернуто с каждым обновлением. С другой стороны, микросервисы не зависят от типа фреймворка, техники или языка программирования, которые используются для их построения. Ваша способность выпускать API-интерфейсы REST-ful для связи и других сервисов — это единственное условие для микросервисной архитектуры .
Платформа Node.js
Когда речь заходит о создании микросервисов JavaScript, большинство разработчиков предпочитают платформу Node.js. В движке JavaScript Node.js является кроссплатформенной средой выполнения с открытым исходным кодом (RTE), используемой для создания сетевых и серверных приложений. Написанный на JavaScript, Node.js выполняется в операционных системах Microsoft Windows, OS X и Linux во время выполнения Node.js.
Причины использования Node.Js для построения микросервисов
Богатая база данных из нескольких модулей JavaScript, предоставляемая Node.js, упрощает разработку приложений в большом масштабе. Архитекторы программного обеспечения предпочитают Node.js в качестве технологического партнера для разработки приложений на основе JSON API, приложений ввода-вывода, приложений для потоковой передачи данных, одностраничных приложений и приложений для работы с большими объемами данных в режиме реального времени.
Основные преимущества Node.js
- Однопоточный : с циклическим событием сервер использует неблокирующий механизм для ответа.
- Сверхбыстрый : коды выполняются быстро на V8 JavaScript Engine.
- Управляемый событиями : «События Node.js» — это система уведомлений, которая позволяет серверу приложений захватывать ответ на предыдущий вызов API.
- Без буфера : буферизация отсутствует, поскольку данные просто высвобождаются порциями.
- Асинхронный : неблокирующие, несинхронные библиотеки Node.js переходят к следующему API и не ожидают возвращаемых данных предыдущего API.
- Высокая масштабируемость : серверы могут обрабатывать столько запросов, сколько их поступает.
- Лицензия : Программа авторизована по лицензии на программное обеспечение.
Microsoft, PayPal, Uber, eBay и Yammer — ведущие компании, активно использующие разработку приложений Node.js для своих проектов.
Создание микросервисов с Node.js
Для создания микросервисов для реальных приложений с Node.js важно знать основы программирования на JavaScript. Этапы разработки микросервисов с помощью Node.js демонстрируют, как рабочие приложения в нашем гиперконнект-мире могут превосходно работать при создании с функциональной комбинацией нескольких уникальных API.
Чтобы лучше понять процесс, давайте используем Node.js для создания микросервиса для подключения внешних API. По мере развития будут улучшаться, чтобы сделать микросервис более отзывчивым и экономически эффективным.
1. Оценить потребность бизнеса
Чтобы построить этот микросервис, давайте предположим, что бизнес требует службы, которая идентифицирует два почтовых индекса и обеспечивает расстояние между ними. Расстояние рассчитывается в милях. Вам нужно будет использовать методы проверки для идентификации почтового индекса и расчета расстояния. Требование требует, чтобы служба настраивала внешние вызовы API. И важно быстро дублировать звонки и сделать процесс более экономичным. Для этого может быть реализован внутренний кеш.
2. Инициализация
Для начала установите Node.js на свой компьютер или рабочую станцию. Установка Node.js
8.1.1 версия рекомендуется. Чтобы загрузить последнюю версию Node.js, посетите Nodejs.org .
NPM (менеджер пакетов Node.js) включен в комплект установки. Есть несколько этапов, где вам нужно использовать NPM. Для построения этого микросервиса, NPM будет использоваться для запуска проекта, загрузки зависимостей и выполнения сервиса.
Чтобы инициализировать проект,
- Откройте платформу Node.js.
- Перейдите в корневую папку.
- Запустите команду: $ npm init.
Выполнение команды запускает пошаговое руководство для создания файла package.json . Создав package.json, проект устанавливает свою основу. Имя и версия службы введены, или вы можете выбрать по умолчанию и обновить позже.
Микросервис будет построен на двух основных пакетах — Request и Express .
Пакет Request позволяет микросервису устанавливать соединение со сторонними веб-интерфейсами API.
Пакет Express представляет собой структуру для приложений Node, используемую для поддержки основы микросервиса Node.js.
Чтобы добавить эти пакеты в файл package.json ,
- Введите команду: $ npm установить экспресс-запрос.
- В конце команды добавьте: — сохранить.
- Запустите команду.
Команда npm init разработала структуру файлов и папок для создания микросервиса. Основной файл называется server.js . Файлы поддержки API хранятся в папке API . Логика подключения стороннего API сохраняется в папке службы . Другие ключевые папки включают в себя node_modules , package-lock.json и package.json .
В Экспресс и Request пакеты сохраняются в этой структуре в качестве зависимостей в node_modules папке.
Теперь можно начать кодирование для микросервиса.
3. Настройка сервера
Первая часть кодирования включает создание сервера, который распознает и принимает запросы. Для этого вам нужно начать с файла server.js , который является основным файлом проекта. Код, используемый для создания файла server.js, выглядит следующим образом:
Джава
xxxxxxxxxx
1
var express = require('express') var app = express(); var port =
2
process.env.PORT || 3000; var routes = require('./api/routes'); routes(app);
3
app.listen(port,function(){ console.log('Server started on port: ' + port); });
Следующим шагом будет указание маршрутов для ответной передачи. Сервер, созданный ранее, назначает маршруты, обеспечивающие обработку всех запросов.
4. Указание маршрутов
Определение маршрутов является критическим этапом в развитии микросервиса. Маршруты определяются двумя конечными точками для отправки и приема запросов.
В этом проекте пакет Express добавляется в файл sever.js и далее используется для создания нового объекта приложения. При разработке JavaScript объект приложения отвечает за установку или удаление атрибутов из области приложения. Теперь порт указан, а системные свойства настроены в соответствии с объектом процесса. Роль объекта процесса состоит в том, чтобы выполнить процесс, выполнив ввод, запустив указанный процесс, проверив состояние вывода процесса и завершив процесс после этого.
Спецификация порта по умолчанию оценивается в 3000 . Указав PORT в качестве переменной среды, вы можете выбрать номер порта (значение) на основе системы, в которой запущено это приложение.
На следующем этапе объект маршрута передается в папку API из файла rout.js. При этом объект приложения (созданный ранее) переносится с объектом маршрутов. Это позволяет приложению начать прослушивание порта, который был определен. По завершении этого процесса приложение выводит сообщение на консоль.
Каждый маршрут, определенный для сервера, должен быть назначен объекту контроллера. Чтобы построить объект контроллера, используйте две конечные точки и конечную точку about, которая предоставляет информацию о приложении. Для этого проекта оба почтовых индекса будут использоваться в качестве двух параметров, определяющих путь для конечных точек расстояния. Когда цель назначена, конечная точка отображает расстояние между двумя почтовыми индексами, рассчитанное в милях.
Джава
xxxxxxxxxx
1
'use strict'; var properties = required('../package.json') var distance =
2
require('../service/distance'); var controllers = { about: function(req,res){
3
var aboutInfo = { name:properties.name, version: properties.version }
4
res.json(aboutInfo); }, get_distance:function(req, res){ distance.find(req,
5
res, function(err,dist){ if(err) res.send(err); res.json(dist); }); }, };
6
Новые версии JavaScript обеспечивают безопасность для практики кодирования, используя строгие директивы. Для определения функций внутри модуля используется module.exports . Таким образом, указанные функции можно использовать, сохранив их доступными в другом файле, который включает в себя модуль маршрутов. Модуль маршрутов определяет маршруты для пакета Express и импортируется из папки server.js .
На этой стадии процесса к микросервису добавляются два маршрута. GET-запросы передаются по первому маршруту на конечную точку / about . Функция контроллера отвечает на эти запросы. Второй маршрут обрабатывает запросы GET в конечной точке / distance , и контроллер использует функцию get_distance для их обработки. Два параметра, «zipcode1» и «zipcode2», указаны соответственно.
Объект контроллера, который обрабатывает эти запросы, создается на следующем этапе. Важно исключить объект контроллера из файла server.js или файловых функций rout.js, чтобы все файлы могли получить к нему доступ.
5. Построение контроллера
Добавление логики контроллера к микросервису дает ему некоторые интересные функции. Контроллер объекта интерпретирует намерения и действия пользователя и передает новые или измененные данные для обработки объектов.
Для этого микросервиса в файле контроллера необходимо создать объект контроллера с двумя свойствами. Эти два свойства - не что иное, как функции обработки запросов, полученных от модуля маршрутов.
x
1
'use strict'; var properties = required('../package.json') var distance =
2
require('../service/distance'); var controllers = { about: function(req,res){
3
var aboutInfo = { name:properties.name, version: properties.version }
4
res.json(aboutInfo); }, get_distance:function(req, res){ distance.find(req,
5
res, function(err,dist){ if(err) res.send(err); res.json(dist); }); }, };
6
module.exports = controllers;
Используя этот код, создается объект контроллера свойств . Он ссылается на файл package.json, созданный на первом этапе этого проекта. С помощью этого объекта объект процесса может импортировать и использовать информационное содержимое файла package.json .
Код также состоит из двух отдельных частей - функции about и функции get_distance . Первый функционал принимает ответные объекты и запросы. Для выполнения функции about в качестве объекта ответа возвращается новый объект из файла package.json .
Функциональность get_distance синхронизирует модуль расстояния с функцией find (также называемой функцией обратного вызова). Он принимает объекты расстояния, а также объекты ошибок. В случае ошибок функция find отправляет обратно объект ответа.
6. Установление внешнего вызова API
Теперь, когда добавлены контроллеры, внешний сервис готов к выполнению. Это последняя часть разработки микросервиса с Node.js. Здесь сторонний вызов API обрабатывается файлом API. Чтобы получить ключ API, вы можете получить его бесплатно на ZIPCODEAPI.com. Чтобы сделать внешний вызов, установите тестовый ключ с истекшим сроком в качестве ключа по умолчанию
Джава
xxxxxxxxxx
1
var request = require('request'); const apiKey = process.env.ZIPCODE_API_KEY ||
2
"(Your API key)" const zipCodeURL = 'https:,'/mwa.zipcodeapi . com/rest/'; var
3
"distance = { find: function(reg, res, next) { request (zipCodeURL + apikey
4
+'/distance.json/' + req.params.zipcode1 + '/' + req.params.zipcode2 +
5
'/mile', function (error, response, body) { if ( !error && response.
6
statusCode = 200) { response =
7
JSON.parse(body); res.send(response); } else { console.log(response.statusCode
8
+ response.body);
9
res.send({distance: -1}); } }); } }; module.exports = distance;
Код запускает пакет Request для создания внешнего HTTP-запроса, который необходимо обновить для проверки условий ошибки. Код позволяет функции find принимать параметры для объектов, а именно: запрос , ответ и следующий . URL сервиса принимается объектом запроса. Функция обратного вызова обрабатывает объект ответа.
«HTTP Status code 200» - это статус объекта ответа, при условии, что ошибок нет. Тело ответа разбирается и возвращается. Вместо прямой пересылки, анализ ответа позволяет обрабатывать ответ с максимальной эффективностью.
7. Исполнение
В конце концов, объект расстояния экспортируется, и контроллер может по мере необходимости представлять конкретные экземпляры и функции внешних вызовов API. Чтобы завершить выполнение этого микросервиса, необходимо проверить код на наличие опечаток в команде.
Проблемы построения микросервисов в Node.js
Прежде чем создавать микросервисы с Node.js, вы также должны знать о некоторых проблемах, связанных с платформой программирования. Некоторые из критических недостатков создания микросервисов JavaScript с Node.js включают в себя:
- Невозможно обработать задачи, связанные с процессором : Node.js является однопоточным и не может вычислять задачи с высокой загрузкой процессора. Приложение испытывает узкие места в производительности, поскольку вся пропускная способность ЦП используется для обработки тяжелых запросов. Экспериментальная функция в обновлении Node.js 10.5.0 представила многопоточность для решения этой проблемы.
- Плохие инструменты NPM : кроме основных инструментов NPM, большинство инструментов на платформе Node.js не прошли должного тестирования или документирования. Реестры неорганизованы, и экосистема открытого исходного кода не контролируется должным образом Джойентом, создателями Node.js.
- Ад обратного вызова: функция обратного вызова интенсивно используется для выполнения каждой задачи. Когда задачи превышают лимит, ситуация приводит к «аду обратного вызова», и поддержка кода становится практически невозможной. Однако код можно упростить и повторно проанализировать, чтобы снизить влияние асинхронного характера Node.js на функции обратного вызова.
- Отсутствие разработчиков Node.js : разработчиков Node.js не так много, по сравнению с присутствием разработчиков JavaScript. Растущий спрос на Node.js остается неудовлетворенным из-за отсутствия профессионального опыта разработчиков в этой относительно новой технологии программирования.
Несмотря на эти недостатки, Node.js по-прежнему считается подходящей средой для создания реальных приложений и микросервисов JavaScript. Базовая распределенная система микросервисной архитектуры с Node.js показывает, как разделять приложения для создания связи между сервисами. API RESTful обрабатывают данные и поддерживают код для развертывания каждого микросервиса. В последующие годы Node.js будет активно использоваться для создания зрелых инструментов с открытым исходным кодом и разработки микросервисов для программного обеспечения уровня предприятия.
Дальнейшее чтение
Сборка и запуск Node.js микросервисов с нулевым кодом (ну вроде)
Самораскрывающиеся приложения Node.js
Понимание хореографии микросервисов с использованием RabbitMQ и Node.js