Skip to content

Latest commit

 

History

History
26 lines (19 loc) · 3.25 KB

README.md

File metadata and controls

26 lines (19 loc) · 3.25 KB

appmetr

Задание:

Есть данные которые превышают объем оперативной памяти. Необходимо отсортировать.

На вход поступают пары (DateTime, Callable). Нужно реализовать систему, которая будет выполнять Callable для каждого пришедшего события в указанный DateTime, либо как можно скорее в случае если система перегружена и не успевает все выполнять (имеет беклог). Задачи должны выполняться в порядке согласно значению DateTime либо в порядке прихода события для равныхDateTime. События могут приходить в произвольном порядке и добавление новых пар (DateTime, Callable) может вызываться из разных потоков. Решения можно оформить в любом удобном виде: проект на гитхабе, архив с исходным кодом и т.п. Можно использовать любые встроенные средства Java7/Java8.

Комментарий.

Для реализации данной задачи больше подходит использование JMS (не входит в Java SE ), тем не мение упрощенная SE версия реализована (комментарий ниже). Сама очередь будет представлена как JMS очередь. JMS провайдер должен уметь сохранять сообщения и перепосылать их. JMS сообщение содержит два поля: DateTime времени желаемого выполнения и бинарный массив (byte[]) с сериализованным Callable Реализация требований:

  1. Обработка большого количества сообщений: Для хранения больших данных будет использовано хранилище JMS сообщений (персистентные сообщения).
  2. Выполнение в указанный DateTime или до до того: тут множество вариантов. Можно использовать приоритет сообщений, можно не забирать сообшения, по которым не настал срок выполнения (делается через XA)
  3. Если производительности одной машины не достаточно, то можно сделать кластерную очередь и распределить нагрузку на несколько машин.
  4. Задания, которые не удалось выполнить будут перенаправлены в DLQ для ручного разбора

В SE варианте реализован воркер, корорый берет задачи из очереди и выполняет их. не выполненые задания направляются в другую очередь.