5 分钟搞懂 BFF

随着微服务架构越来越复杂,前端需要和越来越多的后端服务交互,为了解决前端的复杂性问题,提出了 BFF 架构。原文: What is a BFF? And how to build one?

现在谁还会构建单体服务?微服务才是正确的选择!但这不是一个容易的选择,会引入各种各样复杂性。比方说,假设后端有若干对前端隐藏的微服务,那对于 SPA 或移动应用来说会产生多少额外的开销?

通用 API 可能会要求使用者聚合、过滤各个端点的响应,以便为终端用户提供有用的内容。

如何维护由多个微前端连接的一系列微服务架构?微服务承诺让应用更加敏捷,可以随意创建新的微服务,并在需要时拆除旧的服务,但这将对前端产生什么样的影响?

因此,为了解决这些问题,现在出现了另一种模式: The Backend For Frontend。这一概念正如所期望的那样: 每个前端都有一个后端,充当前端应用程序(SPA/Mobile)和域服务之间的接口,是一个用于查询下游服务并将响应转换为专门针对特定前端的单一格式化响应的 API。从示意图上看,微服务环境中的 BFF 可能是这样的:

8bc9995f79df72ef0b3b64e951d598d1.png

BFF+微服务架构

BFF 的概念最早是由SoundCloud提出的。

BFF,身份验证,以及无 cookie 时代

你可能想知道这与本文有什么关系,在没有 cookie 的时代,BFF 模式比上图中显示的要复杂一些。

在许多情况下,下游服务通常需要基于(访问)令牌验证身份,BFF 需要在向下游转发的请求中包含这些令牌。

在 SPA 中存储 access_token 是一种常见的实践。令牌被包含在请求中,API 就能够知道是谁在执行请求。但是通常来说,这种方法会有一个问题。当令牌过期(通常是一小时),SPA 一般会静默刷新令牌。这种机制是基于第三方 cookie 的,而这些cookie很快就没法再用了。因此,2024 年以后就没法再用静默刷新。

考虑到这一点,BFF 无论如何都需要用户的 access_token,这使得对 SPA 进行身份验证成了一件怪事。对于 BFF, SPA 不应该直接与下游服务通信,然而因为需要身份验证,BFF 总是需要在下游请求中包含 access_token。因此,从这个角度来看,让最终用户只针对 BFF 进行身份验证更有意义。这消除了通过 SPA 更新令牌的需要(并且根本不需要在 SPA 中拥有令牌)。

下图展示了 BFF 和微服务的身份验证过程:

556b61d403ea0ba826c6c5f5df84a335.png

BFF 认证时序图

要使其工作,BFF 和 SPA 必须托管在相同的 URL 上,这样,当 SPA 向 BFF 发起 HTTP 请求时,HTTP 请求将包含 cookie,而 BFF 需要通过这些 cookie 来获取用户上下文(access_token)并将其转发到下游。

如何实现?

BFF 是前端的一部分,减少了对下游服务的 API 请求数量,并减少了前端到 BFF 之间传输的数据量。BFF 通过转换 API 请求并转发到一个或多个通用 API 来实现这一点,同时支持聚合响应并将其转换为仅包含前端所需内容的响应。

这仍然是一个相当宽泛的定义,应该如何实现呢?Cam Jackson 给出了一个更复杂的定义:

a2cadef443335c413bc9d4811a3cc034.png

图片来源: https://martinfowler.com/articles/micro-frontends.html

根据这一定义,有几种方法符合要求,分别支持带有专用存储的成熟 API 服务以及能够转发请求并在需要时转换响应的第三方实现。

选择 1: Duende

不必自己实现,有几个项目提供了免费的现成解决方案。例如,IdentityServer 的维护者提供名为 Duende 的解决方案:https://docs.duendesoftware.com/identityserver/v5/bff (实现示例如下:https://docs.duendesoftware.com/identityserver/v5/samples/bff)

通过将 Duende 纳入项目,可以作为一个很好的开始。它实现了身份验证机制,并且可以配置为将请求转发到下游 API。

选择 2: 自己实现

考虑到 BFF 的非泛型性质,自己构建是有意义的。你需要做以下事情:

  • 创建一个 API 项目。

  • 实现身份验证,使用 OpenId 连接授权代码流(基于 PKCE)并将访问令牌存储在安全 cookie 中。

  • 创建 API 端点并从 cookie 中获取令牌,用令牌调用要使用的服务的端点。

  • 必要时转换响应。

  • 创建 SPA 并将其托管在同一个站点/项目上。

  • 通过前面创建的 API 端点发布 SPI。

  • 就这些……

