Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Безгодков_ВКР.doc
Скачиваний:
52
Добавлен:
26.03.2015
Размер:
21.47 Mб
Скачать
    1. 1.2 Проектирование структуры комплекса

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

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

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

  • Расширение.

Облегчение добавления новых свойств.

  • Изменения.

Облегчение смены требований.

  • Простота:

  • простота понимания;

  • простота реализации.

  • Эффективность:

  • достижение высокой скорости: выполнения и (или) компиляции;

  • достижение малого размера: объектного кода и (или) исходного кода.

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

Разработка с расчетом на изменения преследует другие цели, хотя подразуме­вает применение тех же приемов проектирования, что и для обеспечения расши­ряемости.

Простота является целью проектирования при любых обстоятельствах. Простая архитектура, которая допускает расширения и изменения, является редкостью, и ее создание требует больших усилий. К другим критериям, используемым при вы­боре архитектуры, относятся экономия машинного времени и экономия памяти.

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

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

  1. Пользовательский интерфейс

  2. Организация данных

  3. Обработка ошибок

  4. Управление ресурсами

  5. Ключевые алгоритмы

      1. 1.2.1 Размещение подсистем

Общая схема размещения функциональных частей ИПК представлена на рисунке 2.

Рисунок 2 — Диаграмма размещения

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

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

      1. 1.2.2 Взаимодействие компонентов серверного узла

Для пояснения принципов работы программного комплекса используется диаграмма компонентов, представленная на рисунке 3.

Рисунок 3 — Диаграмма компонентов

Сам межсетевой экран netfilterнаходится в ядре операционной системы. Для его включения или отключения необходимо перекомпилировать ядро.

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

Таблицы правил netfilterмодифицируются с помощью утилитыiptables. Утилитыiptables-saveиiptables-restoreпозволяют быстро сохранять и восстанавливать конфигурацию МСЭ.

Основной функционал серверного демона заключается в использовании этих утилит. Также для расширения возможностей ИПК серверный демон может обращаться к ограниченному набору других системных утилит: route, info, ifconfigи т.д.

В качестве интерфейса для взаимодействия серверный демон открывает сокет домена UNIXв рамках файловой системы сервера.

На этом же сервере запущен веб-сервер, на котором расположен сайт webipt.loc. Один из скриптов этого сайта реализует взаимодействие с серверным демоном через сокетUNIX. Доступ к сайту открыт из локальной сети по защищённому соединению.

Таким образом, логической основой ИПК является цепочка компонентов от веб-браузера на стороне пользователя до МСЭ в ядре сервера. На рисунке 4 изображена последовательность действий, реализующих исполнение команды iptables, введёной пользователем в форме браузера.

Рисунок 4 — Диаграмма последовательности «Выполнение команды iptables»

      1. 1.2.3 Диаграмма классов

При проектировании данного программного продукта будут использоваться классы представленные на диаграмме классов (рисунок 5).

Рисунок 5 — Диаграмма классов

Класс «Утилита сервера»описывает отдельную системную утилиту, которую можно запустить на сервере.

Свойства класса «Утилита сервера»:

  • name— название утилиты;

  • options— список доступных опций;

  • input_format— правило построения команды для вызова утилиты;

  • output_format— формат данных, возвращаемых утилитой.

Методы класса «Утилита сервера»:

  • execute— выполнить утилиту, передав ей набор параметров;

  • help— получить справочную информацию;

Класс «Опция»описывает отдельную опцию системной утилиты.

Свойства класса «Опция»:

  • key— идентификатор опции в командной строке;

  • data— данные, передаваемые с помощью опции.

Класс «Запрос»описывает запрос от серверного демона системной утилите.

Свойства класса «Запрос»:

  • utility_name— название утилиты, которой требуется направить запрос;

  • alias — условное обозначение запроса (может совпадать с названием утилиты);

  • input— данные, направляемые утилите;

  • output— данные, возвращаемые утилитой.

Методы класса «Запрос»:

  • check— проверка корректности данных;

  • execute— отправка запроса.

Класс «Серверный демон»описывает демон, запущенный на сервере.

Свойства класса «Серверный демон»:

  • name— имя исполняемого файла демона и путь к нему;

  • log_file— журнал работы демона.

Методы класса «Серверный демон»:

  • onSignal— реакция демона на сигналы перезапуска и завершения.

Класс «Сокет»описывает сокет, используемый для взаимодействия серверного демона со скриптами веб-сервера.

Свойства класса «Сокет»:

  • name— имя сокета в рамках файловой системы;

  • type— тип сокета, потоковый;

  • domain— домен сокета,UNIX;

  • data — поток данных, передаваемых через сокет;

Методы класса «Сокет»:

  • bind— создание сокета в рамках файловой системы;

  • select — неблокирующая проверка наличия запросов на соединение;

  • connect— соединение с сокетом;

  • recv— получение данных из сокета;

  • send— отправка данных в сокет.

Класс «Скрипт веб-сервера»описывает отдельный скрипт, вызываемый на веб‑сервере.

Свойства класса «Скрипт веб-сервера»:

  • url— адрес скрипта;

  • _SESSION— данные сеанса пользователя;

  • _REQUEST— запросы от пользователя.

Методы класса «Скрипт веб-сервера»:

  • return_page— выдать веб-страницу по запросу;

  • return_data— выдать потоковые данные по запросу;

Класс «Веб-страница»описывает отдельную веб-страницу, отображаемую пользователю.

Свойства класса «Веб-страница»:

  • encoding— кодировка содержимого,UTF-8;

  • content_type — тип содержимого, текст в формате HTML;

  • url — адрес скрипта, формирующего страницу или самой страницы;

  • data — данные, размещённые на странице;

  • tools — элементы управления (кнопки, ссылки и т.д.).

Класс «Элемент управления»описывает отдельный элемент веб-страницы, к которому привязано действие.

Свойства класса «Элемент управления»:

  • visual_component — компонент веб-страницы, событие на котором активирует элемент управления.

Методы класса «Элемент управления»:

  • onAction — действие, привязанное к визуальному компоненту.

Класс «Скрипт асинхронной передачи»описывает скрипт веб-страницы, предназначеный для асинхронного взаимодействия со скриптами веб-сервера.

Свойства класса «Скрипт асинхронной передачи»:

  • visual_component — компонент веб-страницы, изменяемый в зависимости от полученных данных.

Методы класса «Скрипт асинхронной передачи»:

  • sendRequest — отправка асинхронного запроса скрипту веб-сервера;

  • onReadyStateChange — отслеживание изменений состояния запроса и их обработка.