178
Трулы БГТУ, 2016, № 6, с. 178-180
УДК 004.853
Н. И. Гурин, Т. А. Крылова
Белорусский государственный технологический университет
ИНТЕРНЕТ-ПРИЛОЖЕНИЕ НА ПЛАТФОРМЕ NODE ДЛЯ ЭЛЕКТРОННОЙ БИРЖИ ПЕРЕВОЗОК
Статья посвящена анализу и апробации преимуществ платформы Node, базирующейся на событийно-ориентированной модели взаимодействия приложения с сервером с выводом языка JavaScript за пределы браузера. На базе платформы Node разработано он-лайн интернет-приложение для электронной биржи перевозок. Показано, что для приложений, в которых необходимо одновременно обрабатывать тысячи запросов сервера, скорость обработки при использовании событийно-ориентированной технологии платформы Node.js с одним потоком примерно в 2 раза выше, чем в многопоточной модели, на основе которой работает сервер Apache Web Server. Разработанное интернет-приложение продемонстрировало высокую эффективность работы в условиях проведения реальных торгов в сети с использованием мобильных устройств при заключении сделок на электронной бирже перевозок.
Ключевые слова: интернет-приложение, платформа Node, язык JavaScript, электронная биржа.
N. I. Gurin, T. A. Krylova
Belarusian State Technological University
INTERNET APPLICATION ON PLATFORM NODE FOR ELECTRONIC EXCHANGE OF TRAFFIC
The article is devoted to the analysis and testing of benefits of platform Node based on the event-oriented model of interaction with the server application with the output of JavaScript outside of the browser. On-line Internet application for electronic exchange of traffic was developed on the platform based Node. It is shown that for applications that need to handle thousands of requests of the server processing speed when using the event-oriented technology platform for Node.js with one thread about two times higher than in a multithreaded model on which the server runs Apache Web Server. The developed Internet application showed a high efficiency of operation conditions of the real trading online using mobile devices when entering into transactions on an electronic exchange traffic.
Key words: online application, platform Node, JavaScript, electronic exchange.
Введение. Доступность устройств и средств связи открывает большие возможности для бизнеса, в частности, для организации электронной биржи, в которой все заявки на торги поступают по электронным системам связи и тут же находят отображение в торговой системе в автоматическом режиме. При этом для электронной биржи критичным является момент завершения торгов, когда необходимо одновременно обрабатывать сотни и тысячи запросов. В обычно используемой серверами многопоточной модели, на основе которой работает, например, популярный сервер Apache Web Server, это может привести к перегрузке памяти сервера и его остановке.
В данной работе используется событийно-ориентированная модель, которая имеет только один поток и построена на зацикливании очереди событий, что значительно меньше нагружает память сервера. Для разработки интернет-приложения он-лайн биржи перевозок выбрана платформа Node.js, основанная на событийно-ориентированной технологии обработки запросов сервера.
Основная часть. Node.js или Node является программной платформой для разработки веб-приложений, серверов приложений, произвольных сетевых серверов и клиентов [1-3]. Платформа позволяет обеспечить высокую масштабируемость проектов за счет сочетания асинхронного ввода/вывода, использования JavaScript на стороне сервера и событийно-ориетированнной архитектуры. При возникновении некоторого события оно помещается в конец очереди. Поток исполнения, обрабатывающий этот цикл, выполняет код, связанный со следующим событием, и, в свою очередь, помещает его в конец. Это происходит до тех пор, пока очередь не опустеет. Библиотека ввода/вывода обладает достаточной общностью для реализации любого протокола на базе TCP или UDP: DNS, HTTP, IRC, FTP и др. и поддерживает разработку серверов и клиентов произвольного протокола.
В основе Node лежит автономная виртуальная машина JavaScript с расширениями, делающими ее пригодной для программирования общего назначения с упором на разработку
Н. И. Гурин, Т. А. Крылова
179
серверов приложений. В основе реализации приложения лежит цикл обработки событий неблокирующего ввода/вывода и библиотеки файлового и сетевого ввода/вывода. Платформа Node выводит язык JavaScript за пределы браузера и использует его в серверных приложениях, что в сочетании с асинхронным вводом/выводом делает ее эффективной платформой для разработки приложений. Возможности платформы предоставляют механизм работы с соке-тами TCP и UDP, поиск в системе DNS, средства доступа к файловой системе, средства для создания серверов и клиентов протоколов HTTP и HTTPS, построенные на основе библиотеки TCP-сокетов.
Node.js позволяет использовать сокеты. Концепция веб-сокетов (WebSockets) дает переосмысление привычного взаимодействия в веб-мире. Браузер и сервер превращаются в полноправных участников взаимодействия (в противовес прежней клиент-серверной модели) и, соответственно, могут принимать и посылать сообщения при возникновении необходимости. Веб-сокеты же позволяют приложению сервера всегда иметь информацию обо всех подключениях и взаимодействовать с любым количеством открытых соединений.
В целом платформа Node.js ориентирована на создание высокопроизводительных, хорошо масштабируемых клиентских и серверных приложений реального времени, обрабатывающих большие объемы данных и выполняемых на распределенных устройствах. Данные характеристики были использованы для разработки приложения «Он-лайн биржа перевозок», рассчитанного на поддержание взаимодействия большого количества одновременно работающих конечных пользователей.
Алгоритм работы электронной биржи перевозок заключается в том, что фирма-организатор размещает заявку на перевозку товара из одного пункта в другой, указывая максимальную цену, которую она готова заплатить исполнителю, и время окончания торгов. Пользователь сайта, в случае если его устраивает данная цена, делает свое предложение, заявляя о готовности выполнить перевозку. Эта ставка сразу же появляется и у других участников, уведомляя их о ходе ведения торгов. При завершении торгов автоматически подводятся итоги - выигрывает пользователь, запросивший минимальную цену. При этом пик одновременных запросов достигается за секунды до завершения торгов, т. е. именно в этот период пользователи активно делают ставки, и обмен данными в режиме реального времени является чрезмерно актуальным.
Для разработки приложения выбрана база данных SQLite, представляющая собой компактную встраиваемую кроссплатформенную реляционную базу данных. Для рассылки сообщений каждому, кто соединен с сервером, используется метод emit объекта платформы Socket.io.
Когда пользователь делает ставку, она отсылается на сервер, где и проставляется время обработки, а затем данное сообщение распространяется среди других участников, имеющих сокетное соединение с сервером (фрагмент программы приведен в листинге на рис. 1).
socket.on('sendRate', function (data) { db.each("SELECT * FROM transfer WHERE id = " + da-ta.transferld, function(err, row) { var allow = true; if(parselnt(row.status) == 1) { if(parselnt(data.price) <= parselnt(row.start_rate)) { var time = getDateTime(); if (allow) { if(row.rate_id) { db.each("SELECT min(price) as price, user_id FROM rate WHERE transfer_id = " + data.transferld + " group by trans-fer_id order by date desc", function(err, min) { if(min.price > data.price) {
var stmt = db.prepare("lNSERT lNTO rate(transfer_id, date, price, user_id) VALUES (?, ?, ?, ?)"); stmt.run(data.transferld, time, data.price, data.userld); stmt.finalize();
io.sockets.sockets.emit('sendRate', { company : data.company, price : data.price, time: time,
transferld : data.transferld}); } } else {io.sockets.socket(socket.id).emit('error', { text : 'Ставка не может превышать ' + row.start_rate + ' рублей.', });}
} else {io.sockets.socket(socket.id).emit('error', {
text : 'Перевозка закрыта, ставки не принимаются.',});}
Рис. 1. Фрагмент программы на прием и обработку ставок
Пользователь сайта, в случае, если его устраивает цена, делает ставку, заявляя о готовности выполнить перевозку. Информация о сумме ставки и id пользователя отправляется на сервер, проходит регистрацию в системе и рассылается другим участникам торгов, которые в свою очередь аналогичным образом могут участвовать в торгах (рис. 2).
Следует обратить внимание на то, что, согласно логике работы биржи, выигрывает минимальная ставка. При наличии ставок на идентичную сумму приоритет получит ставка, сделанная первой, поэтому время ставки является одним из ключевых моментов.
Интернет-приложение на платформе Node для электронной биржи перевозок
Рис. 2. Интерфейс приложения биржи перевозок
Для объективной оценки производительности многопоточной и событийно-ориентированной моделей произведено нагрузочное тестиро-
вание серверов Apache и Node с применением утилиты ApacheBench. Разработанное приложение для электронной биржи перевозок протестировано на 1000 запросах при одновременной обработке 100 запросов в случае заключения контракта на перевозку. Нагрузочное тестирование для приложения показало, что производительность сервера Node примерно в 2 раза выше, чем при использовании многопоточной модели.
Заключение. Платформа Node позволяет создавать высокопроизводительные клиентские и серверные приложения реального времени, обрабатывающие большие объемы данных и выполняемые на распределенных устройствах. Разработанное на основе Node интернет-приложение для электронной он-лайн биржи перевозок показало в работе высокую эффективность по сравнению с традиционно используемыми многопоточными моделями, что делает ее наиболее перспективной платформой для разработки приложений, рассчитанных на поддержание взаимодействия большого количества одновременно работающих конечных пользователей.
Литература
1. Кателон М., Хартер М., Головайчук Т. Node.js в действии. СПб.: Питер, 2014. 548 с.
2. Young A. R. Node.js in Practice. NY: Manning publications, 2014. 424 p.
3. Herron D. Node Web Development. UK: Packt Publishing, 2013. 225 p.
References
1. Katelon М., Kharter М., Golovaychuk Т. Node.js v deystvii [Node.js in action]. St. Petersburg, Piter Publ., 2014. 548 p.
2. Young A. R. Node.js in Practice. NY, Manning publications, 2014. 424 p.
3. Herron D. Node Web Development. UK, Packt Publishing, 2013. 225 p.
Информация об авторах
Гурин Николай Иванович - кандидат физико-математических наук, доцент кафедры информационных систем и технологий. Белорусский государственный технологический университет (220006, г. Минск, ул. Свердлова, 13а, Республика Беларусь). E-mail: [email protected]
Крылова Татьяна Андреевна - магистрант. Белорусский государственный технологический университет (220006, г. Минск, ул. Свердлова, 13а, Республика Беларусь). E-mail: [email protected]
Information about the authors
Gurin Nikolay Ivanovich - PhD (Physics and Mathematics), Assistant Professor, the Department of Information Systems and Technologies. Belarusian State Technological University (13a, Sverdlova str., 220006, Minsk, Republic of Belarus). E-mail: [email protected]
Krylova Tat'yana Andreevna - Master's degree student. Belarusian State Technological University (13a, Sverdlova str., 220006, Minsk, Republic of Belarus). E-mail: [email protected]
Поступила 07.03.2016