总结

微服务和微前端之间的通信可能并不高效,微服务可能提供了通用 API(如果有的话),所以前端可能需要调用多个微服务来完成工作,并从响应中过滤需要显示的信息。结果,前端变得很复杂。

此外,当服务变得更小时,就需要调用更多的服务来完成工作。多个前端都需要调用所有这些对象的方式可能并不可取,使得维护更加困难。

为了解决这些问题,SoundCloud 在架构中引入了一个额外的层,将 API 作为前端的一部分,充当前端和下游服务之间的接口,聚合响应或/和过滤有效响应。

这个概念就被称为 BFF(Backend For Frontend)。

- END -

往期回顾

◆5 分钟搞懂 Web3 架构

◆一支不足百人的团队创造了 ChatGPT :90 后挑大梁,应届生 11 人,华人抢眼

◆JVM碰到问题,这几个工具不能少

◆聊聊流程引擎的架构设计

◆存储拆分后,如何解决唯一主键问题?

◆微服务架构中多级缓存设计

◆5个开源且简单实用的Code Review工具

◆大厂怎么做Code Review?

366e0e0755bce16427a3b9049f1ec802.png

技术交流,请加微信: jiagou6688 ,备注:Java,拉你进架构群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67620.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿58同城地方门户本地生活小程序源码

仿58同城地方门户本地生活小程序源码 PHP仿58同城小程序 微信分类信息平台 地方门户本地生活 完整源码带后台,后台基于微擎(非Thinkphp)开发,不懂微擎的请不要下载,内涵详细安装教程文档 同城小程序微信扫码 模板消息如何设置&a…

最新开源家政预约服务小程序源码系统,完整前后端+搭建教程

全新好用的完全开源家政预约服务小程序源码系统,带完整前后端搭建教程,功能强大! 完全开源的家政上门预约服务小程序源码系统是一款专业家政门到门预约服务应用小程序,源码下载地址:春哥技术博客,完全开源可…

【2022-11-26】JS逆向之北京百姓网

提示:文章仅供参考,禁止用于非法途径! 文章目录 前言一、页面分析二、验证码识别三、验证码获取四、总结 前言 目标网站:https://beijing.baixing.com/zhengzu/?page40 一、页面分析 清除cookie,重新刷新网页&#…

好客php在线客服源码搭建教程可对接网页/小程序/微信公众号等

当你的网站做大以后肯定少不了会添加自己的联系方式,像很多大的网站其实在首页在线客服。今天这个源码可以满足你。 我在网上也找了很多,终于找到了源码,看到很多拿着别人的辛苦成果出来收费真够恶心的。 站点设置 首先下载源码解压到宝塔…

圈子论坛社区小程序,交友,博客,社交,陌生人社交,即时聊天 前后端开源PHP

圈子论坛社区系统,含完整的后台PHP系统。功能:小程序授权登陆,H5和APP,手机号登陆,发帖,建圈子、发活动。圈主可置顶推荐帖子,关注、粉丝、点赞等。可作为圈子贴吧、小红书等自媒体。 一款全开…

destoon7.0仿百姓网整站+带移动端

destoon7.0分类信息网站模板_仿百姓58行业网站源码 DT收录友好PC移动端利于SEO优化,测试完整无错,兼容主流浏览器。 模板不包括测试数据。页面简洁简单,容易管理,destoon7.0内核都可以使用! destoondt7分类信息模板&…

家政上门预约服务小程序源码+前端后端

简介: 家政上门预约服务小程序源码是一款专业家政门到门预约服务应用小程序,可以打造一个专属的品牌中心,不仅营造了一种沉浸式的客户体验,而且能够将专业的维修项目、维修人员进行「美图秀秀」式地呈现,服务信息一览…

同城上门家政保洁预约维修服务小程序保姆月嫂派单洗车预约系统小程序

同城家政V3是河北清兮网络科技有限公司开发的一款同城家政平台,主要包含上门做饭、上门按摩、家政保洁、家政维修、上门洗车、保姆月嫂、快递跑腿、开锁换锁等服务,可以解决本地生活类店铺实现互联网转化,实现更高效的工作效率。 主要功能介绍…

在百姓网的交流

