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