Прочитав вопрос несколько раз, я пришел к выводу, что либо через прямые вызовы между сервисами, либо через обмен сообщениями, оба решения вызывают одни и те же проблемы. Я говорю о проблемах, связанных с распределенными вычислениями.
Если один сервис в этой цепочке выходит из строя, импорт прерывается и не может быть продолжен без ручного вмешательства.
Если очередь не работает, то происходит то же самое.
Обмен сообщениями также создает различные проблемы, например, условия гонки . Но это не единственное: политика доставки сообщений, безопасность, фильтрация, маршрутизация или подтверждение получения - вот лишь некоторые из них.
В общем, даже если бы вы успешно справились со всеми этими вещами, я бы все равно задал один и тот же вопрос. Почему все так сложно? Почему загрузка, расшифровка и обработка файла происходят в разное время? Разве это не одна из самых распространенных ETL?
Поэтому мой ответ - это вопрос. Не проще ли сделать рабочий процесс на основе папок, в которых сервисы периодически ищут файлы?
Идея проста:
/downloads/encrypted
./downloads/encrypted
/downloads/decrypted
/downloads/decrypted
Служба A обладает высокой масштабируемостью. Мы можем иметь много потоков или реплик, загружающих файлы, сколько нам нужно. Службы B и C тоже могут быть масштабируемыми, но нам нужно блокировать файлы, чтобы избежать расшифровки и обработки одного и того же файла дважды или более.
Повторное выполнение любого из заданий требует перебрасывания файлов в ту или иную папку. Проверить состояние ожидающих заданий можно так же просто, как заглянуть в папки.
Файловая система обладает свойствами, которыми мы пользуемся. Например, безопасность, метаданные и постоянство.
Файловая система также не обязательно должна быть общей. Службы запрашивают у других служб новые файлы. Например, C запрашивает у B новые файлы, то же самое делает B по отношению к A. Они загружают файлы в свои соответствующие файловые системы и выполняют одну и ту же работу.
Обратите внимание, что решение основано уже не на выталкивании, а на вытягивании задания.
Прикрепляю к посту несколько видео по теме: