Научная статья на тему 'Сокетный сервер для удаленного взаимодействия пользователя с системой управления распределенными вычислениями'

Сокетный сервер для удаленного взаимодействия пользователя с системой управления распределенными вычислениями Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
343
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СОКЕТНЫЙ СЕРВЕР / МНОГОПОТОЧНОСТЬ / PORTABLE BATCH SYSTEM / JAVA / MATHPARTNER / MPI / SOCKET SERVER / MULTITHREADING

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

Приводится подробное описание реализации сокетного сервера для взаимодействия с cистемой управления распределенными вычислениями через веб-интерфейс. Программа написана на языке Java и входит в состав библиотеки алгоритмов системы MathPartner.

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

SOCKET SERVER FOR REMOTE COMMUNICATION WITH THE PORTABLE BATCH SYSTEM

The article provides a detailed description of the implementation of the socket server to communicate with the Portable Batch System through the web-interface. The program is written in Java and is part of the web service MathPartner.

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

УДК 519.688

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

© Е.А. Ильченко

Ключевые слова: portable batch system; Java; сокетный сервер; многопоточность; MathPartner; MPI.

Приводится подробное описание реализации сокетного сервера для взаимодействия с системой управления распределенными вычислениями через веб-интерфейс. Программа написана на языке Java и входит в состав библиотеки алгоритмов системы MathPartner.

1 Постановка задачи

Парк параллельных вычислительных средств растет с каждым годом, так же как и число задач, которые требуют для решения применения суперЭВМ.

Одной из важных задач обеспечения доступа к суперЭВМ является задача организации очереди пользователей и удобства для пользователей процесса постановки задач на счет в суперЭВМ.

Одной из распространенных программ запуска задач на кластере является Portable Batch System (PBS) — система управления распределенными вычислениями. Основная функция PBS — запуск вычислительных задач в вычислительной среде по расписанию. PBS имеет консольный интерфейс. Как правило, для взаимодействия с этой системой достаточно двух команд — помещение программы в очередь для последующего выполнения и проверка ее состояния — чтобы понять, когда программа закончила работу. Команда qsub <conf ig> используется для помещения программы в очередь выполнения, где config — имя файла с настройками запуска. К настраиваемым параметрам относится количество требуемых процессоров, число требуемых узлов, путь к файлам для потока вывода и потока ошибок, путь к запускаемой программе. Команда qstat используется для отображения состояния задачи. Она позволяет определить позицию задания в очереди, либо состояние счета, либо состояние завершения вычислений.

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

Веб-сервис MathPartner содержит библиотеку символьно-численных алгоритмов, написанную на Java, а также пакеты параллельных программ, которые должны выполняться на удаленной суперЭВМ [5]-[7].

Задача состоит в создании программного средства, которое будет связующим звеном между веб-сервисом и PBS. Предполагается, что управляющий узел кластера с пакетом PBS и сервер, на котором установлен веб-сервис MathPartner, — это разные устройства, которые взаимодействуют по сети Интернет. Программа, являющаяся связующим звеном, будет установлена на управляющий узел кластера. С вебсервисом MathPartner она будет взаимодействовать через сокетное соединение.

Для взаимодействия с PBS Java-программа будет использовать класс Runtime, в частности его метод exec (String [] command). Это будет программный аналог обычной отправки команды в терминал. Программа PBSbridge, которую требуется разработать, должна удовлетворять следующим требованиям:

• Она должна обеспечивать запуск уже готовых программ, которые входят в библиотеку MathPartner. Для этого необходимо, чтобы на управляющем узле кластера располагалась копия Java-классов MathPartner, находящихся на вебсервере.

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

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

2 Описание алгоритма

Поскольку необходимо разграничить всех пользователей, требуется их регистрация в системе. Для этого в MathPartner добавлена небольшая процедура аутентификации пользователя. Для хранения данных используется внешняя СУБД. Только после того, как человек вошел в систему, он сможет использовать команды MathPartner для работы с PBSbridge. Вся система работает по принципу запрос-ответ: человек вводит в интерфейс MathPartner некоторую команду, далее она обрабатывается, и соответствующий ей запрос отправляется по сокетному соединению программе PBSbridge. Затем выполняются действия, соответствующие этому запросу, и результат возвращается по этому же соединению обратно.

Опишем общую схему работы программы PBSbridge. Класс, содержащий main-метод для запуска, имеет имя Server. Ниже представлен псевдокод метода main, с которого начинается выполнение программы:

