阅读 544

Node.js BFF 职责和场景分析

用 Node.js 做 BFF 是前端老铁们都知道的做法,但是BFF层到底能做哪些事?什么情况下才适合做BFF层建设呢?本文将回答这些问题。

Node.js自诞生以来,已经成为了前端工程师手中的利器,拓展了前端的边界。这么些年过去了,大家都在用Node.js做什么呢?头图是我总结的Node.js应用场景,深绿色的是Node.js的活跃版图。

Node.js三大应用场景,CLI / IDE、前端研发系统服务端、业务系统BFF层。

我们日常开发的系统主要有两种,一种是业务系统,另一种是研发系统。

前端研发系统,常见的有Serverless研发平台、低代码平台、小程序研发平台和传统的构建部署平台等。由于在前端同学的掌控范围内,稳定性等要求又没有那么严苛,自然就成了Node.js的主要用武之地。在这种系统中,Node.js会作为服务端语言使用,承担与传统Java服务端同样的职责。这类系统在端上还经常有CLI或者IDE的参与,这是Node.js的另一个主要场景,比如我们熟悉的UMI、小程序IDE和Serverless配套命令行工具等。

业务系统是公司发展的关键,在业务代码领域,Java是服务端的主力军,但也有部分中小型公司选择Node.js,比如我们熟悉的蚂蚁的语雀。面对这种企业级场景,国内Node.js生态有Egg.js,但是国外的Nest.js凭借着强大的功能和丰富的生态大有后来居上的趋势。

在业务代码领域,目前Node.js主要活跃在BFF层,阿里Node.js生态的代表Midway团队在D2大会上说看好Node.js在BFF领域的发展,言外之意应该是不看好Node.js在业务服务端的发展。

下面进入我们的正题,BFF。BFF 是 Backends For Frontends 的缩写,指的是介于前端应用和底层服务之间的一个层,面向前端提供服务。

在探讨BFF之前,我们先看一下另一个重要的概念——API网关(API gateway)。

同样位于前端应用和底层服务之间,API网关是服务端生态下的一个常见结构。

v2-c68701f2dcf83cbc980b4de14d4f679f_1440w.jpegAPI网关四大职能.jpeg流量网关与业务网关.jpeg

BFF与API网关的关系有多种形态,可以充当API网关,也可以位于API网关之前或者之后。位于API网关之后是比较常见的情况,如果替代API网关或者设置在API网关之前,BFF就需要具备一定的API网关的能力。另外,BFF与API网关的主要区别是,BFF比API网关要厚,代码层面上是可以被业务方掌握的。

接下来我们看看BFF层可以做哪些事情?

我把它总结为三个层面,页面服务、网关和聚合层。

  • 页面服务。自从前后端分离以来,前端的页面服务就由独立的服务来提供。BFF可以提供页面服务,在这个基础上还可以做SSR,大幅提升页面加载性能。此外,还可以将逻辑数据传递到基础页面上,为前端注入一些基础配置或者状态,在某些场景下是很有用的。

  • 网关。可以参考上文提到的网关的各项功能,在BFF层常见的比如配合SSO统一登陆服务识别并透传用户身份,还有流控、防攻击、操作日志、跨域接口转发等。

  • 聚合层。这部分是BFF的重点职责,主要是对服务端提供接口数据的聚合和加工,下文会重点介绍聚合层的适应场景。

  • 其他。除了以上三个主要场景,还有一些独立的轻量服务适合BFF来做,比如图片上传和WebSocket服务。

重点谈一下BFF层做聚合。BFF做聚合的目的是什么呢?

主要是为了提效,前后端接口对接一直是受到诟病的,在接口频繁变化的场景让前端团队做到全栈可以避免大量接口对接。此外,BFF架构做到了前端和后端的关注点分离,后端同学可以更专注于业务领域的模型构建,通过微服务提高人效;前端同学可以专注于用户体验,利用BFF进行业务频繁变更场景和新端开发。

什么情况下适合用BFF层做接口聚合?

  1. 后端有稳定的领域服务,需要聚合层。这在现在的微服务时代是很常见的。

  2. 需求变化频繁,接口经常需要变动。后端服务为多个前端项目服务,比如多个端,变动的话成本较高。BFF层针对单一的项目,在BFF层做数据的聚合、裁剪、适配可以实现最小成本的改动。

我理解这两个条件有其中一个,再加上团队有比较充足的人力就可以考虑用BFF做聚合了。但真正要做BFF,还有一个必备条件,那就是完善的Node.js服务基建,包括日志、链路跟踪、异常和性能监控等,以便保证服务的稳定和可排查。

BFF聚合层典型场景分析。

从业界的分享当中可以看到,阿里的高德和飞猪是BFF比较普及的业务,高德的典型场景有长途天气、沿途搜和导航Tips等,对天气、地理信息等内容在特定场景下进行聚合查询,符合上面提到的领域服务稳定和场景变化频繁的特点。飞猪主要提到了内容详情页对内容中心、评价系统和互动数据等数据源做聚合的场景。

高德BFF.png

飞猪详情页.png

在中后台领域,我们可以看到ICBU跨境供应链团队的BFF实践介绍,他们的一个特点是面向的用户端多,再加上稳定的后端微服务,使他们的BFF聚合层有很大的用武之地。

ICBU BFF.webp

BFF层应该怎样建设?

现在的趋势是用Serverless来做,主要是因为Serverless轻量、易扩展的特点非常适合BFF。参考附录"Serverless is your BFF"。

希望这篇关于 BFF 模式职责和场景的总结能对大家有帮助,欢迎交流探讨。


作者:山下
链接:https://juejin.cn/post/7054164786791055396


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