Ищете архитектуру для загрузки больших файлов - PullRequest
0 голосов
/ 14 мая 2019

Я хочу разработать систему для загрузки очень больших файлов (из REST / потоковых событий / FTP и т. Д.) С сайтов с большими исходными кодами (базы данных Whois, Shodan, Censys и т. Д. - размер файла составляет около 1-3 ТБ, разделенный на 1 ГБ ~ файл с каждогоисточник).

Система должна выполнить:

  1. Загрузить файл из источника (из REST api / ftp и т. д.)
  2. Преобразовать в формат CSV

  3. Манипулирование данными (т.е. преобразование формата времени в мой формат времени)

  4. Разделение и сжатие большого файла CSV в наименьшие файлы CSV вZip (т.е. 10 МБ для каждого).

Я думаю о том, чтобы разработать концепцию Micro-услуг и использовать RabbitMQ.

Первый сервис Micro просто загрузитьфайл и запись сообщения в RabbitMQ с указанием местоположения файла.

Второе преобразование файла в CSV и запись сообщения в RabbitMQ с новым файлом.

Третье управление данными (преобразование столбцов и т. д.)) и напишите сообщение с новым CSV-файлом.

Четвертый сплит и почтовый индекс.

Я просто хочу знать, есть ли другой дизайн для разработки этой системы, Может быть, я должен выбрать другой дизайн?

Я хотел бы услышатьлюбые предложения.

Спасибо!

1 Ответ

2 голосов
/ 16 июня 2019

Я бы рекомендовал использовать Cadence Workflow для вашего случая использования. Да, вы можете построить свой процесс с помощью RabbitMQ, но в итоге вы реализуете множество функций, которые Cadence предоставляет из коробки.

Cadence предлагает множество других преимуществ по сравнению с использованием очередей для обработки задач.

  • Построен экспоненциальный повтор с неограниченным интервалом истечения
  • Обработка ошибок. Например, он позволяет выполнить задачу, которая уведомляет другую службу, если оба обновления не могут быть выполнены в течение заданного интервала.
  • Поддержка длительных задач
  • Сердцебиение на контрольную точку прогресса длительных задач.
  • Возможность реализации сложных задачных зависимостей. Например, реализовать цепочку вызовов или логику компенсации в случае неисправимых сбоев ( SAGA )
  • Обеспечивает полную видимость текущего состояния обновления. Например, при использовании очередей все, что вы знаете, если в очереди есть несколько сообщений, и вам нужна дополнительная БД для отслеживания общего прогресса. С Cadence каждое событие записывается.
  • Возможность отмены обновления в полете.
  • Распределенная поддержка CRON

См. презентацию , которая охватывает модель программирования Cadence.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...