Научная статья на тему 'ПОДХОД К ПОСТРОЕНИЮ РАСПРЕДЕЛЕННОЙ ВИРТУАЛЬНОЙ МАШИНЫ НА ОСНОВЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ'

ПОДХОД К ПОСТРОЕНИЮ РАСПРЕДЕЛЕННОЙ ВИРТУАЛЬНОЙ МАШИНЫ НА ОСНОВЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
163
21
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЯЗЫКОВЫЕ ВИРТУАЛЬНЫЕ МАШИНЫ / ОБЪЕКТНОЕ ВЗАИМОДЕЙСТВИЕ / КЛИЕНТ-СЕРВЕРНОЕ ВЗАИМОДЕЙСТВИЕ / РАСПРЕДЕЛЕННЫЕ ИНФОРМАЦИОННЫЕ СИСТЕМЫ / LANGUAGE VIRTUAL MACHINES / OBJECT INTERACTION / CLIENT-SERVER INTERACTION / DISTRIBUTED COMPUTER SYSTEMS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Шальнев Илья Олегович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Шальнев Илья Олегович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

BUILDING DISTRIBUTED VIRTUAL MACHINE BASED ON OBJECT-ORIENTED PROGRAMMING

Essential issues of distributed computer systems rearranging are described in the paper. The virtual machine technology using with the object-oriented approach is suggested to solve runtime-rearranging of distributed systems. Implementation features of asynchronous interaction between different parts of program code to balance nodes overload are considered.

Текст научной работы на тему «ПОДХОД К ПОСТРОЕНИЮ РАСПРЕДЕЛЕННОЙ ВИРТУАЛЬНОЙ МАШИНЫ НА ОСНОВЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ»

data about HTTP-requests of obfuscated client web applications. The experiments show efficiency of the offered analyze method. So the method allows to created information model of analyzed web resource which can be used for web fuzzing. The work contains description of offered system structure, its functions and procedures, used technologies and results of the accomplished experiments.

Key words: entry points identification, dynamic analyze, software controlled web browser, fuzzing, web application.

Markin Dmitry Olegovich, candidate of technical sciences, employee, mdo@academ. msk. rsnet. ru, Russia, Oryol, The Academy of Federal Security Guard Service of the Russian Federation,

Makeev Sergey Mihaylovich, candidate of technical sciences, employee, maksm5 7@yandex. ru, Russia, Oryol, The Academy of Federal Security Guard Service of the Russian Federation,

Zverev Artem Aleksandrovich, employee, mdo@academ.msk.rsnet.ru, Russia, Oryol, The Academy of Federal Security Guard Service of the Russian Federation

УДК 004.415:04.424; 004.453

ПОДХОД К ПОСТРОЕНИЮ РАСПРЕДЕЛЕННОЙ ВИРТУАЛЬНОЙ МАШИНЫ НА ОСНОВЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО

ПРОГРАММИРОВАНИЯ

И.О. Шальнев

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

Ключевые слова: языковые виртуальные машины, объектное взаимодействие, клиент-серверное взаимодействие, распределенные информационные системы.

Распределенная система (РС) представляет собой совокупность вычислительных узлов, выполняющих общую сложную задачу [1]. Необходимость в создании подобных систем связана с усложнением программных продуктов и требованием к увеличению качества и отказоустойчивости программного обеспечения. Так, например, систему, которая требует обработки запросов миллионов пользователей (их еще называют высоконагру-женными системами) технически сложно реализовать на одной вычислительной машине. Во-первых, подобное оборудование, способное обеспечить решение такой задачи весьма дорогостоящее, во-вторых, в случае

40

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

Существующий подход построения современных распределенных информационных систем предполагает реализовывать их как совокупность узлов (кластер), выполняющую некоторую задачу. Между узлами (единичными вычислительными модулями) требуется организация информационного и управляющего взаимодействия. Такой информационный обмен реа-лизовывается внутренним специализированным протоколом передачи данных, работающим поверх каких-либо из сетевых протоколов сетевой модели 081 [2]. В этом случае специализированный протокол часто становится «узким местом» при развитии системы. Это связано с тем, что расширение области решаемой задачи требуют модификации протокола межузловой коммуникации, а любые модификации протокола, в свою очередь, требуют обновления программного обеспечения на всех узлах системы. Временные решения в виде программных «заплаток», использование унаследованных решений или поддержание совместимости при расширении задачи без полной модификации системы приводят к потере производительности. Таким образом, текущее состояние информационных технологий в области построения распределенных систем предполагает ограниченную возможность динамической реконфигурации узлов или отдельных единиц распределенных систем для решения поставленных задач. Это делает информационные системы негибкими, а программное обеспечение узлов в таких системах являются трудно-модифицируемым. Технология распределенной виртуальной машины (РВМ) [3] может являться подходом к решению данной проблемы.

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

41

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

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

Объектно-ориентированный подход к построению распределенной системы. В парадигме объектно-ориентированного подхода (ООП) [4], класс является средством описания сущностей в информационных моделях и связанных с ними алгоритмов. Экземпляры классов или объекты могут взаимодействовать друг с другом при помощи вызова публичных функций (методов). Такая объектная декомпозиция (рис. 1) задачи является описанием предметной области в парадигме объектно-ориентированного подхода.

