RabbitMQ: Помощь с архитектурой

 
 
 
Сообщения:14
Добрый день.
У меня возникла необходимость парсить различные ресурсы и сохранять результаты в базе данных.

Задача:
- Есть различное количество источников контента (сайтов), которые необходимо парсить.
- Есть проекты, по сути тут составной ключ User + Project
- Есть юзеры, которые хотят парсить источники, у одного юзера в одном проекте может быть несколько источников
- Парсинг источника занимает длительное время (минуты) и состоит из различных подзадач (скачать видео, перекодировать, сжать, залить на FTP и тп). Набор задач может отличаться для каждого проекта (Где-то льем на FTP, где-то на S3, где-то нужно перекодировать видео)

Этот проект развивается эволюционным путем, по-этому на данный момент это реализовано для одного юзера (нет деления на проекты и юзеров, монолит), но сейчас возникла необходимость коллаборации

Важное замечание: я не являюсь профессиональным backend девелопером и знаком c Java относительно поверхностно, что-то слышал о RabbitMQ. Моя специализация - Front-end

Для реализации этой задачи я придумал следующую архитектуру.



Как это должно работать?

0. Юзер скачивает и устанавливает в хроме мое расширение
1. Юзер вводит свое имя / (возможно потом и пароль), выбирает активный проект [Проверяю его наличие в базе]
2. Step 1: на основании метаданных в базе для юзера мониторю ресурсы (по факту подсвечиваю в DOM какой контент уже использован, а какой еще доступен). Когда юзер нажимает "кнопку скачать" передаю URL в Chrome Extension
3. Step 2: Тут URL дополняется данными о текущем активном проекте, пользователе и тп, формируется API запрос и отправляется на сервер.
4. Step 3: Сервер отправляет сообщение на обработку URL в очередь (RabbitMQ)
5. Step 4: В зависимости от проекта должны подключаться различные консьюмеры (процедуры обработки URL)
6. Step 5: Результаты сохраняются в базе

Чего хочется:
0. Не уйти в оверинжиниринг. Я пишу проект в одно лицо, хочу что бы просто и что бы легко поддерживать
1. легко добавлять новых юзеров + проекты
2. проверять что конкретный ресурс (URL) уже в очереди, для того что бы его подсветить как использованный на UI сайта-источника
3. иметь для каждого проекта свою очередь [?] (Это должно позволить легко писать консьюмеры специфичные под конктретный проект юзера)
4. иметь возможность конфигурировать консьюмеры (в идеале через yaml, JSON описывать микро задачи) [?]. Это планируется на более позднем этапе Динамически конфигурировать консьюмер. Мне рекомендовали смотреть в сторону Apache Camel

Вопросы:
1. Общее впечатление от архитектуры? Где усложнить / где упростить? В нужном ли направлении я рассуждал?
2. Как это дело все логировать? Естественно приоритет бесплатным инструментам, разработка ведется медленно и монетизация не планируется, не хочется копаться в файлах логов на сервере
3. Из-за отсутствия опыта с RabbitMQ (выбор ничем не аргументирован), хочу получить советы как лучше настроить эксченджеры под мою задачу. Стоит ли использовать виртуальные хосты и тп.
4. Возможно ли / корректно ли проверять что сообщение сейчас стоит в очереди и ждет свободного консьюмера? или же нужно вносить какие-то записи в БД. И как потом правильно обработать ошибку

Пока это все, возможно новые вопросы всплывут в ходе дискуссии
Спасибо ;)
Изменен:23 апр 2020 10:44
 
 
Сообщения:14
UP
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет