Flute

Материал из Course Orchestra
Перейти к: навигация, поиск

Система Flute

Duke1-2.png

Общие сведения

Flute представляет собой приложение, которое может быть запущено в виде сервиса на системах Windows или Linux.

Flute служит для управления фоновым запуском в нескольких параллельно выполняемых процессах Celesta-скриптов для выполнения широкого спектра действий: формирования отчётов, выполнения расчётов/модификации базы данных, регламентной обработки данных т. п.

Скрипты для Flute, как и все прочие Celesta-скрипты, пишутся на языке Python, хранятся в виде обычных текстовых файлов, модифицируются под нужды каждого отдельного проекта и, при необходимости, могут быть пошагово отлаживаемы с помощью IDE, поддерживающего Python.

Источники задач Flute

Flute поддерживает следующие виды запуска задач (в экземпляре сервиса Flute можно комбинировать любое количество источников любого вида):

  • REST-сервис,
  • redisqueue в момент прихода сообщений из очередей Redis,
  • dbtable по возникновению записей в таблице базы данных,
  • scheduledtask по CRON-расписаниям,
  • looptask в бесконечном цикле через определённые интервалы.


Rest-сервис

Flute обладает возможностью запуска встроенного rest-сервиса для выполнения заранее подготовленных процедур. Имеется возможность настройки url-маппинга для каждой процедуры-обработчика, а также before/after фильтров для обработчиков.


Таблица реляционной базы данных

При указании таблицы реляционной БД в качестве источника, Flute обрабатывает очередь выполнения задач на этой таблице. Добавление заданий на исполнение осуществляется путём добавления записей в таблицу, в этих записях может быть указано название Celesta-скрипта и передаваемые параметры. В процессе выполнения заданий система модифицирует данные в столбцах этой таблицы, изменяя поле «статус» («не выполнялось», «выполняется», «выполнено корректно», «выполнено с ошибкой»), поле «результат выполнения» и поле «сообщение».

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

Очередь Redis

Flute может брать задания из очередей, реализованных на базе списков Redis и команды BLPOP. Содержимым сообщения ожидается название скрипта и параметр выполнения.

В отличие от режима, когда данные берутся из таблицы и где опрос таблицы происходит на периодической основе, в режиме Redis-очереди Flute получает команду на выполнение задания из очереди Redis моментально. Так же, как и в «табличном» режиме, задания выполняются параллельно, вплоть до заданного уровня пареллелизма.

CRON-расписания

Ещё одним сценарием работы сервиса Flute является автоматический запуск периодических задач по расписанию (например: «выполнять каждый день в 7 утра по рабочим дням недели» или: «выполнять в начале каждого часа»). Стандартом для задания расписаний в UNIX-подобных системах является синтаксис утилиты CRON. Таким образом, при указании данного источника задач, задания на выполнение инициируются расписанием периодического выполнения, определяемом в синтаксисе CRON, при этом Flute использует Java-реализацию CRON cron4j.

Выполнение в бесконечном цикле

В отличие от запуска по CRON-расписанию, имеющему фиксированное время начала задачи, при выполнении в бесконечном цикле фиксированным является интервал времени между выполнением задач (после завершения предыдущей и началом следующей). Таким образом, если при выполнении очень длинных задач по расписанию CRON теоретически возможно параллельное выполнение (следующая задача запускается, хотя предыдущая ещё не закончилась), запуск в бесконечном цикле гарантирует последовательное выполнение. Кроме того, расписание CRON нельзя настроить таким образом, чтобы задача выполнялась чаще одного раза в минуту, в то время как для интервала между выполнениями в бесконечном цикле можно указать любое количество миллисекунд.


Celesta-процедуры, запускаемые Flute

Каждая Celesta-процедура, помимо стандартного для Celesta параметра context, должна принимать объект-параметр flute, содержащий следующие атрибуты:

  • id — идентификатор задачи (только для источника типа dbtable),
  • sourceId — идентификатор источника задачи (GUID, генерируемый системой Flute для каждого источника при инициализации),
  • params — строка с дополнительными параметрами задачи,
  • resultstream — поток вывода, в который можно записывать данные результата (только для источника типа dbtable),
  • message — переменная, в которую можно записывать сообщение (только для источника типа dbtable).

Например:

def foo(context, flute):
    #Вывод в stdout параметров скрипта
    print flute.params

Также скрипту будут доступны: все API, предоставляемые Celesta, все Python-классы, находящиеся в папке pylib, и все Java-классы, находящиеся в папке lib установочной директории Flute. По умолчанию при установке Flute в эти папки записывается стандартная библиотека Python и Java-модули Xml2Spreadsheet, соответственно, но пользователь может установить туда и собственные библиотеки.

Поддерживаемые СУБД

Набор баз данных, поддерживаемых системой Flute, соответствует таковому для системы Celesta: MS SQL, Oracle, PostgreSQL, H2.

Примеры решений

Примеры готовых решений, предназначенных для Flute:

  • Xml2Spreadsheet — система формирования Excel и PDF-отчётов на основе XML-данных и вывода их на печать,
  • Theremin — система расчёта показателей в OLAP-хранилище,
  • mailsender — модуль для быстрой реализации почтовых рассылок.

Руководство по системе