Выбор веб-стека для реализации цифровой среды предоставления транспортных услуг

УДК 004.738.5

ВЫБОР ВЕБ-СТЕКА ДЛЯ РЕАЛИЗАЦИИ ЦИФРОВОЙ СРЕДЫ ПРЕДОСТАВЛЕНИЯ ТРАНСПОРТНЫХ УСЛУГ

Давыдовский Михаил Альбинович,

канд. техн. наук, доцент, доцент кафедры вычислительных систем, сетей и информационной безопасности, e-mail: madavidovsky@gmail.com, Институт управления и цифровых технологий, Российский университет транспорта (МИИТ), г. Москва

Переход транспорта на цифровые технологии требует создания целого ряда сервисов обеспечения перевозок. Их разработка ведется на основе современных веб-технологий. В данной статье рассматриваются основные стеки, используемые при разработке веб-приложений. Описаны компоненты веб-стеков, предназначенные для обработки данных на различных уровнях реализации приложений. Проводится анализ особенностей веб-стеков. Рассмотрены синхронный и асинхронный режимы обработки информации, производительность программ обработки информации на стороне сервера, используемые системы управления реляционными и NoSQL базами данных, серверные языки программирования. Описаны преимущества веб-стеков при разработке определенного вида приложений. Основное внимание уделено сравнению стеков, использующих язык PHP, и стеков на основе программной платформы Node. В результате анализа сделан вывод о преимуществе стека, использующего платформу Node, для реализации интегральной цифровой среды предоставления транспортных услуг.

Ключевые слова: цифровые технологии на транспорте, веб-технологии, веб-стеки, базы данных, серверные языки программирования, PHP, Node

SELECTING A WEB STACK FOR IMPLEMENTATION OF A DIGITAL ENVIRONMENT FOR THE PROVISION OF TRANSPORT SERVICES

Davydovskiy M.A.,

candidate of technical sciences, associate professor, associate professor department of computing systems,

networks and information security, e-mail: madavidovsky@gmail.com, Institute of Management and Digital Technology, Russian University of Transport (MIIT), Moscow

The transition of transport to digital technology requires the creation of a number of transportation services. Their development is based on modern web technologies. This article discusses the main stacks used in developing web applications. The components of web stacks designed to process data at various levels of application implementation are described. The analysis offeatures of web stacks is carried out. The synchronous and asynchronous information processing modes, the performance of server-side information processing programs, the relational and NoSQL database management systems used, and server programming languages are considered. The advantages of web stacks for developing a certain type of application are described. The focus is on comparing stacks using the PHP language and stacks based on the Node software platform. As a result of the analysis, a conclusion was made about the advantage of the stack using the Node platform for implementing an integrated digital environment for providing transport services.

Keywords: digital technologies in transport, web technologies, web stacks, databases, server programming languages, PHP, Node

DOI 10.21777/2500-2112-2019-4-34-41

Введение

Использование цифровых технологий на транспорте является в настоящий момент приоритетным направлением его развития. Интегральная цифровая среда предоставления транспортных услуг разрабатывается с целью обеспечения пользователей услугами компаний, перевозящих грузы, и компаний, выполняющих сопутствующие услуги, например, хранение грузов. Данная информационная система разрабатывается в рамках проекта создания «цифровой железной дороги» [2; 5] в ОАО «РЖД».

Для реализации такого рода систем используется клиент-серверная архитектура обработки данных и веб-технологии. Клиент и сервер - это логические процессы, выполняющие обработку данных на удаленных друг от друга вычислительных устройствах. Основные функции системы реализуются на сервере, а доступ к ним осуществляется пользователями, как правило, с помощью веб-приложений либо приложений, установленных на мобильные устройства.

Для работы сайта или приложения, доступного через интернет и работающего в браузере, необходим целый набор программ или программных пакетов, которые последовательно обрабатывают поток данных, циркулирующий между клиентом и сервером. Такой набор программ называют веб-стеком. Веб-стек включает ряд компонентов. Это операционная система, установленная на сервере, веб-сервер, система управления базами данных, серверный язык программирования. В стек не включается сам браузер (Google Chrome, FireFox, Internet Explorer, Safari и др.) и операционная система клиента, в которой работает браузер (Windows, Mac OS, Linux).

Существует достаточно большое количество стеков, используемых при разработке веб-приложений. Каждый из них имеет свои особенности и преимущества при реализации определенного класса приложений.

Компоненты веб-стека

Операционная система, обычно это Windows или Linux, используется на сервере для выполнения всех программ.

Веб-сервер, обычно это Apache или ngin^ обрабатывает запросы, посылаемые клиентом (браузером), на предоставление некоторой информации (контента). Этим контентом могут быть статические страницы, написанные на языке HTML, изображения, видео- и аудиоинформация. Контент может также формироваться динамически на основе информации, которая хранится в базе данных. Для формирования динамического контента используются серверные языки программирования. Динамический контент передается клиенту, либо в виде страниц на языке HTML, либо как некоторый набор данных в специальном формате, обычно JSON.

Система управления базами данных, обычно MySQL или MariaDB, используется для создания базы данных и поиска информации по запросам клиента. Применяются и другие системы управления базами данных, например, PostgreSQL, Microsoft SQL Server, Oracle, BigTable, MongoDB, Cassandra.

Веб-стеки

LAMP стек [3; 7] использует операционную систему Linux (L), веб-сервер Apache (A), базу данных MySQL (M) и язык PHP (P) [10]. В настоящее время это самый популярный стек для разработки динамических сайтов и веб-приложений. Имеются следующие модификации этого стека:

- LEMP стек вместо Apache использует ^тх;

- LLMP стек вместо Apache использует lighttpd. Lighttpd - это быстрый защищенный веб-сервер, который работает как в операционной системе Linux, так и Microsoft Windows;

- LAPP стек вместо MySQL использует PostgreSQL;

- WAMP стек вместо Linux использует операционную систему Microsoft Windows;

- XAMPP стек может работать как в Linux, так и в Windows и использует язык PHP или Perl.

WISA стек использует только продукты фирмы Microsoft:

- операционную систему Windows;

- веб-сервер Internet Information Services (IIS);

- систему управления базами данных Microsoft SQL Server;

- платформу для разработки веб-приложений ASP.NET.

Платформа ASP.NET позволяет писать код приложения на разных языках, входящих в комплект .NET Framework. Это языки: C#, VisualBasic.NET, J#, JScript.NET и др. Эта платформа использует технологию AJAX и шаблон проектирования MVC (Model-View-Controller), который позволяет разделить модель данных, внешнее представление и управление данными.

MAMP стек - это стек, работающий в операционной системе macOS фирмы Apple. Этот стек включает веб-сервера Apache и ^тх, систему управления базами данных MySQL, языки программирования PHP, Perl и Python. Данный стек позволяет работать с системой управления контентом WordPress.

MEAN стек [7; 8] использует следующие программы:

• MongoDB (M) - NoSQL-система управления базами данных, хранящая данные в формате «ключ-значение»;

• Express (E) - фреймворк для разработки серверной части веб-приложений на платформе Node [1]. Он является стандартным каркасом для разработки приложений на Node и содержит ряд методов, упрощающих код на Node;

• AngularJS (A) - фреймворк для разработки клиентской части одностраничных веб-приложений на платформе Node. Он включает функции обработки данных JSON-формата, использует MVC-шаблон проектирования веб-приложения, позволяет разработать веб-приложение, которое переносит часть нагрузки по обработке данных со стороны сервера на сторону клиента;

• Node (N) - платформа разработки серверных приложений.

Модификациями стека MEAN являются:

• MEEN стек, в котором AngularJS заменен на Ember.js. Ember.js - это фреймворк, предоставляющий каркас для разработки веб-приложений с использованием MVC-шаблона.

В стандартном процессе доступа к странице сайта пользователь указывает адрес страницы и может передать также некоторую информацию, используемую для формирования запроса. Сервер обраба-

Серверные технологии Node и PHP

Node и PHP являются в настоящее время наиболее широко используемыми технологиями разработки серверной части веб-приложений.

PHP - это язык программирования для создания динамических сайтов и веб-приложений. Помимо языка PHP для реализации серверной части потребуется также веб-сервер, принимающий запросы клиентов, поступающие через интернет, и посылающий им ответы. Таким веб-сервером обычно является Apache.

Сравнение приложений

PHP и Node имеют каждый свои преимущества [6]. PHP предпочтительнее Node при разработке приложений, которые не требуют частого взаимодействия между клиентом и сервером. Наилучшими вариантами приложений с PHP являются:

- приложения, использующие стек программных средств LAMP;

- системы управления контентом (например, Drupal и WordPress написаны на PHP);

- приложения, которые потребляют много процессорного времени. Например, научные приложения и программы прогноза погоды;

- блоги и коммерческие приложения, для построения которых используются CMS;

- финансовые приложения.

Node имеет преимущество при разработке следующих приложений:

- приложения, использующие современную технологию Single Page Applications. Например, индивидуальные сайты;

- приложения, управляемые данными (data-driven applications);

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

- приложения, которые должны работать в реальном масштабе времени, например, чаты, системы потокового видео, навигационные системы;

- приложения, использующие такие технологии, как Angular и React (программные стеки -MEAN и MERN).

Способ работы программы и скорость выполнения

Существует два способа работы программы: синхронный и асинхронный. В синхронном варианте программа выполняется последовательно, один оператор за другим оператором кода. Следующий оператор выполняется только по завершению выполнения предыдущего оператора. В асинхронном варианте несколько операторов программы могут выполняться в одно и то же время.

Программа на PHP выполняется в синхронном режиме. Только некоторые приложения используют асинхронную технику. Если какая-то функция требует большого ресурса времени на выполнение, то следующий за ней оператор будет ждать ее выполнения. В результате клиент может долго ждать ответа на свой запрос.

Node работает в асинхронном режиме. Операции выполняются параллельно. Нет необходимости ожидания выполнения функций. Поэтому программа на Node работает быстрее, чем программа на PHP.

Код на PHP выглядит проще, т.к. не требует понимания таких понятий Node, как замыкания, callback функции, управление событиями.

Производительность

При обращении клиента к серверу, написанном на PHP, запрос поступает сначала на веб-сервер, например, Apache. Он запускает интерпретатор PHP, который выполняет код на PHP.

Node не требует использования веб-сервера. Хотя обычно Node работает совместно с фреймворком Express, но последний имеет небольшой набор быстро выполняемых функций.

Интерпретатор Node работает быстрее интерпретатора PHP, т.к. использует технологию Google Chrome V8. В большинстве тестов, представленных в [11], Node показывает лучшие результаты, чем PHP.

Для обмена информацией между клиентом и сервером часто используется формат данных JSON. В PHP для работы с этим форматом данных используются функции json_encode и json_decode. В Node используются аналогичные функции JSON.stringify и JSON.parse, которые работают быстрее.

PHP использует стандартную клиент-серверную модель, в которой каждый запрос клиента на сервер инициирует новое приложение, устанавливает соединение с базой данных, извлекает из базы информацию для формирования HTML-кода. В Node нет необходимости инициализации приложения при каждом запросе. Можно использовать, например, один и тот же объект, работающий с базой данных, для разных запросов.

PHP использует модель блокировок. При запросе к базе данных необходимо дождаться ответа, чтобы продолжить выполнение следующего кода программы. В Node нет необходимости ждать ответа.

Можно создать функцию обратного вызова (callback), которая прослушивает процесс выполнения доступа к базе данных и выполнится после завершения этого процесса.

PHP использует веб-сервер, который работает в многопоточном режиме. Для каждого соединения клиент-сервер создается один поток. Node работает в однопоточном режиме, что упрощает взаимодействие, однако требует разработки асинхронных приложений, что несколько труднее для программиста. В некоторых случаях возможно использовать веб-сервер и для работы с Node.

Работа с базами данных