//Закрытие потоков ввода-вывода System, in. close();

System. out. close ();

//создание файла, в который будет записываться отчет работы программы logFile=new FileWriter(AlgorithmsConfig.CNF_DATA_PATH+M/log.txt", false);

/ /создание серверного сокета

ServerSocket server = new ServerSocket(AlgorithmsConfig.CNF_SERV_PORT);

//создание структуры для хранения состояний задач taskStates=new TreeMap<Integer,TreeMap<Integer,Integer> >(); writeLog("Server successfully started"); while true do

new Server(server.accept());

. end

Рис. 1. Псевдокод main-метода класса Server

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

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

Для каждой задачи создается своя папка, которая находится внутри папки текущего пользователя. Например, они могут располагаться вот так: ../userX/taskY. Перед запуском задачи в папке будут находиться 2 файла: файл с настройками запуска параллельной программы и файл с входными данными для запускаемой программы.

Содержание файла с настройками запуска описывается спецификацией, которая используется PBS системой. В файле с входными данными хранится массив входных данных в виде сериализованных объектов. После того как программа завершит работу, в этой папке появятся еще 3 файла, которые являются результатами вычислений. Это будет массив сериализованных объектов, содержащих результаты вычислений, файл, содержащий стандартный поток вывода, и файл, содержащий сообщения об ошибках. Содержимое каждого из этих файлов может быть получено с помощью соответствующих команд интерфейса MathPartner.

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

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

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

Взаимодействие с программой PBSbridge осуществляется с помощью запросов, которые могут идти либо с веб-части, либо от того узла кластера, с которого началось выполнение на кластере текущей задачи.

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

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

Обработка всех запросов происходит в цикле, работа которого завершится только тогда, когда сокетное соединение будет разорвано. На рисунке 2 приведен псевдокод фрагмента этого цикла.

Здесь показана реализация обработки запроса QS_ADD_TASK, который служит для запуска программ. Он универсален, потому что используется для запуска как готовых MathPartner-алгоритмов, так и пользовательских загруженных программ. Настройки запуска передаются в виде сериализованного объекта класса TaskConf ig. В случае успешного запуска пользователю возвращается номер, присвоенный текущей задаче при запуске, он будет использоваться для отслеживания состояния задачи и для получения ее результатов.

Непосредственное создание файла с настройками запуска для PBS осуществляется классом Launcher. Он создает обычный текстовый файл, учитывая все настройки, которые были указаны в запросе от web-части, устанавливает права на исполнение для этого файла и отправляет соответствующую команду для запуска. На рисунке 3 приведен псевдокод этого метода.

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

Механизм отслеживания состояния задачи организован следующим образом.

После того как завершится выполнение метода CreateAndRunPBSf ile, задаче присваивается состояние «в очереди». Для запуска задачи на счет должны быть получены входные данные с управляющего узла кластера. Это происходит по запросу QS_GET_DATA_FOR_CALC. Задаче присваивается состояние «в процессе выполнения».

Возможны 2 варианта: либо задача успешно завершается и результаты пересылаются в PBSbridge с помощью запроса QS_RECV_RESULT_FOR_TASK_CLUSTER, либо задача аварийно завершает свою работу и в этом случае она не возвращает результат.

//инициализация потоков ввода-вывода:

//потоки ввода:

InputStream is = socket.getInputStream();

ObjectlnputStream inp=new ObjectlnputStream(is);

//потоки вывода (для возвращения результата):

OutputStream os = socket.getOutputStream();

ObjectOutputStream oos=new ObjectOutputStream(os);

//создание класса, с помощью которого мы будем запускать задачи:

Launcher launcher =new Launcher();

/ / цикл обработки запросов while true do

//получение идентификатора входящего запроса:

Integer qType=(Integer)inp.readObject();

Integer userlD;

/ /выполнение действий для соответствующего запроса switch qType do

case AlgorithmsConfig.QS_ADD_TASK //получение id пользователя user ID=( Integer) inp. readO bj ect ();

/ / получение данных и настроек для алгоритма Ob j ect [] data= (Ob j ect []) inp. readOb j ect ();

TaskConfig taskConf=(TaskConfig)inp.readObject();

//номер задачи, который присваивается данной задаче:

Integer taskNumb=addTaskInMap(userID);

/ /запуск задачи

Integer launchResult=launcher.launch(userID, taskNumb, data, taskConf);

