Как я могу обработать загрузку файлов в микросервисной среде?

Я пытаюсь принять решение о том, как, когда и где обрабатывать загруженные файлы от пользователей. Мы находимся в среде MicroService (PHP + Linux) для новой системы, которая будет развернута в ближайшие месяцы. Одним из ключевых компонентов являются входящие файлы.

В настоящее время, как я вижу, есть 3 варианта (возможно, больше, о которых я еще не знаю). Они заключаются в следующем:

(1)

[CLIENT:file] ->
[GATEWAY API
FILE STORAGE HANDLER ->
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}`

В этом сценарии API-интерфейс шлюза предназначен для прямой связи со службой хранилища (S3, GCS), установки имени файла, проверки и т. Д. Когда подтверждение хранилища получено, оно затем передает это имя и другие данные другим MicroServices по мере необходимости. , Я считаю, что это в целом полезно, так как файл обрабатывается, как только он получен, и может потерпеть неудачу, не оказывая влияния на дальнейшие действия. Это, однако, добавляет сложности шлюзу и потенциально может быстро замедлить работу в часы пиковой нагрузки.

(2)

[CLIENT:file] ->
[GATEWAY API
[a: MICROSERVICE-Files]
[b: MICROSERVICE-News]
[c: MICROSERVICE-Authors]
[d: MICROSERVICE-Logger]
] -> {response}

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

(3)

[CLIENT:file] ->
[FILE API] -> {response} ->
[CLIENT] ->
[GATEWAY API
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}

В этом случае Клиент отвечает за отправку файлов в отдельный сервис и использование ответа для отправки в API шлюза. С точки зрения ресурсов это берет на себя огромную нагрузку на API шлюза и позволяет ему иметь дело только с данными, а не с файлами. Основным недостатком этого является то, что клиент может отправлять ошибочную или вредоносную информацию в API шлюза и потребует дополнительной проверки, чтобы убедиться, что файл действителен и существует. Это также создает потенциальные проблемы соответствия в будущем между службами и клиентами.

Я могу пропустить другие варианты и хотел бы знать, если есть. У кого-нибудь есть опыт с этим, и как вы решили или подошли к обработке файлов в архитектуре MicroService?

3

Решение

[CLIENT:file] ->
[FILE API]
-> {response}
->
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {publish}

Вы можете пропустить API-интерфейс Gateway в этом примере.

Ваш File api проверяет загрузку файла и содержание данных. После успешного завершения вы отправляете клиенту ответ, что загрузка прошла успешно.

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

Если ваш клиент зависит от обработки данных, у вас есть 2 шага. Первый шаг — это ответ о загрузке файла, который сообщает, что файл был успешно загружен и проверен.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector