Difference between revisions of "Ej-agent"
(Created page with "Навигация: Главная страница/Система ejudge/Использование/Общая архитектура системы...") |
(...) |
||
| (One intermediate revision by the same user not shown) | |||
| 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> — идентификатор очереди, с которой будет выполняться обмен. | ||
| + | * <code>-i INST-ID</code> — идентификатор подключающегося клиента; используется при записи в лог-файл. | ||
| + | * <code>-m MODE</code> — режим работы: <code>MODE</code> должен быть либо <code>compile</code>, либо <code>run</code> в зависимости от того, с какой очередью (компиляции или тестирования) требуется взаимодействовать. | ||
| + | * <code>-v</code> — выводить принимаемые и отправляемые пакеты на стандартный поток ошибок, то есть в лог-файл. | ||
| + | |||
| + | Поддерживается начиная с версии [[изменения в версии 3.10.0|3.10.0]]. | ||
Latest revision as of 09:08, 26 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.