Рис. 1. Абстрактная объектная декомпозиция

Но что делать с подобной объектной декомпозицией, если она предполагает исполнение на разных узлах распределенной системы? Эту проблему обычно решают, как исполнение совокупности, связанных по сети приложений. Иной подход предполагает наличие подмножества удаленных объектов [5], обладающих возможностью удаленного вызова мето-

42

дов [6] (Remote Method Invocation RMI). Данный подход позволяет не нарушать декомпозицию объектов, позволяя при этом составлять программу, как единую, исключая описание логики взаимодействия узлов (рис. 2).

Рис. 2. Пример удаленного вызова методов

Такие удаленные объекты будем называть «комплементарными», так как они состоят из двух частей, расположенных удаленно, то есть на разных узлах: первая часть - со стороны программного интерфейса (API); вторая часть - со стороны функциональной части (Actor) [7]. Задачей программного интерфейса является управление функциональной стороной: созданием, удалением и вызовом удаленных методов. Функциональная часть отвечает за исполнение вызванного на стороне программного интерфейса функционала. Помимо своих основных задач эти части комплементарного объекта имеют интерпретирующую часть, которая занимается анализом и выполнением команд, посланных с удаленной стороны. Так, например, функциональная часть занимается интерпретацией команд, сформированных на стороне программного интерфейса, а сторона программного интерфейса интерпретирует результат, полученный на функциональной стороне. Это достигается путем формирования последовательности инструкций (байт-кода), который ассемблируется на какой-либо стороне и интерпретируется на удаленной.

Рассмотрим реализацию виртуальной среды интерпретации инструкций. Основным ядром виртуальной среды является центральный процессор языковой виртуальной машины, основная задача которого -обеспечение выполнения инструкций для работы частей комплементарных объектов. Под этим понимается создание, хранение, удаление комплементарных объектов и передача им управления исполнения команд. Таким образом, комплементарный объект является своего рода сопроцессором центрального процессора (рис. 3).

Рис. 3. Виртуальная среда

Рассматриваемый подход использования виртуализации исполнения инструкций имеет преимущество с точки зрения безопасности системы. Это достигается путём отсутствия включения нежелательных сопроцессоров в центральный виртуальный процессор. Также в данном подходе заложена возможность потенциально неограниченного расширения виртуальной машины. Таким образом, например, включение математического сопроцессора достигается путем создания объекта, хранящего в себе реализацию методов математических функций.

Абстракция программного интерфейса. В рассматриваемом подходе работа с удаленными объектами синтаксически не должна кардинально отличаться от работы с обычными объектами. Так, работа со стороной программного интерфейса комплементарного объекта, такая как вызов метода, управление памятью, не должна отличаться от работы с объектами целевого языка (рис. 4). Синтаксически они должны быть такими же обычными объектами. Это позволяет программисту абстрагироваться от внутреннего механизма работы комплементарных объектов и пользоваться ими таким образом, как будто их реальная работа выполняется на том же узле, что и обычные объекты.

auto *layout = new WBoxl_ayout(owner->getProcessor(), this);

auto *acceptButton = new VPushButton(owner->getProcessor(), "Подтвердить");

layout->addwidget{acceptButton);

auto *denyButton = new VPushButton(owner->getProcessor{), "Отменить");

layout->addwidget{denyButton);

Puc. 4. Пример создания двух удаленных кнопок

Как уже было сказано, множество объектов, которым оперирует разработчик, состоит из подмножеств комплементарных объектов и подмножеств, созданных разработчиком (пользовательских) объектов. Так как интерфейсной стороне доступен перечень удаленных объектов с их методами, то именно интерфейсный код определяет последовательность и логику обращения к этим объектам при помощи таких элементов императивного программирования как циклы, условные переходы и прочее. Следствием этого является то, что сам байт-код не обязан иметь инструкции императивной методологии. Исключением является случай, когда есть необходимость кеширования некоторой последовательности вызовов. Необходимость кеширования обуславливается тем, что некоторые события, возникающие на функциональной стороне, вызывают передачу одно-

44

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

Работа с комплементарными объектами имеет все те же проблемы, что существуют и сетевом программировании. Одна из таких проблем — это асинхронная природа комплементарного объекта. Так как комплементарный объект есть ни что иное как сопроцессор со своим перечнем команд, то некоторое подмножество таких команд может исполнятся на удаленной машине и возвращать результат такой работы на сторону API. Очевидно, что ожидание подобной команды в синхронном режиме (рис. 5, а) обязательно отрицательно скажется на производительности системы.

Структура такого кода будет реализована в соответствии с методологиями асинхронного программирования. Одним из таких методов является функция обратного вызова (callback) архитектуры событийно-ориентированного программирования [8]. Когда результат метода придет на сторону программного интерфейса, то в системе возникнет событие о вычисленном результате. Это событие поместится в очередь и в свое время будет обработано функцией обратного вызова - фрагментов кода его обрабатывающего. Как видно из рис. 5, б, в асинхронном подходе аппаратное обеспечение не «простаивает» в ожидании результата, а может совершать полезные вычисления.

