Знакомый дизайн архитектуры BFF

Spring Boot

BFF — это аббревиатура слова (Backends For Frontends), которое в основном используется для фонового применения внешнего интерфейса для решения проблемы сопряжения бизнеса терминала с множественным доступом.

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

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

эволюция

В традиционных приложениях мы обычно предоставляем только интерфейс для одного типа терминала.

Одноконформенные базовые услуги

Интерфейс, предоставляемый в традиционной прикладной программе, зависит от бизнеса.Если этот тип интерфейса является независимым, а затем предоставляется другим системам для повторного использования, это проблематично.高耦合Это было решено.

Многотерминальные прямые звонки на основные услуги

Если наш интерфейс также предоставляетсяweb,移动端использовать,移动端Он используется только для сбора данных и отображения данных, иwebВ большинстве сценариев конечные точки используются для управления данными, поскольку службы разных конечных точек отличаются, и степень повторного использования интерфейса каждой конечной точки не будет слишком высокой.

Несколько терминалов совместно используют один BFF

Для сценариев, в которых несколько терминалов совместно используют сервисные интерфейсы, мы будем использовать базовый数据服务иBFFПроведенныйотдельный,数据服务только данные增删改查, не требует слишком большого объема обработки деловых суждений, вся обработка деловых суждений передаетсяBFFПодойди к контролю, некоторые столкнулись业务逻辑异常такжеBFFПосле форматирования он отображается на конечной точке доступа.

Есть также определенные проблемы с этим методом проектирования, хотя基础服务иBFFБыли изолированы, нам нужно толькоBFFОбработка бизнес-оценки выполняется на уровне, но несколько терминалов совместно используют одинBFF, что также приводит к коду编写复杂度增高,代码可阅读性降低,多端业务耦合.

Каждый конец обеспечивает BFF

Если мы обеспечим каждую конечную точкуBFF, для каждой конечной точкиBFFОбрабатывать собственную бизнес-логику, когда нужны данные, из基础服务Данные собираются в интерфейсе, а затем собираются перед возвратом из интерфейса.Данные используются для создания экземпляра возвращаемого объекта.

Таким образом, если к базовым услугам добавляются новые функции,BFFВряд ли это повлияет, и если мы положимAppКонечные точки делятся наAndroid,IOSкогда нам нужно толькоapp-bffразделить наandroid-bff,ios-bff, основные услуги также не будут затронуты

Таким образом, всякий раз, когда добавляется конечная точка доступа, нам нужно только изменить место网关的转发а также添加一个BFFВот и все,基础服务Мы можем полностью повторно использовать сервисный интерфейс, предоставленный в基础服务Предоставленные интерфейсы не являются бизнес-специфичными! ! !

Суммировать

В дизайне микросервисной архитектуры,BFFСыграли ключевую роль в агрегации бизнеса, чего можно достичь за счетopenfeign,restTemplateперечислить基础服务Получение данных, полученные данные возвращают результаты сборки объектов,BFFРешена проблема бизнес-сценария, но также возникли некоторые проблемы, как показано ниже:

  • Задержка времени отклика (если доступ к услуге осуществляется между интрасетями, время задержки меньше)
  • Это пустая трата времени на написание (потому что к базовому сервису добавляется уровень переадресации, поэтому будет написано больше кода)
  • Обработка бизнес-исключений (единообразное форматирование возвращаемого содержимого бизнес-исключений)
  • Распределенные транзакции (распространенная проблема с микросервисами)