Автореферат (1090659), страница 5
Текст из файла (страница 5)
Она работает по принципу «черногоящика», когда на вход подается XML-документ, а на выходе строится объект, скоторым будет производиться дальнейшая работа.Важной частью программного комплекса интерпретатора является архитектура фабрики. Согласно разработанной спецификации на данный момент существует два десятка типов блоков. Стало понятно, что их функции не ограничиваются хранением примитивных данных, а их природа весьма вариативна взависимости от типа и поэтому реализовывать все блоки в едином классе нецелесообразно.
С другой стороны, некоторые блоки имеют родственную природуи могут быть объединены путем наследования. Поскольку модуль для работыс блоками должен быть универсальным, разработан единый способ обращенияко всем типам. Результатом работы стал абстрактный класс “Block”. Для наиболее гибкой реализации полиморфизма принято решение использовать паттерн«абстрактная фабрика».18В рамках нашей задачи был создан класс, который «знает» о существовании всех реализаций типов блоков и способен их различить (в нашем случае этоосуществляется через указание имени типа блока). В результате работы былобразован класс “BlockFactory”, имеющий метод GetBlock(std::stringtype).
Метод возвращает созданный объект конкретного класса блока с реализацией для своего типа данных, который приводится к указателю на классBlock (наш абстрактный интерфейс) (рис. 7).Класс BlockКласс BlockFactoryМетодыМетодыSetValue();GetValue();SetParams();SetParam();GetParams();GetParam();GetBlock(std::string);Создание блока конкретного типаОбъектBlockFactoryВызов GetBlock(std::string);Объект BlockКонкретные типы блоковКлассыNumberBlockFloatBlockStrinngBlockDatetimeBlockFileBlockImageBlockMediaBlockНаследуется от класса BlockНаследуются от FileBlockРис.
7. Архитектура модуля блоковВ качестве шаблонизатора, обеспечивающего связь генерируемых данных с шаблоном, выбран шаблонизатор CTPP2, превосходящий большинствоаналогов по производительности. При этом он поддерживает основной функционал, используемый в шаблонах: вставку внешних шаблонов, циклы, ветвления,именованные блоки и др. Кроме того, шаблонизатор поддерживает компиляциюшаблонов в байт-код, что может служить подспорьем в обеспечении производительности у критических по скорости проектов.Логика работы языка BML хранится в файлах в специализированной директории и исполняется интерпретатором языка.
Со структурами данных BMLмогут быть связаны многочисленные таблицы с достаточно сложными связями.Если разработчик пожелает поменять структуру BML, это может повлечь значительные изменения во внутренних архитектурах, в том числе и в структуре базыданных. Их перестроение может занимать продолжительное время. Таким образом, если интерпретируемая логика и процесс перестроения будут выполнятьсялинейно, это повлечет за собой серьезные задержки в выполнении пользовательского запроса.19Для решения поставленной задачи были разделены механизмы перестроения внутренних структур и непосредственной обработки пользовательских запросов. Перестроение асинхронно во времени выполняет синхронизатор.
Задачасинхронизатора – обеспечить безболезненный переход от одной логики к другой, в то время, как интерпретатор хранит в оперативной памяти старые данные,загруженные до обновления, и исполняет логику на их основе до полного перестроения. После прохождения обновления интерпретатор может начать исполнять логику немедленно, согласно изменениям разработчика, не беспокоясь приэтом, что возникнут ошибки при использовании обновленных структур.Интерпретатор не работает напрямую с файлами BML.
Данную функцию выполняет синхронизатор, загружая их из рабочей директории проекта. Затем происходит синтаксический анализ и последующее сохранение полученныхструктур в оперативной памяти. Порции этих данных передаются по запросупри подключении клиента через сокет согласно запрошенному пользователемадресу URL.Синхронизатор периодически просматривает рабочую директорию напредмет изменения файлов. Для этого в нем создан специальный массив, элементами которого являются структуры, каждая из которых хранит имя файла,его дату изменения и контрольную сумму.
Сначала происходит сверка количества файлов в директории с количеством элементов массива, затем осуществляется просмотр директории, где проверяется факт изменения даты и времениу файлов, а при необходимости – контрольной суммы CRC32. В случае обнаружения факта изменения исходного кода, происходит полное перестроение логической структуры кода BML в памяти путем последовательного считываниякаждого файла и синтаксического анализа их содержимого.Неблокирующий сокетДанные BSONПроцессFastCGIДокументв браузереклиентаПроцессFastCGIДокументв браузереклиентаПроцессFastCGIДокументв браузереклиентаНеблокирующий сокетПроцесссинхронизатораДанные BSONНеблокирующий сокетДанные BSONРис.
8. Сетевое взаимодействие синхронизатораДля связи синхронизатора и интерпретатора используются сетевые сокеты (рис. 8), что обеспечивает горизонтальную масштабируемость и кроссплатформенность, поскольку сокеты могут использоваться не только внутри однойсреды, но и взаимодействовать с другими системами удаленно. Синхронизаторсвязывается с процессом интерпретатора через интерфейс FastCGI, обмениваясь20порциями данных в формате BSON. Каждый экземпляр процесса интерператоранаходится в памяти сервера и ждёт новых клиентских подключений.В заключении подведены итоги работы над диссертацией с подробнымописанием полученных результатов.В приложении A представлены акты о внедрении и свидетельство на программу для ЭВМ.В приложении B представлены листинги проектов (рецепты), реализованных на основе разработанной методики и языка BML.Основные выводы и результаты работыИтогом диссертационной работы стал программный комплекс, являющийся инструментарием разработки динамических Web-узлов и приложений,что показано в следующих результатах:1.
Разработан метод декларативного программирования Web-приложений насерверной стороне, а также его фундаментальные элементы и их взаимодействие. Доказана целесообразность применения декларативной методики и разработки предметно-ориентированного языка. Предложены базовыесущности языка: модель, локация, набор, блок. Обозначены принципы взаимодействия между сущностями. Показаны принципы полиморфизма отдельных блоков в зависимости от своих типов.2.
Метод комплексной оценки инструментов императивной и декларативнойразработки динамических Web-узлов. Построена оценочная модель программного кода в целом и разрабатываемого языка программирования вчастности. Приводится обзор критериев оценки. Упоминаются достоинстваи недостатки существующих оценочных методов. Применяется метод анализа иерархий для определения наиболее важных критериев. С помощьюметрик Холстеда осуществляется сравнение между языками BML и PHP.3.
Унифицированный метод разграничения прав доступа к данным. Предложен алгоритм комплексного распространения прав доступа на наборы иблоки. Применено наследование прав доступа и расставлен приоритет длягрупп. Предложен механизм авторизации пользователей.4.
Унифицированный алгоритм приёма пользовательских данных с учётом иххарактерных особенностей. Предложен алгоритм приёма пользовательскихданных в зависимости от их характера: идемпотентные или модифицирующие. В данном алгоритме показано, как именно обрабатываются неизменяемые данные, а также как производится приём данных модифицирующегозапроса.5. Декларативный язык программирования BML на основе формализованныхметодов.
В нём определен порядок записи базовых сущностей методики21BlockSet в исходном коде языка BML. Представлен обзор свойств и их значений для основных сущностей: модели, локации, блока и набора. Проведён подробный обзор типов блоков и их функциональных характеристик.Разработан перечень данных, передаваемых из интерпретатора в шаблонизатор.6. Алгоритм выбора релевантного объекта, идентифицируемого шаблоном.Представлен алгоритм поиска мощности множества у регулярного выражения с целью поиска оптимального шаблона и расстановки приоритетову локаций. Рассмотрен способ преобразования регулярного выражения вконечные автоматы.
Для вычисления мощности множества и устранениянеопределённостей предлагается ряд методов: упрощение регулярного выражения, алгоритм вычисления в пересекаемых множествах.7. Архитектура программного комплекса интерпретатора языка BML. Показана технологическая сторона построения интерпретатора языка BML. Проведён обзор динамических платформ, а также их нагрузочное тестирование. Показана схема взаимодействия компонентов интерпретатора междусобой. Представлены сравнительные характеристики синтаксических анализаторов XML.
Детально рассмотрена архитектура фабрики, задействованная в интерпретаторе при обработке логики работы блоков. Выбраншаблонизатор и показан алгоритм взаимодействия с ним. Обособлено внедрение в проект синхронизатора, показаны алгоритмы его работы с BMLдокументами, показан обзор методов межпроцессного взаимодействия.8. Нагрузочное тестирование компонентов интерпретатора. Проведено нагрузочное тестирование динамических платформ с целью выявления наиболееоптимальной и выбрана платформа FastCGI.
Проведено нагрузочное тестирование межпроцессного взаимодействия между ядром интерпретатора исинхронизатором, выбрано взаимодействие на основе сокетов.9. Визуальный редактор построения структур декларативного языка BML.Разработан визуальный редактор, представляющий собой надстройку надязыком BML и предоставляющий следующий функционал: мастер создания проекта, редактор локаций и модели, редактор наборов, редактор блоков, конструктор прав доступа.22Публикации автора по теме диссертацииВ рецензируемых журналах из перечня ВАК1. Бубнов А. В., Кейно П. П. Особенности приёма данных по протоколу HTTP в компилируемом Web-приложении и их унификация в предметно-ориентированном языке //Безопасность информационных технологий.