结束了对 VeryCD 的参观,下午来到百姓网做交流。 百姓网的办公室位于上海交大园区内,安静而且便利。从一些办公室布置的一些细小之处能看出来这是个很注重细节的团队,另外,办公室的墙上贴着的大幅的网站核心代码,手写的…

大数据信息资料采集:58同城赶集百姓网分类网二手物品信息采集

大数据信息资料采集:58同城赶集百姓网分类网二手物品信息采集 数据采集满足多种业务场景:适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份职业。 舆情监控:全方位监测公开信息,抢先获取舆论趋势。 市场分析&…

微信社区小程序/h5/圈子论坛贴吧交友/博客/社交/陌生人社交/宠物/话题/私域/同城

小程序/app/H5多端圈子社区论坛系统,交友/博客/社交/陌生人社交,即时聊天,私域话题,社区论坛圈子,信息引流小程序源码,广场/微校园/微小区/微同城/ 圈子论坛社区系统,含完整的后台系统。thinkPHPuniapp 全开源 功能: 小程序授权登陆,H5和APP&…

百姓网上怎么引流?百姓网如何发帖引流?百姓网如何推广?

百姓网是成立比较久的网站了,属于国内领先的分类信息平台,相信很多人都有所耳闻。百姓网最大的特点就是摆脱了商家和顾客的交易模式,进行的是百姓与百姓之间自己的交易。主要是通过约定上门看货然后再决定要不要购买。与其卖家永无止境的砍价…

【高级版+陪诊端】thinkphp陪诊小程序陪诊师陪诊员系统陪诊跑腿小程序开发

从目前的市场反馈来看,当前陪诊的市场体量不大,是毋庸置疑的。但是在未来三五年内,陪诊行业必然会有一个比较大的前景。 相较于洗车业务,汽车保养、汽车美容、汽车维修、汽车保险等低频服务也不可小觑,整个汽车后的市…

低版本Mac OS安装合适xcode的方法

在虚拟机上安装完Mac OS10.14,在Apple Store上准备安装xcode时出现“xcode 不能安装在“Macintosh HD”上,因为需要 OS X V10.14.3 或更高版本”。导致无法安装Xcode 如图: 解决方法: 不在Apple Store上进行下载,可…

Mac 版 fbprophet 安装

每天一点点,记录工作中实操可行 Mac 版 fbprophet 安装 fbprophet 是facebook开源的时间序列预测包,因其优良的性能,得到大家的追捧,但安装过程实在太多坑 安装(本人mac) 终端敲入 conda install pyst…

Downie 4 for Mac直装版安装Mac视频下载软件(附安装包)

Downie 4 for Mac是一款用于Mac操作系统的视频下载软件,最好用的视频下载软件之一,它可以让我们轻松地从各种视频网站上下载视频,包括You、Vi、Face、Twi等等。该软件具有简单易用的界面,支持多种下载方式,包括复制粘贴…

保姆级教程:最强悍Stata17.0-MP 64核心顶配版!WinMac两种版本!附安装教程以及安装包!

此次小皮为大家分享最快的 Stata17-MP版本(适用于四核、双核和多核/多处理器计算机),可以分析最大的数据集: Stata17.0-MP-2025.01.01到期(WinMac) Stata17.0-MP-永久有效(只有Win) Stata17.0-MP-64核心顶配版 Stata17新功能介…

Mac电脑系统管家CleanMyMac X4.13安装下载使用教程

当我们刚刚拿到那闪亮的新Mac时,是多么令人愉悦的一种感觉!随着时间的推移,你可能已经注意到它的速度减慢,磁盘空间逐渐减少。不用担心,CleanMyMac会为你的电脑带来焕然一新的体验。这篇文章将向你介绍CleanMyMac的奇妙…

黑苹果的初安装与升级 VMware12+mac os x 10.9+升级+VMware Tools安装

此文主要记录黑苹果的安装与升级虚拟机中mac 系统重要步骤。供自己回头查看。 二大步骤:①安装VMware12 ③安装VMware tools(黑苹果需要安装tools才能共享主机文件和设置网络等) ①安装VMware12 参考主要教程http://jingyan.baidu.com/…

Mac OS安装 apktool工具包

在之前,apktool工具包都是一个压缩包,下载后无需安装即可使用。下面我们看一下如何在Mac OS系统下如何安装 apktool工具包。 首先,需要下载下面几个软件或工具: Apktool:http://ibotpeaches.github.io/Apktool/instal…