Исполнитель задач и очередь на Go

Данная краткая статья является больше лайф-хаком или же заметкой в мире IT.

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

Поняв, что наши программисты на PHP не смогут нормально сделать параллельную очередь, притом continuos очередь, чтобы видео карты не простаивали на серверах, тогда я приступил к разработке на Go и сделал буквально за неделю готовый сервис по приему задач (команд) через HTTP-протокол и их выполнения в параллельном, и не только, режиме с различными опциями.

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

Я постарался сделать cTRL сервис простым и легконастраиваемым.

Сервис содержит три очереди: received, working, completed. Из всех очередей можно удалить любые задания по ключу, типу или полностью очистить очередь. Для каждого виртуального хоста поддерживается своя таблица с данными очередями.

После завершения задач можно получать информацию о завершенных заданиях, получать stdout/stderr, время выполнения и другую информацию.

Что умеет:

  • Многопоточность
  • Поддержка HTTPS и Auth/IP авторизации
  • Поддерживаемые HTTP-методы: GET, POST
  • Прием задач в очередь для отложенного параллельного исполнения команд
  • Параллельное исполнение задач в реальном времени
  • Ограничение максимального количества потоков на каждый виртуальный хост
  • Поддерживает непрерывную очередь исполнения задач
  • Автоматическое одновременное исполнение только одной одинаковой задачи
  • Поддерживаемые интерпретаторы: /bin/bash, /bin/sh
  • Поддерживаемые форматы: JSON

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

Полная документация есть здесь: github.com/eltaline/ctrl

Проект лицензирован под Apache 2.0 лицензией.

ссылка на оригинал статьи https://habr.com/ru/post/503392/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *