Difference between revisions of "Ej-agent"

From EjudgeWiki
 
(...)
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Общая архитектура системы]]/[[ej-agent]]
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Общая архитектура системы]]/[[ej-agent]]
 +
 +
Этот компонент отвечает за взаимодействие
 +
хостов компиляции и выполнения с сервером ejudge
 +
и необходим для организации
 +
[[Параллельное тестирование|компиляции и тестирования, распределенного в сети]].
 +
 +
В качестве канала передачи данных для компиляции и тестирования
 +
используется канал удаленного входа в систему по протоколу ssh.
 +
Поэтому для компиляции и выполнения по сети должен быть
 +
настроен вход по ssh на сервер ejudge без пароля.
 +
 +
Компоненты компиляции [[ej-compile]] и тестирования [[ej-super-run]]
 +
выполняют команду
 +
ssh EJUDGE-SERVER ej-agent
 +
таким образом на сервере запускается компонент ej-agent,
 +
и он оказывается связанным с соответствующей компонентой
 +
компиляции или запуска через канал ssh.
 +
Компонент ej-agent получает данные с хоста компиляции или
 +
тестирования от компонента ej-compile или ej-super-run
 +
на своём стандартном потоке ввода, а данные, выводимые ej-agent
 +
на свой стандартный поток вывода, передаются по каналу ssh
 +
на хост компиляции или тестирования.
 +
 +
Протокол взаимодействия ej-agent и клиентской части основан
 +
на обмене сообщениями в формате JSON, бинарные данные
 +
сжимаются и кодируются base64 перед пересылкой.
 +
Протокол поддерживает передачу файлов в обе стороны, проверку
 +
наличия файлов в каталоге, а также подписку на изменение
 +
состояния каталога с последующим уведомлением.
 +
 +
Преимущество ej-agent по сравнению с опросом состояния файловой
 +
системы, примонтированной с помощью sshfs, в том, что
 +
ej-agent использует эффективные средства наблюдения за состоянием
 +
каталога (inotify) и может уведомить о событии немедленно после того,
 +
как оно случилось. В то время как при использовании sshfs
 +
возникали существенные задержки из-за необходимости
 +
постоянного опроса содержимого каталогов очередей при том,
 +
что список файлов в каталоге кешировался клиентом, то есть
 +
изменения в каталоге попадали клиентам не сразу.
 +
 +
При использовании ej-agent нет необходимости монтировать
 +
каталоги очередей и каталоги турниров, так как ej-agent
 +
поддерживает передачу файлов тестов, проверяющих программ и т. п.
 +
Кроме того, ej-agent не пересылает неизменившиеся файлы,
 +
что позволяет организовывать кеширование файлов турниров
 +
на тестирующих компьютерах.
 +
 +
Программа ej-agent поддерживает следующие аргументы
 +
командной строки:
 +
 +
* <code>-n QUEUE-ID</code> &mdash; идентификатор очереди, с которой
 +
будет выполняться обмен.
 +
* <code>-i INST-ID</code> &mdash; идентификатор подключающегося клиента;
 +
используется при записи в лог-файл.
 +
* <code>-m MODE</code> &mdash; режим работы: <code>MODE</code>
 +
должен быть либо <code>compile</code>, либо <code>run</code>
 +
в зависимости от того, с какой очередью (компиляции или тестирования)
 +
требуется взаимодействовать.
 +
* <code>-v</code> &mdash; выводить принимаемые и отправляемые
 +
пакеты на стандартный поток ошибок, то есть в лог-файл.
 +
 +
Поддерживается начиная с версии [[изменения в версии 3.10.0|3.10.0]].

Revision as of 23:29, 25 December 2022

Навигация: Главная страница/Система ejudge/Использование/Общая архитектура системы/ej-agent

Этот компонент отвечает за взаимодействие хостов компиляции и выполнения с сервером ejudge и необходим для организации компиляции и тестирования, распределенного в сети.

В качестве канала передачи данных для компиляции и тестирования используется канал удаленного входа в систему по протоколу ssh. Поэтому для компиляции и выполнения по сети должен быть настроен вход по ssh на сервер ejudge без пароля.

Компоненты компиляции ej-compile и тестирования ej-super-run выполняют команду

ssh EJUDGE-SERVER ej-agent

таким образом на сервере запускается компонент ej-agent, и он оказывается связанным с соответствующей компонентой компиляции или запуска через канал ssh. Компонент ej-agent получает данные с хоста компиляции или тестирования от компонента ej-compile или ej-super-run на своём стандартном потоке ввода, а данные, выводимые ej-agent на свой стандартный поток вывода, передаются по каналу ssh на хост компиляции или тестирования.

Протокол взаимодействия ej-agent и клиентской части основан на обмене сообщениями в формате JSON, бинарные данные сжимаются и кодируются base64 перед пересылкой. Протокол поддерживает передачу файлов в обе стороны, проверку наличия файлов в каталоге, а также подписку на изменение состояния каталога с последующим уведомлением.

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

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

Программа ej-agent поддерживает следующие аргументы командной строки:

  • -n QUEUE-ID — идентификатор очереди, с которой

будет выполняться обмен.

  • -i INST-ID — идентификатор подключающегося клиента;

используется при записи в лог-файл.

  • -m MODE — режим работы: MODE

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

  • -v — выводить принимаемые и отправляемые

пакеты на стандартный поток ошибок, то есть в лог-файл.

Поддерживается начиная с версии 3.10.0.