221V 3 years ago
parent
commit
f10c2ce2f1
1 changed files with 40 additions and 0 deletions
  1. 40 0
      README.md

+ 40 - 0
README.md

@@ -1,2 +1,42 @@
 # erlang_test
 
+Реализовать приложение для вызова событий по времени.  
+
+Приложение должно работать с относительной и абсолютной величинами таймингов  
+1. Текущее время + относительная часть (например 30 сек)
+2. Абсолютная (сработать, например, 01.01.2016)
+
+Приложение должно иметь протокол:  
+1. для приема заявок. Входные параметры:  
+  * ID задачи (varchar)
+  * ID процесса (integer)
+  * тип(статика/динамика)
+  * время(integer) 
+2. для удаления событий. Входные параметры:
+  * ID задачи (varchar)
+  * ID процесса (integer)
+
+При приеме нового события с одним и тем же (ID задачи, ID процесса) прошлый нужно перезатирать.  
+При удалении события вызываться при срабатывании time оно уже не должно.  
+
+Общение с основным приложением будет на уровне очереди(rabbitMQ),  
+при срабатывании события необходимо бросить в очередь rabbitMQ событие  
+(в спецификации очереди есть параметр reply-to, который укажет в какую очередь отправить ответ),  
+куда включить ID задачи и ID процесса (для примера {call_timer, ProcID, TaskID}).  
+
+Для экономии памяти необходима гибридная схема:  
+храним N задач по процессу, остальное в базе.  
+Когда очередь задач по процессу иссякла, идем в базу и набираем еще порцию данных.  
+
+Для уменьшения запросов в БД необходимо агрегировать запросы в базу  
+(чтобы не случилось так, что 1000 обработчиков захотели получить данные в единицу времени).  
+
+Приложение должно с легкостью управляться с нагрузкой -  
+20тысяч приемов новых заявок и 20 тысяч удалений в секунду одновременно.  
+Время срабатывания события критично до секунды.  
+
+Выполнять задание в репозитории типа github. Использовать тесты.  
+
+
+Задание можно полностью не сделать. Важен подход и оформление кода.  
+