/scheduler

Primary LanguageErlang

SCHEDULER

Для тестов

rebar eunit

Для запуска приложения

rebar compile&&./start.sh

Для запуска бенчмарка

scheduler:benchmark().

API

-spec scheduler:schedule(TaskID :: binary(), PID :: integer(),
          Type :: static|dynamic,
          Time :: {rel, integer()}|integer()) -> ok.
          
-spec scheduler:unschedule(TaskID :: binary(), PID :: integer()) -> ok.     

Architecture

Cупервизор scheduler_sup со стратегией one_for_all запускает два воркера scheduler_srv и aggregator_srv и дочерний супервизор queue_sup. scheduler_srv - пул очередей, запускает воркер queue_srv для каждого нового processID из под супервизора queue_sup (simple_one_for_one). queue_srv - принимает и удаляет данные в очередь, один раз в секунду проверяет очередь на таски у которых подошло время для выполнения(извлекает и ложит их в очередь реббита push_to_mq(Tasks) ). Также проверяется длина очереди, при необходимости излишки отправляются в аггрегатор (откуда ложатся в базу ), или наоборот пытается дополнить очередь из базы. agregator_srv - воркер, накапливает “излишки данных” из очередей и через промежуток времени ложит в базу (save_to_db(Tasks)) или по запросу достает из базы таски (get_from_db(PID, Quantity)) для дополнения очередей, также выполняет запросы на удаление конкретных тасок из базы.

Task

[https://docs.google.com/document/d/1X3nr_Lz1YcO9A8eHZ1DGWMLQ9VyXL7cZVOkuYPlQMRU]