Диссертация (Математическое и программное обеспечение балансировки вычислительных заданий для распределенных вычислительных комплексов на основе прогнозных моделей), страница 12
Описание файла
Файл "Диссертация" внутри архива находится в папке "Математическое и программное обеспечение балансировки вычислительных заданий для распределенных вычислительных комплексов на основе прогнозных моделей". PDF-файл из архива "Математическое и программное обеспечение балансировки вычислительных заданий для распределенных вычислительных комплексов на основе прогнозных моделей", который расположен в категории "". Всё это находится в предмете "технические науки" из Аспирантура и докторантура, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "диссертации и авторефераты" в общих файлах, а ещё этот архив представляет собой кандидатскую диссертацию, поэтому ещё представлен в разделе всех диссертаций на соискание учёной степени кандидата технических наук.
Просмотр PDF-файла онлайн
Текст 12 страницы из PDF
Основноевнимание в разработках, использующих подобный подход, уделяетсявзаимодействию всех лиц, участвующих в разработке.Одними из наиболее распространённых методов гибкой разработкиявляются методология экстремального программирования (англ. extremeprogramming – XP). Метод XP [88] определяет набор условий для разработкипрограммного обеспечения.
Концепция данного метода основывается наследующих наиболее важных принципах [88]:1. Постоянное общение и взаимодействие всех лиц, участвующих впроцессеразработки.Разработкаведетсянаоснованиисогласованных с заказчиком стандартов.2. Постоянная модульная проверка работоспособности программногокода на всех этапах разработки, что позволяет минимизироватьвозможность возникновения ошибок.3.
В качестве показателя оценки прогресса разработки принятконтроль времени исполнения согласованных работ. Для контроляхода работ используется метод пользовательских оценок.Экстремальное программирование представляет собой поэтапныйпроцесс разработки. Проект разделяется на множество мелких проектов,82внутри которых формируется набор задач, которые необходимо решить, врамках данного проекта. В результате такого подхода происходит поэтапноеувеличениефункциональностиразрабатываемогопрограммногообеспечения, что приводит к выпуску множества его версий. На рисунке 4.2показан процесс создания программы с использованием методологииэкстремального программирования.Рисунок 4.2 — Процесс разработки с использованием методологии XPОдним из наиболее важных этапов в данной методологии является этаппланирования.Особенностьюметодовгибкойразработкиявляетсядекомпозиция комплексной задачи на небольшие итерационные этапы сконкретными подзадачами.
Применительно к XP формирование подзадачосуществляется на основании, так называемого, списка пользовательскихисторий. Под пользовательской историей понимают функцию, в которой вобщих чертах выражаются основные пожелания заказчика к требуемомойфункциональности, которая реализуется данной функцией [89]. Полныйсписокпользовательскихпользовательскуюисторию,историйкотораяформируетсявобобщённуюопределяетвсетребования,83предъявляемые к разрабатываемой системе.
На практике обобщённуюпользовательскую историю часто именуют эпикой [89].Важно отметить, что концепция экстремального программирования несодержит в себе требования о необходимости проведения процессамоделирования.Процессмоделированияфактическизаменяетсяэффективной коммуникацией между людьми и поэтапным построениемсистемы. Однако, как отмечено в [90], при использовании методологии XPвозможно применение различных методов моделирования и описанияразрабатываемой системы, если оно будет полезно для взаимодействияучастников.Дляописанияфункциональныхсвойствиструктурыразрабатываемой системы, а также, взаимосвязи между участниками, можноприменять различные методы моделирования.
Стоит отметить, что насегодняшниймоментособуюактуальностьприобретаетмодельно-ориентированный подход к разработке (англ. MDA – Model DrivenArchitecture). Данная парадигма заключается в отделении спецификифункциональности системы от конкретной платформы реализации [91].Часто,дляописаниявзаимодействияпроцессовпрограммывразработкиконцепцииифункциональногомодельно-ориентированногоподхода используется унифицированный язык моделирования (англ. UMLUnified Modeling Language). Использование UML при проектировании иреализации разрабатываемой системы позволяет значительно упроститьпроцесс разработки за счёт использования структурных диаграмм.
Так,например, для описания пользовательских историй, которые являютсянеотъемлемой частью методологии экстремального программирования,возможно применение диаграммы прецедентов языка UML.Вданномдиссертационномисследованиидлядетальногопроектирования системы использовался программный комплекс VisualParadigm for UML [92] версии Community Edition.
Данная версия продуктабесплатнадлянекоммерческогоиспользованияипредоставляетнеобходимую функциональность для реализации системы балансировки84вычислительнымизаданиямидляраспределённыхвычислительныхкомплексов.4.2. Обоснование выбора программно-аппаратных средствреализации разрабатываемой программной системыВрезультатеанализатребований, предъявляемыхксистемамразрабатываемого типа, были определены следующие требования, которыенеобходимо учитывать в ходе разработки:Программная система должна использовать модульный принциппостроения, что обеспечит возможность её легкой модернизации.Система должна состоять из клиентской и серверной частей и дляобеспечения требуемой скорости разработки использовать один изактивно использующихся на практике языков высокого уровня,поддерживающихобъектно-ориентированнуюимодульнуюпарадигмы программирования.Разработанная система должна обладать максимально возможнойкроссплатформенностью, для обеспечения возможности работы вгетерогенной среде.
Однако, если архитектура вычислительныхузловбудетотличатьсяотрассматриваемоговданномдиссертационном исследовании (X86), то необходимо обеспечитьвозможностьлегкогоизмененияпрограммногокодаподконкретную архитектуру.В соответствии с описанными выше требованиями, в качествеосновного языка программирования был выбран языкJAVA [93]. ЯзыкJAVA ведёт свою историю с 1991 года, когда Джеймс Гослинг с командойразработчиков начали работу над языком программирования, которыйпозволил бы разрабатывать программы для бытовой техники. Передразработчикамистояласложнаязадачапообеспечению85машинонезависимостиразрабатываемогокода.Дляобеспеченияинвариантности кода, разработчики использовали модель разработки языка,аналогичной той, которую использовал Никлаус Вирт при создании языкаUCSD Pascal [94]. Диалект UCSD Pascal обеспечивал машинонезависимостьза счёт использования методов интерпретации конкретных действий в языкев специальный P-код и его последующего запуска в абстрактной машине (Pмашина).
В результате работы специалистов в данном направлении в 1996году была представлена первая версия языка JAVA. На момент написанияданной главы выхода в свет ожидала версия JAVA 8.Основным преимуществом языка является его независимость отконкретной архитектуры. Данное свойство языка достигается за счётиспользования виртуальной машины JVM, которая входит как в пакетразработчика JDK, так и распространяющаяся отдельно в виде пакета JavaRuntime Environment.
Процесс создания исполняемой программы состоит изнескольких этапов. После запуска процесса компиляции, посредствомпередачи файла с исходным текстом компилятору javac с требуемымиключами исполнения (для IDE аналогично нажатию на кнопку сборки икомпиляции программы), компилятор осуществляет перевод исходного кодав промежуточный байт-код, который не зависит от конкретной архитектуры.Далее виртуальная машина, которая написана для большинства современныхархитектур процессоров, транслирует байт-код в исполняемый машинныйкод для конкретной архитектуры. На рисунке 4.3 показан процесс запускапрограммы на языке JAVA.86Рисунок 4.3 — Сравнение процесса запуска программы с использованиемтехнологии промежуточного кода и непосредственной трансляцииСтоитотметить,чтоиспользованиетехнологииинтерпретациипрограммы в полной мере не позволила обеспечить кроссплатформенностьразработанных программ. Для этих целей также была произведена жесткаястандартизация основных типов данных и операций над ними.Исходя из всего вышеизложенного, можно говорить о том, что языкJAVA полностью удовлетворяет требованиям, предъявляемым к языкупрограммирования для реализации системы балансировки нагрузки.
Прианализенеобходимостииспользованияопределённыхклассов,быловыявлено, что для реализации необходимого фукнционала достаточностандартного набора библиотек, определённых в издании JAVA EE. Важноотметить, что большинство подобных систем балансировки нагрузки дляналоженных сетей, часто не имеют графического интерфейса, а обращение ккомпонентам системы для модификации происходит посредством SSH –соединения или telnet.
В качестве примера можно привести процессконфигурирования GridFTP – серверов, который представлен в руководствепользователя [96].Дляупрощенияпроцессаразработкисистемыиспользоваласьинтегрированная среда разработки (IDE) Eclipse версии 4.5 Mars [95]. IDEEclipse представляет собой интегрированную среду разработки, в которой87можно создавать программы на большинстве распространённых языковпрограммирования, таких как С/Cи++, JAVA, PHP.
Eclipse состоит из набораплагинов под каждый конкретный язык, что позволяет производить легкуюмодернизацию данной среды разработки с выходом новых версий языков.Разработка программы в Eclipse на языке JAVA ведётся посредством плагинаJava Development Tools (JDT).Особым преимуществом данной среды является наличие средствсовместной разработки. Так для контроля версий программного обеспеченияиспользуется плагин Egit, который обеспечивает доступ к распределённомуgit хранилищу, что позволяет контролировать выпуск версий программногообеспечения, а также регулировать и контролироватьработу отдельныхразработчиков.Так как было определено, что разрабатываемая система должнаобеспечивать модель архитектуры «клиент-сервер», то необходимо былообеспечить выбор необходимой технологии обмена данными междупроцессами клиентской и серверной частей приложения.
Одним из наиболееудобных и наиболее распространённых на практике способов организациивзаимодействия клиентских и серверных приложений является технологиясокетов (англ.socket). Основным преимуществом данного подхода являетсятообстоятельство,чтосокетывJAVAпредставляютсобойплатформонезависимый интерфейс между сетевым протоколом и самойпрограммой [97].Для реализации технологии сокет в JAVA существуетспециальный пакет java.net. Стоит отметить, что, начиная с версии 1.4 j2se,появился новый пакет java.nio.*, в котором есть соответствующая реализацияметодов работы с неблокирующими сокетами. Общий алгоритм работылюбой клиент-серверной программы состоит из следующих шагов:На стороне сервера:1. Создать сокет и привязать его к определённому порту.2.
Прослушивать порт, ожидая подключение клиента883. Обработать поступивший запрос от клиента, начать работать свходным и выходным потоком сокета, редактировать запрос клиента нановый сокет.4. Закрыть сокет (serverSocket.close()).На стороне клиента:1. Создать сокет с указанием IP – адреса хоста, где исполняетсясерверная часть приложения и соответствующего номера порта, ккоторому привязан сервер.2. Создать входной и выходной поток для получения и отправкиданных.3. Разъединить клиента с сервером.Такимобразом,взаимодействияреализацияклиентскойфункциональностичасти приложениямежпроцессноговыглядит следующимобразом:import java.io.*;import java.net.*;import java.testDEV.n1;public class Host{public static void main( ) throws IOException {Socket sSocket = null;PrintWriter vi = null;BufferedReader iv = null;try {nnSocket = new Socket(“localhost”, 6000); /*указываемIp-адрес сервера и порт */vi=newPrintWriter(sSocket.getOutputStream(),true);iv=newInputStreamReader(sSocket.getInputStream()));BufferedReader(new89}catch(UnknownHostExceptione){/*обработкаисключительных ситуаций */System.err.println(«неизвестный Ip-адрес или порт»);/*не праильно задан хост */System.exit(1);} catch (IOException e) {System.err.println(«Неудалосьначатьработатьсвходным и выходным потоком сокета «);System.exit(1);}BufferedReaderstdIn=newBufferedReader(newInputStreamReader(System.iv));String fromServer;String fromHost;while ((fromServer = iv.readLine()) != null) {if (fromServer.equals(“Выход”))break;System.out.println(“Сервер: “ + fromServer);fromUser = stdIn.readLine();vi.println(fromUser);}System.out.println(«Клиентотключилсяотсервера:«+fromServer);vi.close();iv.close();stdIn.close();sSocket.close();// Закрываем сокет}}Соответственно, реализация серверной части представлена следующимобразом:import java.io.*;import java.net.*;90import java.forecast.*;public class Manager {public static void main( ) throws IOException {ServerSocket serverSocket = null;try {serverSocket = new ServerSocket(6000);} catch (IOException e) {System.err.println(«Не возможно использовать порт.»);System.exit(1);}System.out.println(“Сервер работает.”);Socket clientSocket = null;try {clientSocket = serverSocket.accept();} catch (IOException e) {System.err.println(“Accept failed.”);System.exit(1);}PrintWritervi=newPrintWriter(clientSocket.getOutputStream(), true);BufferedReader iv = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine, outputLine;Protocolsp=newProtocol();/*будемпотоковыми или дейтаграмными сокетами? ) */outputLine = sp.processInput(null);vi.println(outputLine);while ((inputLine = iv.readLine()) != null) {if(inputLine.equals(“exit”)){vi.println(“остановка”);break;}работатьс91outputLine = sp.processInput(inputLine);vi.println(outputLine);//if (outputLine.equals(“стоп сервер”))//break;}System.out.println(«Сервер не запущен");vi.close();iv.close();clientSocket.close();serverSocket.close(); //закрывает сокет}}Стоитотметить,чтосуществуетиряддругихтехнологий,позволяющих осуществить вызов удалённых процедур для нашей задачи.