/cluster

Distributed computing system for OpenComputers

MIT LicenseMIT

cluster

Система распределённых вычислений для OpenComputers.

Основной модуль системы - библиотека, которая будет "дирижировать" работой кластера. Пользователь должен установить эту библиотеку на компьютер, который будет выполнять роль "центра". Затем, он устанавливает N-ое количество других компьютеров (или микроконтроллеров) в зоне досягаемости модема "центра". Они будут служить "нодами" кластера. То есть будут собственно вычислительными ячейками системы.

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

Интерфейс

Библиотека центра предоставляет следующие функции:

cluster.init(estimatedClusterSize: number, [port: number])

Функция запускает и настраивает кластер.

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

port - необязательный параметр. Порт на котором будет идти общение кластера. Если не указывать, будет использовано дефолтное значение (27).

cluster.setup(id: string, task: string, [run: boolean])

Добавляет новую задачу в очередь задач кластера. Центр автоматически назначит её одной из свободных нод.

id - название-метка для задачи, чтобы в дальнейшем к ней можно было обращаться и управлять ей. Также этой меткой будет отмечен результат задачи.

task - Lua код задачи в виде строки

run - необязательный флаг. Если передать true то задача будет запущена сразу же после того как центр назначит её свободной ноде. По дефолту нода будет ждать отдельной команды на запуск.

cluster.run([id: string])

Команда запускающая выполнение нодами всех назначенных задач.

Если указан параметр id, то будет запущена только одна задача - с указанным id.

cluster.drop([id: string])

Команда сбрасывает все назначенные задачи, делая все ноды свободными.

(Некоторым нодам, возможно, потребуется завершить выполнение начатой задачи.)

Если указан параметр id, то будет сброшена только одна задача - с указанным id.

cluster.status([id: string])

Команда возвращает табличку, в которой указано состояние всех нод кластера (заняты или нет).

Если указан параметр id, то будет вовзращено состояние только одной ноды - с указанным id.

cluster.stop()

Останавливает кластер, закрывает открытые сетевые порты.

Для того чтобы запустить кластер после такой остановки, потребуется снова выполнить команду cluster.init()

События

Библиотека будет создавать события, которые позволят следить за основными моментами выполнения задач.

cluster(action: string, [values])

Все эвенты будут иметь общее название cluster но будут нести разный код действия (action).

Коды:

started - кластер готов к работе.

done - задача завершила работу. Дальше эвент передаст id завершённой задачи, и все значения которые задача вернула как результат работы.

stopped - кластер остановлен.