BFF层的谎言:为什么大部分团队不需要它

最近在和几个技术管理者交流时,发现他们都在规划或已经落地了BFF(Backend for Frontend)架构。问为什么要做BFF,得到的答案惊人地一致:"解耦前后端"、"提升开发效率"、"这是最佳实践"。

但当我问:"你们团队有多少后端开发?前端开发呢?",答案通常是"后端6-8人,前端3-4人"。这让我意识到一个问题:大部分团队上BFF,可能不是因为真的需要,而是因为"别人都在用"。

我想聊聊这个话题,不是要否定BFF的价值,而是想说:很多团队高估了BFF的收益,低估了它的成本

 

BFF真正解决的问题

 

先说清楚,BFF不是伪需求。它在特定场景下确实有价值:

场景一:多端适配。你的后端API是为Web设计的,现在要支持移动端、小程序、IoT设备。不同端的数据需求、交互逻辑差异很大,用一套API很难搞定。这时候BFF可以为每个端定制API,后端保持稳定。

场景二:聚合调用。前端一个页面需要调用5-6个后端服务,串行调用太慢,并行调用又要处理复杂的依赖关系。BFF可以在服务端聚合这些调用,减少前端的复杂度和网络开销。

场景三:权限和安全。有些业务逻辑不适合放在前端,比如敏感数据的过滤、复杂的权限判断、API限流。BFF可以作为安全网关,在到达核心服务之前做一层拦截。

这些场景在大型互联网公司、复杂业务系统中确实存在。但问题是:你的团队真的有这些问题吗?

 

大部分团队的真实情况

 

我见过很多团队,他们上BFF的真实原因是:

1. 前后端扯皮严重。前端要的字段后端不给,后端返回的数据前端用不上。争来争去效率低,不如让前端自己写BFF。

2. 后端响应慢。需求提给后端,排期要一周,改个字段要发版。前端等不起,自己写BFF快。

3. 架构升级需要。公司推微服务、云原生,技术架构要升级。BFF是新架构的一部分,不做不行。

4. 技术追新。看到大厂都在用BFF,觉得这是技术趋势,不跟上就落后了。

注意到没有,这些理由都不是技术问题,是组织问题、流程问题、协作问题

 

BFF的隐藏成本

 

上了BFF之后,很多团队才发现,成本比想象的高得多:

 

维护成本

 

BFF不是"写完就不用管了"。它是一个完整的后端服务,需要:

- 运维:部署、监控、日志、报警
- 性能优化:接口响应时间、并发处理、内存管理
- 安全维护:依赖包升级、漏洞修复、权限管理
- 文档和测试:API文档、单元测试、集成测试

我见过一个团队,BFF上线后第一个月还好,第二个月开始各种问题:内存泄漏、接口超时、日志爆炸。前端开发忙着修Bug,根本没时间写业务需求。

 

技术栈分裂

 

前端用BFF,通常选Node.js。这意味着团队要维护两套后端技术栈:

- 后端:Java/Go + Spring/Gin
- BFF:Node.js + Express/Koa

两套技术栈意味着:

- 两套部署流程
- 两套监控体系
- 两套日志规范
- 两种问题排查方式

更麻烦的是,前端开发不一定懂后端。写业务代码可能没问题,但遇到性能瓶颈、并发问题、数据库优化,很多前端是搞不定的。

 

职责边界模糊

 

BFF到底归谁管?

- 前端说:BFF是给前端用的,前端维护
- 后端说:BFF是后端服务,应该后端管
- 运维说:BFF要部署到生产,运维要介入

最后的结果往往是:出问题了大家互相甩锅。

我见过一个真实场景:BFF接口性能差,前端说是后端API慢,后端说是BFF调用方式有问题,前端又说BFF只是转发没做处理。扯了一周,最后发现是网络配置问题,和代码没关系。

 

重复劳动

 

有了BFF,后端还是要写API,BFF再封装一层。很多时候,BFF做的事情就是:

1. 接收前端请求
2. 转发给后端
3. 拿到后端响应
4. 稍微改改字段名
5. 返回给前端

这不是解耦,这是重复劳动

 

什么时候你真的需要BFF

 

我不是说BFF没用,而是想说:不要为了用而用

你可能真的需要BFF,如果:

1. 你的业务真的是多端。不是"我们未来可能要做小程序",而是"我们现在就有Web、iOS、Android、小程序四端,数据需求差异很大"。

2. 你的后端真的是微服务。不是"我们有3个后端服务",而是"我们有30个微服务,前端一个页面要调10个服务"。

3. 你的团队有能力维护。不是"我们前端会写Node.js",而是"我们有专门的全栈或后端同学负责BFF,有完善的监控和运维体系"。

4. 你的后端确实不灵活。不是"后端响应慢",而是"后端团队在另一个城市,沟通成本高,响应周期长"。

如果这些条件都不满足,先别急着上BFF

 

更务实的选择

 

如果你的问题是"前后端协作效率低",有更简单的办法:

 

1. 改善协作流程

 

- 前后端一起评审需求,明确API设计
- 用API管理工具(Swagger、Postman)规范接口文档
- 前端Mock数据并行开发,不等后端
- 后端提前暴露测试环境,前端早点联调

 

2. 后端提供GraphQL

 

如果后端响应慢,可以考虑让后端提供GraphQL API。前端可以按需查询字段,不用每次改需求都找后端。

成本比BFF低,效果差不多。

 

3. 让前端参与后端开发

 

如果前端真的想控制API,可以让前端同学参与后端开发。不是让他们写BFF,而是直接写后端API。

这听起来激进,但我见过这样的团队:前端同学熟悉业务逻辑,直接写Java代码,后端同学Code Review。效率比BFF高多了。

 

4. 后端提供更灵活的API

 

后端API不是"一次定义,永远不变"。可以提供一些灵活的查询参数,让前端可以按需获取数据。

比如:

```javascript
// 不好的设计:为每个场景写一个API
GET /api/user/basic
GET /api/user/detail
GET /api/user/with-orders

// 更好的设计:一个API + 灵活参数
GET /api/user?fields=name,email&include=orders
```

 

我的观察

 

在金融业务中,我见过两种极端:

一种是完全没有BFF。前端直接调用后端API,遇到复杂场景就让后端加接口。看起来"落后",但效率其实不低。因为后端响应快,API设计也考虑前端需求。

另一种是BFF过度设计。每个前端页面都有对应的BFF接口,BFF又调用多个后端服务。架构很漂亮,但维护成本高到吓人。一个简单需求,前端改、BFF改、后端改,三个地方都要改。

哪种更好?我觉得是前者。简单的架构不一定落后,复杂的架构不一定先进

 

写在最后

 

我不反对BFF,但我反对"为了用而用"。

技术选型不是看流行度,而是看是否真的解决了你的问题,是否带来了可接受的成本

BFF在特定场景下是好东西,但大部分团队的问题不是"缺一个BFF",而是"协作流程有问题"、"API设计不合理"、"沟通成本太高"。

如果你的团队正在考虑上BFF,不妨先问自己几个问题:

1. 我们真的有多端适配、聚合调用、安全网关的需求吗?
2. 我们有能力维护一个完整的后端服务吗?
3. 我们尝试过改善协作流程、优化API设计吗?
4. 上了BFF之后,维护成本是否可接受?

如果这些问题的答案都是肯定的,那就上。

如果有任何犹豫,先别急着跟风

技术债比技术落后更可怕。

You voted 5. Total votes: 21

添加新评论