V

-RM11

-result 1 —RMI 2

Г

-result 2

а)

б)

Рис. 5. Синхронная(а) и асинхронная(б) обработка результатов

методов

На функциональной стороне комплементарного объекта, помимо вычислений могут возникать события, обработка которых может производиться на стороне программного интерфейса. В таком случае функциональная сторона формирует байт-код, интерпретация которого на стороне программного интерфейса эмулирует событие объекта API. Такое событие также обрабатывается на стороне программного интерфейса.

Заключение. В статье предложен подход к построению распределенной виртуальной машины, основанной на принципах объектно-ориентированного подхода. Такой подход и методология разработки приложений позволяет создавать сетевое приложение как традиционное desk-top-приложение, не нагружая прикладного программиста особенностями сетевой реализации межузлового взаимодействия. Также предложенный подход предоставляет возможность частичной реконфигурации за счет виртуализации выполнения фрагментов целевого прикладного кода. Предложенная методология способна на основании уже имеющегося предустановленного удаленного функционала (реализации базового набора программных функций), управлять последовательностью его вызова, тем самым реконфигурируя удаленный узел. Такой подход является копромисс-ным решением между гибкостью в вопросе реконфигурируемости и производительностью системы. Предлагаемая реализация концепции распределенной виртуальной машины может найти применение в области интернета вещей и встроенных систем, где производительность играет большую роль.

Работа выполнена в рамках реализации Государственного задания на 2020 г. № 0073-2019-0005.

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

1. Таненбаум Э., Ван Стеен М., Распределенные системы. Принципы и парадигмы. СПб.: Питер, 2003. 880 с.

2. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы. СПб.: Питер, 2002. 672 с.

3. Кулешов С.В., Зайцева А.А., Шальнев И.О. Подход к реализации распределенной системы виртуальных машин для самоорганизующихся сетей // Информационно-управляющие системы. 2019. №5. С. 30 - 37.

4. Буч Г., Максимчук Р.А., Энгл М.У., Янг Б.Дж., Коналлен Д., Хьюстон К.А. Объектно-ориентированный анализ и проектирование с примерами приложений. 3-е изд. М.: Вильямс, 2010. 720 с.

5. Сигел Д. Corba 3. М. Аншина. М.: Малип, 2002. 411 с.

6. Java Remote Method Invocation [Электронный ресурс]. URL: https://docs.oracle.com/javase/6/docs/technotes/guides/rmi/index.html (дата обращения: 20.04.2020).

7. Шальнев И.О. Подход к построению распределенных систем на основе балансировки объема исполняемого кода между сетевыми узлами // Материалы 4-й Международной научной конференции «Технологическая перспектива: новые рынки и точки экономического роста» / под ред. О.Н. Кораблевой и др. СПб: Центр научно-информационных технологий «Асте-рион», 2018. С. 151 - 158.

8. Непейвода Н.Н. Стили и методы программирования. Курс лекций: учебное пособие. М.: Интернет-университет информационных технологий, 2005. 316 с.

Шальнев Илья Олегович, аспирант, elias.shalnev@,iias.spb.su, Россия, Санкт-Петербург, Санкт-Петербургский институт информатики и автоматизации Российской академии наук

BUILDING DISTRIBUTED VIRTUAL MACHINE BASED ON OBJECT-ORIENTED

PROGRAMMING

I.O. Shalnev

Essential issues of distributed computer systems rearranging are described in the paper. The virtual machine technology using with the object-oriented approach is suggested to solve runtime-rearranging of distributed systems. Implementation features of asynchronous interaction between different parts of program code to balance nodes overload are considered.

Key words: language virtual machines, object interaction, client-server interaction, distributed computer systems.

Shalnev Ilia Olegovich, postgraduate, elias. shalnev@,iias. spb. su, Russia, St. Petersburg, St. Petersburg Institute for Informatics and Automation of the Russian Academy of Sciences

УДК 517.929.4

УСТОЙЧИВОСТЬ СИСТЕМ С ЗАДЕРЖКОЙ, ОСНОВАННАЯ НА ВТОРОМ МЕТОДЕ ЛЯПУНОВА

К.А. Гришин

Рассматриваются устойчивость системы для случаев с несколькими количествами запаздываний. Описывается уравнение Риккати для систем задержкой. Рассматривается прямой метод Ляпунова.

Ключевые слова: уравнение Риккати, система задержек, метод Ляпунова, запаздывание.

Прямой метод Ляпунова является мощным инструментом для изучения устойчивости систем: даже в линейном случае он остается полезным для определения робастных условий устойчивости, когда некоторые параметры неопределенны. Рассмотрим пример: линейное обыкновенное дифференциальное уравнение

— = Ax(t), A е%пХп , х е%п. (1)

Л

Хорошим выбором функции Ляпунова V для системы будет квадратичная форма

V = хТРх, (2)

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

i Надоели баннеры? Вы всегда можете отключить рекламу.