架构-初识BFF

引言

在最近的一次公司技术分享会上,我们深入探讨了公司的项目架构。核心议题是BFF架构,这是一种在微服务架构之上增加的额外层级。此外,我们还讨论了DDD(领域驱动设计)理念,它在订单、用户等业务中台中扮演着关键角色。

这是我对架构领域的初步探索,虽然理解尚浅,但我还是尝试着将所学内容进行了整理。

BFF

定义

BFF,即Backend For Frontend,是一种专为前端服务的后端架构。它位于客户端和服务端之间,充当中间件的角色,我更愿意将其视作前端与后端之间的桥梁。

应用动机

BFF是近年来新兴的一种开发模式,也可以看作是一种适配系统。它的出现是为了解决微服务架构下前端和后端接口调用混乱的问题。

在微服务大行其道的今天,大型系统被划分为数十个服务模块,如商品、门店、运费、红包、订单、优惠券、CMS、用户、搜索、推荐、广告等,而前端则包括小程序、APP、网页等多种形式。这种架构带来了诸多挑战:

  • 前端挑战:前端开发需要与多个系统对接,以确认接口信息,不同数据来源需要访问不同的系统,导致开发和调试效率极低。
  • 后端挑战:后端同样需要包装数据以供前端使用,重心转向如何为前端提供数据,需要根据不同版本、客户端、用户、定位等特征进行判断,导致大量时间浪费在展示层,而非业务逻辑处理。各后端系统各自为战,接口规则不一,历史版本问题难以统一,导致系统间严重耦合。
  • 变更困难:产品需求更新时,小改动可能需要在多个系统间协调,大部分系统都需要重新上线。

下图展示了未使用BFF架构时,前后端沟通的复杂性。
bff1

BFF的网关角色

针对上述问题,我们引入了中间层BFF,它统一调用所有下游后端接口,这些接口只需提供RPC接口供网关使用。BFF网关提供Web接口供前端调用,并根据前端需求组装数据。

因此,BFF的核心角色是:“统一下游接口,服务前端”。

只有深刻理解服务的本质,才能构建有效的BFF网关系统。其他系统或许可以推诿责任,但BFF网关不行。它的使命是连接前后端,处理所有不合理、不合适、繁琐的逻辑。后端只需专注于业务逻辑,前端专注于展示,其他任务都可交给BFF网关。
bff2

BFF网关的特性

作为特殊的网关,BFF具有以下特点:

复杂性

BFF网关主要服务于前端,前端不关心版本、客户端、定位、用户身份等细节,只接收渲染数据。这些逻辑都需要集成到BFF网关中,以版本、客户端、定位、用户等特征为基础,其中版本分支最为复杂,可能需要兼容数十个版本类型,同时还要满足不同客户端的展示要求和用户特征,因此BFF网关中必然包含大量判断分支,根据上百种情况组合生成唯一的数据结构。

数据管理

BFF不需要数据库,这一点将在下文解释。因此,许多数据需要以静态变量的形式存储在代码中,或使用配置中心动态配置,如图片地址、颜色值、模块固定文本、处理标识等。这些琐碎的数据都存储在BFF网关中进行维护。如果放在前端,修改时必须发版,周期过长;而放在后端,则会分散数据,无法集中管理。

逻辑处理

如前所述,BFF网关作为下游接口的聚合器,每次流程需要调用数十个后端接口,再根据版本、端、用户进行逻辑处理。历史逻辑与新需求交织在一起,实现新功能的同时要不断考虑历史逻辑,导致大量分支判断,最终形成复杂的逻辑结构,或使用策略模式进行优化,但无论如何包装,都无法掩盖其复杂性。

性能考量

BFF网关的耗时主要分为两部分:

  • 内部处理耗时
  • 下游RPC接口耗时

作为与前端直接交互的接口,BFF的耗时直接影响用户体验。因此,

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4382.html

(0)
LomuLomu
上一篇 2024 年 12 月 26 日 上午12:48
下一篇 2024 年 12 月 26 日

相关推荐

  • Apollo功能及原理详解

    前言 在我们公司,配置中心采用的是携程开源的Apollo。由于我之前只接触过Nacos,因此决定记录下我的学习过程。 Apollo工作原理 模块介绍 以下是Apollo的架构概览,我们将从底层向上逐层解析: ConfigDB:负责存储配置数据。 Config Service:提供配置读取和推送服务,服务于Apollo客户端,支持多实例,需要在Eureka中注…

    2024 年 12 月 24 日
    55800
  • Java刷题训练第一期

    个人主页:手握风云 专栏:Java刷题训练营 1. 字符转ASCII码 问题描述:BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。 输入描述:一行,一个字符。 输出描述:一行,输出输入字符对应的ASCII码。 算法分析:在Java当中,没有针对字符的输入…

    2025 年 1 月 11 日
    32000
  • 多租户解析与Demo

    在做Saas应用时,多租户解析往往是很重要的组成部分,也是用户访问网站最先处理的逻辑。 文前介绍: 多租户的数据库实现方式主要有三种: 单一数据库实现,每条数据标识租户Id进行识别数据属于哪个租户 一租户一个数据库,能够做到完全的数据隔离 混合模式,部分数据在一张表上,主要是一些基础数据;其他业务数据分库存储。 无论是哪种方式都要知道租户是谁才能查询数据库。…

    2025 年 1 月 6 日
    39000
  • 新版 Cursor 把其他 AI 编程工具按在地上摩擦了!

    大家好,我是汤师爷~ AI编程助手Cursor背后的Anysphere公司刚刚完成了1亿美元的B轮融资,估值直接飙升至26亿美元。 四个月前,这家公司刚拿下6000万美元,估值还只有4亿美元。如今,增长6.5倍,这速度,简直让人怀疑开挂了。 Anysphere不仅融资拿到手软,收入增长更是逆天。 公司从4月的年收入400万美元,短短六个月后,10月的月收入竟…

    2025 年 1 月 15 日
    56900
  • WxPython跨平台开发框架之模块字段权限的管理

    在我的很多Winform开发项目中,统一采用了权限管理模块来进行各种权限的控制,包括常规的功能权限(工具栏、按钮、菜单权限),另外还可以进行字段级别的字段权限控制,字段权限是我们在一些对权限要求比较严格的系统里面涉及到的,可以对部分用户隐藏一些敏感的信息,或者禁止不够权限的用户编辑它。本篇随笔介绍基于这一理念,实现在WxPython跨平台开发框架中的模块字段…

    2025 年 1 月 6 日
    46400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信