//если no каким-то причинам задачу не удалось запустить, удаляем записи о ней:

if launchResult!=AlgorithmsConfig.RES_SUCCESS then removeTaskFromMap(userID, taskNumb); end

//возвращение результата запуска задачи и присвоенного ей номера: oos. writeOb j ect (launchResult); oos.writeObject(taskNumb); end

case AlgorithmsConfig.QS_ GET_DATA_FOR_ CALC //далее действия для обработки этого запроса

end

//далее идет обработка прочих запросов

endsw

end

Рис. 2. Псевдокод алгоритма обработки входящих запросов

//файл, в который мы запишем настройки для PBS:

FileWriter runFile;

//путь для этого файла:

String run_file_path = folderPath+"/run";

File dir = new File(run_file_path); runFile = new FileWriter (dir);

//запись строки настроек в файл запуска:

runFile.append("Здесь строка запуска, учитывающая все необходимые настройки");

//команда для изменение прав доступа к запускающему файлу:

String [|chMod="chmod", "777" 5 run_file_path;

//исполнение этой команды:

Process chmod = Runtime.getRuntimeQ.exec(chMod);

//команда запуска команды qsub:

String [Jcommand—"/opt/pbs/bin/qsub" , run_file_path;

//исполнение этой команды:

Process qsub = Runtime.getRuntime().exec(command);

Рис. 3. Псевдокод алгоритма создания файла с настройками для задачи и его

последующего запуска

Если задача аварийно завершит работу, то результат вычислений не будет отсылаться на сервер, и ее состояние будет по-прежнему «в процессе выполнения». Но в файл, содержащий поток ошибок, будет записано описание исключения (Exception), на котором программа остановила свою работу. А если задача завершила работу успешно, то файл с сообщением об ошибках будет пустым.

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

3 Заключение

Описанный алгоритм составил основу программы для сокетного сервера взаимодействия веб-сервиса MathPartner с системой PBS. Все этапы взаимодействия с PBS осуществляются пользователем веб-сервиса MathPartner в графической среде. Выполнение параллельных алгоритмов стало удобным и доступным для всех пользователей этого сервиса.

Набор команд в MathPartner, который предназначен для исполнения параллельных задач, был максимально полно приближен к непосредственной работе с PBS через терминал.

ЛИТЕРАТУРА

1. Ноутон П., Шилдт Г. Java 2. СПб.: БХВ-Петербург, 2001.

2. URL: http://parallel.ru

3. URL: http://open-mpi.com

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

4. Хабибулин И. Java 2. СПб.: БХВ-Петербург, 2005.

556

5. Малашонок Г.И. Руководство по языку «MATHPAR»: учебное пособие. Тамбов: Издательский дом ТГУ им. Г.Р. Державина, 2013.

6. Malaschonok G.I. Project of Parallel Computer Algebra // Tambov University Reports. Series: Natural and Technical Sciences. Tambov, 2010. V. 15. Issue. 6. P. 1724-1729.

7. Малашонок Г. И. Компьютерная математика для вычислительной сети // Вестник Тамбовского университета. Сер. Естественные и технические науки. Тамбов, 2010. Том 15. Вып. 1. С. 322-327.

БЛАГОДАРНОСТИ:

1. Автор выражает благодарность своему руководителю Г. И. Малашоноку за постановку задачи, а также И. А. Борисову и А.А. Бетину за плодотворные обсуждения возможных вариантов решения поставленной задачи.

2. Работа выполнялась при частичной поддержке гранта РФФИ № 12-07-00755-а.

Поступила в редакцию 25 декабря 2013 г.

Ilchenko Е.А. SOCKET SERVER FOR REMOTE COMMUNICATION WITH THE PORTABLE BATCH SYSTEM.

The article provides a detailed description of the implementation of the socket server to communicate with the Portable Batch System through the web-interface. The program is written in Java and is part of the web service MathPartner.

Key words: portable batch system; MPI; Java; socket server; multithreading; MathPartner.

Ильченко Евгений Александрович, Тамбовский государственный университет имени Г.Р. Державина, г. Тамбов, аспирант кафедры математического анализа, e-mail: ilchenkoea@gmail.com.

Ilchenko Evgeni Aleksnadrovich Tambov State University named after G.R. Derzhavin, Postgraduate Student of Mathematical Analysis Department, e-mail: ilchenkoea@gmail.com.

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