В большинстве случаев программа на PHP работает с реляционными базами данных. Это такие системы управления базами данных, как MySQL, MariaDB, Microsoft SQL Server, PostgreSQL, Oracle. Хотя программа на PHP может работать и с NoSQL базами данных [4], но на практике такие приложения встречаются редко.

Node хорошо работает как с реляционными базами данных, так и с NoSQL базами данных. При этом предпочтение отдается базам данных NoSQL. Например, MongoDB, CouchDB, Apache Cassandra, Apache Ignite, YugabyteDB. Для работы с графами используются системы Neo4j, JanusGraph.

Стеки разработки

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

Программа на языке PHP вынуждена взаимодействовать с программами, написанными на разных языках. В большинстве случаев программа на PHP является частью стека LAMP (Linux, Apache Server, MySQL, PHP).

Стек LAMP хорошо подходит для разработки приложения, работающего на одном сервере. Если возникает необходимость масштабирования приложения на несколько серверов, то преимущество имеют стеки MEAN и MERN.

Фреймворки

Node использует различные фреймворки для разработки приложений. Это Derby, Express, Meteor, Sails и другие.

PHP также использует фреймворки для облегчения и быстрой разработки веб-приложений. Они помогают создавать приложения на основе Agile технологии разработки программного обеспечения, создавать защищенные веб-приложения. Это такие фреймворки, как Laravel, Codeigniter, Symphony, CakePHP, FuelPHP, Phalcon.

Для быстрой разработки приложений на PHP используются системы управления контентом (CMS - Content Management System) WordPress, Joomla, Drupal и другие.

Стиль программирования

В PHP используется техника смешивания кода, когда в код на PHP легко могут быть встроены, например, части кода на HTML. Такая практика позволяет быстро писать код, но со временем код становится запутанным.

В Node и PHP используется современная технология разработки MVC.

Надо отметить, что PHP постоянно развивается. В версию PHP 8 предполагается встроить JIT-компилятор, позволяющий получать код, выполняемый в виртуальной машине Zend VM, что увеличит скорость выполнения программ на PHP.

Использование в существующих проектах

Примером успешного применения Node в проектах может служить платформа потокового видео Netflix. Переход от первоначального варианта проекта, сделанного на Java, на платформу Node, улучшил время загрузки Netflix на 70 %. Это время между обращением клиента к приложению Netflix и моментом, когда пользователь может начать с ним работать.

Сервис платежной системы PayPal был первоначально разработан на JSP (Java Server Pages). По мере развития популярности сервиса оплаты PayPal увеличивалось количество транзакций, которые нужно было успевать обрабатывать. В результате PayPal был переписан на Node.

Другим примером является сервис заказа такси Uber. Благодаря Node сервис позволяет выполнять 2 миллиона вызовов удаленных процедур в секунду.

Платформа Node используется также в таких крупных проектах, как торговая платформа eBay, крупнейший мировой регистратор GoDaddy, социальная бизнес-сеть LinkedIn, сеть розничной торговли Walmart, поисковик и почтовый сервер Yahoo, платформа электронной коммерции Groupon, браузер Mozilla FireFox.

Примечательным также является возможность разработки веб-приложения на платформе Node в облачной службе Microsoft Azure, несмотря на наличие собственного стека разработки веб-приложений WISA, использующего только продукты компании Microsoft.

Заключение

Каждая из технологий Node и PHP имеет свои достоинства и недостатки. Поэтому выбор технологии существенным образом зависит от разрабатываемого приложения.

Интегральная цифровая среда предоставления транспортных услуг имеет следующие особенности:

- необходимость обеспечения масштабируемости к изменению количества пользователей в системе;

- частый обмен информацией между клиентом и сервером в процессе поиска различных вариантов маршрутов;

- выполнение функций доступа к данным и функций расчета, требующих большого времени, наряду с запросами, время выполнения которых невелико;

- требования к скорости обработки информации на стороне сервера;

- выполнение параллельных алгоритмов обработки информации на стороне сервера и, как следствие, асинхронного выполнения программ;

- использование NoSQL базы данных в виду большого объема данных.

Учитывая перечисленные особенности, можно сделать вывод о предпочтительном использовании серверной платформы Node и стека MEAN (или его модификации в части базы данных) для реализации интегральной цифровой среды предоставления транспортных услуг.

Список литературы

2. Клейменов А.А. Проблемы и перспективы развития процессного подхода в области «Цифровой железной дороги». - М.: Modern Science. Научно-информационный издательский центр «Институт стратегических исследований». - 2019. - № 10-2. - С. 92-96.

4. Редмонд Э., Уилсон Джим Р. Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL. - M.: ДМК Пресс, 2018. - 384 с.

5. Рябова В. Утвержден план перехода РЖД на «цифровую железную дорогу» [Электронный ресурс] // D-russia.ru. - 2019. - URL: http://www.d-russia.ru/utverzhdyon-plan-perehoda-rzhd-na-tsifrovuyu-zheleznuyu-dorogu.html (дата обращения: 09.01.2020).

6. Buckler Craig. PHP vs Node.js [Электронный ресурс] // Sitepoint.com. - URL: https://www.sitepoint. com/sitepoint-smackdown-php-vs-node-js (дата обращения: 09.01.2020).

7. Louridas Panos. Component Stacks for Enterprise Applications // IEEE Software. - 2016. - Vol. 33, is. 2. -P. 9З-98.

8. MEAN.JS [Электронный ресурс]. - URL: http://www.meanjs.org (дата обращения: 09.01.2020).

9. NODE [Электронный ресурс]. - URL: https://www.nodejs.org (дата обращения: 09.01.2020).

10. PHP [Электронный ресурс]. - URL: https://www.php.net (дата обращения: 09.01.2020).

11. PHP versus Node js fastest programs [Электронный ресурс] // Benchmarksgame-team.pages.net. - URL: https://www.benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/php-node.html (дата обращения: 09.01.2020).

12. W3Techs [Электронный ресурс]. - URL: https://www.w3techs.com (дата обращения: 09.01.2020).

References

2. Klejmenov A.A. Problemy i perspektivy razvitiya processnogo podhoda v oblasti «Cifrovoj zheleznoj dorogi». - M.: Modern Science. Nauchno-informacionnyj izdatel'skij centr «Institut strategicheskih issledovanij». - 2019. - № 10-2. - S. 92-96.

4. Redmond E., Uilson Dzhim R. Sem' baz dannyh za sem' nedel'. Vvedenie v sovremennye bazy dannyh i ideologiyu NoSQL. - M.: DMK Press, 2018. - 384 s.

5. Ryabova V. Utverzhden plan perekhoda RZHD na «cifrovuyu zheleznuyu dorogu» [Elektronnyj resurs] // D-russia.ru. - 2019. - URL: http://www.d-russia.ru/utverzhdyon-plan-perehoda-rzhd-na-tsifrovuyu-zheleznuyu-dorogu.html (data obrashcheniya: 09.01.2020).

6. Buckler Craig. PHP vs Node.js [Elektronnyj resurs] // Sitepoint.com. - URL: https://www.sitepoint.com/ sitepoint-smackdown-php-vs-node-js (data obrashcheniya: 09.01.2020).

7. Louridas Panos. Component Stacks for Enterprise Applications // IEEE Software. - 2016. - Vol. 33, is. 2. -P. 93-98.

8. MEAN.JS [Elektronnyj resurs]. - URL: http://www.meanjs.org (data obrashcheniya: 09.01.2020).

9. NODE [Elektronnyj resurs]. - URL: https://www.nodejs.org (data obrashcheniya: 09.01.2020).

10. PHP [Elektronnyj resurs]. - URL: https://www.php.net (data obrashcheniya: 09.01.2020).

11. PHP versus Node js fastest programs [Elektronnyj resurs] // Benchmarksgame-team.pages.net. - URL: https:// www.benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/php-node.html (data obrashcheniya: 09.01.2020).

12. W3Techs [Elektronnyj resurs]. - URL: https://www.w3techs.com (data obrashcheniya: 09.01.2020).