Является ли это хорошим использованием событий?

Является ли это хорошим использованием событий?
Является ли это хорошим использованием событий?

Прочитав вопрос несколько раз, я пришел к выводу, что либо через прямые вызовы между сервисами, либо через обмен сообщениями, оба решения вызывают одни и те же проблемы. Я говорю о проблемах, связанных с распределенными вычислениями.

Если один сервис в этой цепочке выходит из строя, импорт прерывается и не может быть продолжен без ручного вмешательства.

Если очередь не работает, то происходит то же самое.

Обмен сообщениями также создает различные проблемы, например, условия гонки . Но это не единственное: политика доставки сообщений, безопасность, фильтрация, маршрутизация или подтверждение получения - вот лишь некоторые из них.

В общем, даже если бы вы успешно справились со всеми этими вещами, я бы все равно задал один и тот же вопрос. Почему все так сложно? Почему загрузка, расшифровка и обработка файла происходят в разное время? Разве это не одна из самых распространенных ETL?

Поэтому мой ответ - это вопрос. Не проще ли сделать рабочий процесс на основе папок, в которых сервисы периодически ищут файлы?

Идея проста:

  • Служба A загружает файл в /downloads/encrypted.
  • Служба B ищет зашифрованные файлы в /downloads/encrypted
    • Для каждого файла делает расшифрованную копию в /downloads/decrypted
    • Перемещает зашифрованные файлы, расшифрованные успешно, в другую папку
    • Перемещает зашифрованные файлы, не расшифрованные успешно, в другую папку
  • Служба C ищет расшифрованные файлы в /downloads/decrypted
    • обрабатывает файлы
    • Перемещение успешно обработанных файлов в другую папку
    • Перемещает файлы, не прошедшие успешную обработку, в другую папку
  • Служба D ищет поврежденные файлы, чтобы что-то с ними сделать.

Служба A обладает высокой масштабируемостью. Мы можем иметь много потоков или реплик, загружающих файлы, сколько нам нужно. Службы B и C тоже могут быть масштабируемыми, но нам нужно блокировать файлы, чтобы избежать расшифровки и обработки одного и того же файла дважды или более.

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

Файловая система обладает свойствами, которыми мы пользуемся. Например, безопасность, метаданные и постоянство.

Файловая система также не обязательно должна быть общей. Службы запрашивают у других служб новые файлы. Например, C запрашивает у B новые файлы, то же самое делает B по отношению к A. Они загружают файлы в свои соответствующие файловые системы и выполняют одну и ту же работу.

Обратите внимание, что решение основано уже не на выталкивании, а на вытягивании задания.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - 14 января для Украины — это то же, что 11 сентября для США, № 403- Юрий Швец

Прикрепленное видео 2 - ЭТОТ ФИЛЬМ НА РЕАЛЬНЫХ СОБЫТИЯХ! ИСТОРИЯ ИЗ ЖИЗНИ! "Жизнь Под Чужим Солнцем" СЕРИАЛЫ 2021, МЕЛОДРАМЫ

Прикрепленное видео 3 - РЕАЛЬНАЯ ИСТОРИЯ ПРО ПОГРАНИЧНИКОВ! БОЙ В ПАНКИССКОМ УЩЕЛЬЕ! Стреляющие горы. Лучшие Сериалы


LetsCodeIt, 18 января 2023 г., 16:41