网易首页 > 网易号 > 正文 申请入驻

BFF模式:微服务前端数据加载的最佳实践?

0
分享至

作者|Viduni Wickramarachchi

译者|吴留坡

策划|田晓旭

设想一个场景,你需要使用微服务构建电子商务应用程序。你可以为客户、订单、产品、购物车等提供微服务,微服务暴露 API 给前端使用。

但是,微服务提供给前端的数据可能不会按照前端需要的方式进行编排或过滤。

这种情况下,前端需要一些逻辑来重新处理这些数据,同时在用户端使用这样的逻辑会占用更多的浏览器资源。

在这样的情况下,我们可以使用 BFF 将一些前端逻辑转移到中间层,中间层就是 BFF。当前端请求一些数据时,它将调用 BFF 中的 API。

BFF 将执行以下操作:

  • 调用相关的微服务 API 并获取所需数据

  • 根据前端展现来处理数据

  • 将格式化后的数据发送到前端

因此,前端将有更少的逻辑,BFF 有助于简化数据展示,并为前端提供一个目的明确的接口。

它如何适用于电子商务?

下图显示了每个微服务如何通过 BFF 与前端连接。

BFF 的角色

正如我们已经探讨过的,BFF 充当前端和微服务之间的简单接口。理想情况下,前端团队也将负责管理 BFF。

一个 BFF 只关注一个 UI,而且只关注那个 UI。因此,它将帮助我们保持前端的简单性,并通过后端输出的统一的数据格式。

这就引出了下一个问题。我们能为多个用户界面提供多个 BFF 吗?我们将在后面回答这个问题。

这会增加延迟吗?

现在我们知道 BFF 类似于客户端和其他外部 API、服务等之间的代理服务器。如果请求必须通过另一个组件,它肯定会增加延迟。但是,如果浏览器需要处理多个未针对前端优化的服务,那么与浏览器的高资源使用率相比,BFF 延迟可以忽略不计。

构建 BFF 允许你智能地对其他后端 / 微服务进行批处理调用,并一次返回所有数据,或者通过转换和格式化数据来返回更方便的展现形式。

这对于 2G 或 3G 网络上的移动客户端非常有用,因为在这些网络上建立连接可能需要几秒钟(或更长时间)。

应用程序何时使用 BFF

与许多其他模式一样,在应用程序中使用 BFF 取决于你计划遵循的上下文和体系结构。如果你的应用程序是一个简单的单片应用程序(译者注:monolithic app,单片软件指非模块化的软件,也是一种设计思想。它将 UI、数据、逻辑等全部做成一整块,以一个完全整体的方式实现,通常会直接从开始到结束完成一个复杂任务的每一小步,同时由自己独立对所有的数据进行管理,更多可见 https://www.zhihu.com/question/37905345/answer/75170829),那么 BFF 是不必要的,它几乎毫无价值。

但是,如果你的应用程序依赖于微服务,并且使用许多外部 API 和其他服务,那么最好使用 BFF 来简化数据流,并为你的应用程序带来更高的效率。

此外,如果你的应用程序需要为特定的前端接口开发优化的后端,或者你的客户端需要使用在后端进行大量聚合的数据,那么 BFF 是一个合适的选项。

提示:分布式设计需要不同种类的代码协作工具。使用 Bit(Github)在单个组件上进行协作,这些组件可以跨代码仓库共享并独立开发。

保持你的代码仓库可扩展性、可维护性和始终同步。

了解更多信息:

  • 如何构建微前端:

    • https://blog.bitsrc.io/how-we-build-micro-front-ends-d3eeeac0acfc?fileGuid=S9EhcQ4jbascxSJk

  • 如何利用 Bit 在微服务间共享和重用代码:

    • https://blog.bitsrc.io/how-we-successfully-share-and-reuse-code-between-microservices-at-scale-20fcfaebc6d0?fileGuid=S9EhcQ4jbascxSJk

我们能有多个 BFF 吗?

当然可以!这就是 BFF 的意义所在。

没有 BFF 的传统应用程序对于各种客户端只有一个 API 网关,如下所示,

然而,拥有 BFF 的目的是为客户端提供一个可连接的集中接口。例如,移动 UI 的数据消耗可能不同于浏览器的数据消耗。在这种情况下,为了更好地展示数据,可以使用两个 BFF。多个 BFF 的应用程序如下图所示,

如你所见,每种客户端都有一个 BFF,它将有助于优化服务(Sa、Sb…Sn)的响应。

BFF 的优点

拥有 BFF 的几个优点,

  • 关注点分离——前端需求将与后端关注点分离,便于维护。

  • 更容易维护和修改 API——客户端应用程序对 API 结构了解较少,这将使其对 API 中的更改更有弹性。

  • 更好的前端错误处理——大部分时间,服务器错误对前端用户是没有意义的。BFF 可以映射出需要显示给用户的错误,而不是直接返回服务器错误,这将改善用户体验。

  • 多种设备类型可以并行调用后端——当浏览器向 BFF 发出请求时,移动设备也可以这样做。这将有助于更快地获得相应服务的响应。

  • 更好的安全性——某些敏感信息可以被隐藏,并且在向前端返回响应时可以忽略不必要的数据。这种抽象将使攻击者更难以应用程序为目标。

  • 共享组件的团队所有权——应用程序的不同部分可以由不同的团队轻松处理。前端团队可以共享客户端应用程序及其底层资源消耗层的所有权,从而提高开发速度。下图显示了团队划分 BFF 的例子。

在实践中遵循的最佳实践

到目前为止,我们所看到的一切都是惊人的!但是,BFF 是否可以防故障?

答案是否定的!和其他技术或模式一样,即使是 BFF 也有陷阱。为了避免这些,我们必须遵循一些最佳实践。下面列出了一些要遵循的最佳做法。

  • 避免使用自包含的大而全的 API 实现 BFF——你的自包含 API 应该位于微服务层。大多数开发人员忘记了这一点,也开始在 BFF 中实现服务级别 API。你应该记住,BFF 是客户端和服务之间的转换层。当数据从服务端 API 返回时,其目的是将其转换为客户端应用程序指定的数据类型。

  • 避免 BFF 逻辑重复——需要注意的一个关键点是,单个 BFF 应该满足特定的用户体验,而不是设备类型。例如,大多数时候,所有移动设备(iOS、Android 等)共享相同的用户体验。在这种情况下,所有这些操作系统的一个 BFF 就足够了。iOS 不需要单独的 BFF,Android 也不需要单独的 BFF。

  • 避免过度依赖 BFF——BFF 只是一个转换层。是的,它也为应用程序提供了一定程度的安全性。但是,你不应该过分依赖它。你的 API 层和前端层应该负责所有的功能和安全方面,而不管是否存在 BFF。因为 BFF 只是填补一个空白,而不是向应用程序添加任何功能或服务。

总 结

BFF 模式不仅有助于开发,而且有助于极大地改善用户体验。因此,在保持 BFF 专注于其前端的同时,考虑数据优化和聚合是非常重要的。

此外,如果你以前没有使用过 BFF 模式,现在是时候开始了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
拾荒老人捡到一独臂女孩,孩子考上博士后,对奶奶说了这样一句话

拾荒老人捡到一独臂女孩,孩子考上博士后,对奶奶说了这样一句话

何为惠
2024-10-05 06:54:29
埃及:一亿人挤在五万平方公里的尼罗河沿岸,为何不去改造沙漠?

埃及:一亿人挤在五万平方公里的尼罗河沿岸,为何不去改造沙漠?

无根树花正孤
2024-08-18 20:49:31
中小学生又笑了,“休息令”计划10月中旬施行,家长意见强烈

中小学生又笑了,“休息令”计划10月中旬施行,家长意见强烈

亿通电子游戏
2024-10-05 14:35:32
专家:伊朗“升级版”导弹令美以更难防御

专家:伊朗“升级版”导弹令美以更难防御

参考消息
2024-10-04 13:22:44
03年女警花枪杀丈夫,丈夫临死前跪地求饶,直呼不想女儿失去父亲

03年女警花枪杀丈夫,丈夫临死前跪地求饶,直呼不想女儿失去父亲

春江历史
2024-09-18 11:48:24
晚18点,北京大满贯林诗栋VS向鹏,小石头收两好一坏消息

晚18点,北京大满贯林诗栋VS向鹏,小石头收两好一坏消息

室内设计师阿喇
2024-10-05 14:49:26
国庆节女儿连请我三天又给3000块,儿媳冷笑提醒:妈,您吃大亏了

国庆节女儿连请我三天又给3000块,儿媳冷笑提醒:妈,您吃大亏了

卉妈妈故事坊
2024-10-05 13:45:37
印度首富没分寸,把手放在小儿媳肚子上,300斤胖儿子眼睁睁看着

印度首富没分寸,把手放在小儿媳肚子上,300斤胖儿子眼睁睁看着

毒舌小红帽
2024-10-05 15:03:05
哈梅内伊发声

哈梅内伊发声

新京报
2024-10-03 13:43:51
3年1.6亿美元,全联盟要不起!NBA真正的混子球星,三巨头该解散

3年1.6亿美元,全联盟要不起!NBA真正的混子球星,三巨头该解散

老梁体育漫谈
2024-10-05 00:10:18
56岁梁荣忠近照曝光,身形发福老态尽显,网友直呼不敢认

56岁梁荣忠近照曝光,身形发福老态尽显,网友直呼不敢认

电影侦探社
2024-10-04 21:59:54
笑死!温碧霞P图只顾自己不管老公,她美若仙女,老公像搬砖的

笑死!温碧霞P图只顾自己不管老公,她美若仙女,老公像搬砖的

八星人
2024-10-04 21:52:53
法布雷加斯:请把洛博特卡给我吧,他是一名令人惊叹的球员!

法布雷加斯:请把洛博特卡给我吧,他是一名令人惊叹的球员!

直播吧
2024-10-05 14:35:44
《志愿军:存亡之战》拙劣模仿,肆无忌惮瞎编,不是歌颂而是亵渎

《志愿军:存亡之战》拙劣模仿,肆无忌惮瞎编,不是歌颂而是亵渎

知兵堂军事
2024-10-03 12:29:15
外交部副部长华春莹国庆节发了十八张对比图,每一个都让人震撼

外交部副部长华春莹国庆节发了十八张对比图,每一个都让人震撼

低调看天下
2024-10-04 08:25:22
076型最新进展:双舰岛已安装完毕,全球唯一装备弹射器的攻击舰

076型最新进展:双舰岛已安装完毕,全球唯一装备弹射器的攻击舰

国平视野
2024-10-05 12:07:58
中国女单4强夺冠赔率:郑钦文第四,穆霍娃居首

中国女单4强夺冠赔率:郑钦文第四,穆霍娃居首

室内设计师阿喇
2024-10-05 11:39:33
我是局长的司机,睡了局长睡过的床,爱了局长的女人,生活开了挂

我是局长的司机,睡了局长睡过的床,爱了局长的女人,生活开了挂

爱心宝贝
2023-09-24 22:36:27
中国游客国庆节入境日本被疯狂开箱!有人现场开吃,有人扔下东西就想走…

中国游客国庆节入境日本被疯狂开箱!有人现场开吃,有人扔下东西就想走…

东京新青年
2024-10-04 18:08:50
公司空降总经理,身为销冠的我被开离职,三个月后总经理慌了神

公司空降总经理,身为销冠的我被开离职,三个月后总经理慌了神

二十一号故事铺
2024-09-19 18:30:10
2024-10-05 17:48:49
InfoQ
InfoQ
有内容的技术社区媒体
10225文章数 50787关注度
往期回顾 全部

科技要闻

十一直击:鸿蒙智行、小米汽车人气高涨

头条要闻

毕云强被通报 任职国企被列入"老赖"名单

头条要闻

毕云强被通报 任职国企被列入"老赖"名单

体育要闻

张帅:每朵花都有自己的花期

娱乐要闻

肖战晒照庆33岁生日,阳光帅气有活力

财经要闻

“抢筹”中国资产!外资巨头发声!

汽车要闻

售17.78万元 蒙迪欧1.5T混动舒雅型上市

态度原创

数码
房产
本地
家居
军事航空

数码要闻

一文搞懂市售主流笔记本电脑CPU

房产要闻

国庆到啦!快来查收你的买楼大礼包

本地新闻

云游中国|还有谁不知道 荆门人有属于自己的仙本那

家居要闻

知境之间 简约现代休闲居所

军事要闻

特朗普:以色列应该打击伊朗核设施

无障碍浏览 进入关怀版