Весь смысл паттерна BFF в первую очередь заключается в предоставлении специально созданного интерфейса для интерфейсов, и они могут свободно собирать данные из сервисов, которые их содержат. Я бы предложил:
- Если микросервис
Microservice
(на вашей диаграмме) каким-то образом манипулирует данными перед их возвратом, то манипулируйте ими по мере их записи (возможно, наблюдая какое-то событие во внешнем система, если вы можете) и сохранить обработанный результат (возможно, локальная копия). - Если вам не нужно манипулировать данными во время их отправки в BFF, то любая обработка, которую вы выполняете, может (теоретически) выполняться асинхронно, вне контекста запроса, и не в линии и имеют ненужный риск недоступности в случае сбоя (это называется временным соединением).
Если будет возможен один из двух вышеупомянутых случаев, и я очень настойчиво предлагаю вам избежать последовательного подключения синхронных веб-запросов, поскольку это значительно снижает доступность (если каждая служба 95% доступно, два вместе - 90%, а не 95%, и это быстро ухудшается). Задержка - это проблема (как справедливо упоминает @picolino), но, по моему опыту, она гораздо реже, чем проблема доступности. В любом случае, выравнивание стека вызовов значительно сократит время, необходимое для обработки запроса.
Оба вышеупомянутых варианта также хороши с точки зрения распределения обязанностей; одна служба будет владеть данными о клиентах, а другие данные не должны владеть проходом, BFF может уведомлять ее асинхронно о любых сквозных проблемах, в которых она нуждается.
Если и только если Ничто из вышеперечисленного не выполнимо, я бы посоветовал вам немного подумать о контракте на услугу, которую вы разрабатываете, и о данных, которые ему необходимы, прежде чем принимать решение. Передача полного набора данных вслепую может быть или не быть хорошей идеей, в зависимости от характера обязанностей службы Microservice
, которая у вас есть.