写点什么

迪卡侬采用 BFF 模式以强化前端团队

  • 2024-04-10
    北京
  • 本文字数:1839 字

    阅读完需:约 6 分钟

迪卡侬采用 BFF 模式以强化前端团队

迪卡侬(Decathlon)在公司范围内推荐使用 BFF(Backend For Frontend)架构模式,并为工程团队提供了指导原则。由四篇文章组成的系列 介绍了该模式并讨论了其优点和潜在的问题。公司还分享了使用 BFF 模式的替代方案,并回顾了在架构方面的考量因素。


迪卡侬是一家全球性的零售公司,拥有一个巨大的技术平台,该平台将面向客户的电子商务平台与众多后台办公系统结合在了一起。公司拥有众多 web 和移动的前端应用程序,因此该平台需要在其基于微服务的后端架构之上支持提供不同的用户体验。


为了应对这些挑战,公司引入了 BFF(Backend For Frontend) 模式,即前端团队拥有并维护后端的中间件服务,处理编排和聚合以支持其特定的需求。这种新的抽象层可以更好地实现关注点分离,提高灵活性,减少系统组件之间的耦合。



Backend For Frontend 模式(图片来源:迪卡侬数字化博客)


BFF 层可以将很多因素纳入考虑范围,包括数据的操作 / 适配(主要是 API 数据,但也可以包含像图片大小调整这样的场景)、协议灵活性(WebSockets、GraphQL 等)、安全性(身份验证)以及对服务器端渲染(SSR) 的支持。引入 BFF 模式之后,可以避免前端团队将数据获取、去规范化(denormalization)和聚合逻辑推送到前端应用程序中,从而降低了前端代码出现杂乱的风险,同时,降低了代码和数据的网络使用、JavaScript 程序包的大小以及浏览器中所使用的计算资源。


BFF 模式并非没有挑战,迪卡侬的工程师制定了各种策略,以确保新引入的层不会对平台的整体质量带来负面影响。可以说,最大的风险在于 BFF 之间不一致的重复业务逻辑,或者实现本应由调用栈中较低的层所管理的业务逻辑。迪卡侬倡导建立一个架构委员会,定期讨论此类问题,并使用 ADR 来捕获由此产生的架构决策(AD)。



容错和优雅降级(图片来源:迪卡侬数字化博客)


第二个需要关注的主要领域是容错性,以确保 BFF 服务能够优雅地处理错误,并避免在不稳定的情况下压垮下游服务。团队提倡采用了断路器和隔板模式,以应对故障并对下游服务进行故障隔离。当发生故障时,将会返回陈旧的缓存数据给前端应用程序,或者无数据返回,从而提供了优雅降级用户体验的方法。


本系列的最后一篇文章讨论了 BFF 的替代方案,包括空中部署(over-the-air deployment,OTA,即通过移动通信接口实现对软件的远程管理——译者注)、基于 HAL 的 HATEOAS 和服务器驱动的 UI(server-driven UI,SDUI),还讨论了各自的优缺点和它们适合不同类型前端应用程序和组织规模的程度。


InfoQ 就该公司使用 BFF 模式的经验采访了迪卡侬的工程师 Raphaël Tahar****


InfoQ:你能大致总结一下迪卡侬使用 BFF 模式的经验吗?在整个公司推广 BFF 模式的过程中,最具挑战性的因素和方面是什么?


Raphaël Tahar: 最困难的制约因素是,我们需要考虑的功能和技术用例种类繁多,遍布整个组织(数千个项目),因此需要建立一个标准。


  • 有些是内部用户使用,有些是客户使用

  • 有些体验是在浏览器上使用,有些是在移动或联网设备上使用

  • 技术组合的复杂性各不相同(技术雷达上包括 4 种以上语言的大约 10 个框架)

  • 团队拓扑结构(人员配备和硬技能)的差异


BFF 并非银弹,因此必须采用实用主义的方式,它让我们能够建立准确的决策树,但这并不是一帆风顺的。


InfoQ:许多组织都采用 GraphQL 进行编排 / 聚合。你能解释一下为什么不采用 GraphQL 作为 BFF 的替代方案吗?


Raphaël Tahar: 在我看来,GraphQL 更像是一种“查询语言——协议”,而非架构模式本身。它就像一个保护壳(helmet),位于现有的服务之上,简化了相关数据的筛选过程。因此,它是对 BFF 模式的一个很好的补充,但我不会说这两个概念是非此即彼的。


BFF 的意义在于让前端团队拥有为其应用程序提供服务的 API,而 GraphQL 则更多地涉及优化有效载荷、端点和流量往返。因此,BFF 和 GraphQL 有一定的关联性,但两者并不是互斥的。


另一方面,GraphQL 联邦(GraphQL Federation)可能是 BFF 的一个重要替代方案,但实施这种架构并非易事,尤其是在大规模的组织中。


InfoQ:微前端架构(Micro Frontend Architecture,MFA)是业界的另一个趋势。迪卡侬是否在考虑采用它呢?


Raphaël Tahar: 迪卡侬多年来一直在使用构建期和运行期的 MFA。例如,使用 Web 组件是为了从 Web 标准的纯洁性和稳定性中受益,但一些限制因素阻碍了其在全公司范围内的采用。因此,我们使用了其他的一些技术来弥补这一不足(例如,基于单一 SPA 的框架)。


原文链接:

https://www.infoq.com/news/2024/03/decathlon-backend-for-frontend/

2024-04-10 08:005675

评论

发布
暂无评论
发现更多内容

【HTML-CSS】小游戏--渣灰哥的愿望之砍砍渣灰

Sam9029

JavaScript HTML5, CSS3 9月月更

阿里云视觉智能开放平台2D视频转3D视频开启邀测啦

夏夜许游

人工智能 AI 3D

Pipy + Sentinel 实现 Redis 的高可用

Flomesh

Service Mesh 服务网格

网易易盾 GameSentry 正式开源,做游戏安全保障的尖兵利刃

网易智企

安全 测试

JWT本无状态,为何却要存储在Redis破坏其无状态特性?

知识浅谈

JWT 9月月更

阿里云视觉智能开放平台离线人脸识别SDK开启邀测啦

夏夜许游

人工智能 AI 人脸识别 离线包

MODBUS RTU 485 协议简要说明

矜辰所致

Modbus RS485 9月月更

数据库发展史2--数据仓库

数据库 数据仓库 叶正盛 玖章

送你5个MindSpore算子使用经验

华为云开发者联盟

人工智能 算子 企业号九月金秋榜

论监控中事件管理的艺术

穿过生命散发芬芳

事件管理 9月月更

TCPIP协议栈的心跳、丢包重传、连接超时机制实例详解

Java快了!

3D打印机打印模型的10大技巧

Dylan

3D模型

iofod - Echart 图表全支持

iofod jude

Java 前端 低代码

实操指南:如何为 SAST 工具设置误报基准?

SEAL安全

应用安全 静态应用安全测试 SAST 应用安全测试 软件供应链安全

现代数据栈如何降低数据平台的复杂度?

Kyligence

数据分析 云原生 指标中台 指标自动化

住宅代理IP在网络攻击中的作用

郑州埃文科技

代理IP 安全检测 撞库攻击

Spring 框架使用了哪些设计模式?

Java快了!

spring框架

资源使用率提高25%,成本降低90%,云函数是怎么做到的?

最新动态

心血来潮,手绘一张Spring学习思维,内容详细全面,秋招面试必看!

收到请回复

Java 云计算 开源 架构 编程语言

阿里云视觉智能开放平台商品图智能生成开启邀测啦

夏夜许游

人工智能 AI 电商 图像分割

【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

Java快了!

怎样才能开一场高效的迭代评审会?

LigaAI

Scrum 迭代 LigaAI 敏捷实践 企业号九月金秋榜

Github星标90K!京东架构师一篇讲明白百亿级并发系统架构设计

了不起的程序猿

Java 程序员 高并发 java程序员 高并发系统设计

压测平台在全链路大促压测中的实践

得物技术

中间件 全链路压测 QPS 企业号九月金秋榜

SAP ABAP 平台新的编程模型

汪子熙

SAP abap Netweaver 思爱普 9月月更

计算机网络——码元、波特

StackOverflow

编程 计算机网络 9月月更

为超级品牌打造「上瘾算法」|Whale 帷幄发布全新 DAM & VAP 内容数字化产品

科技热闻

编译器优化:何为别名分析

华为云开发者联盟

开发 编译器 企业号九月金秋榜

“基础-中级-高级”Java程序员面试合集,看完献出我的膝盖!

收到请回复

Java 云计算 开源 架构 编程语言

PANews与NFTScan联合推出Top50 NFT Collection全球影响力榜单

NFT Research

Ethereum NFT

华为云宣布全面建设全球初创生态,3年内赋能10000家高潜初创企业

华为云开发者联盟

云计算 创业 创新创业 企业号九月金秋榜

迪卡侬采用 BFF 模式以强化前端团队_大前端_Rafal Gancarz_InfoQ精选文章