BFF和网关是如何演化出来的?

本文通过一个假想的电商公司案例,详细介绍了BFF(Backend for Frontend)和微服务网关在服务化架构中的演进过程,从最初的无线应用直接调用内部服务,到引入BFF解决耦合问题,再到引入API Gateway进行解耦和处理跨横切面逻辑,最后形成现代微服务架构的分层模式。这种架构能够灵活应对业务需求变化,支持创新和演化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概念,这两个概念相对比较新,有些开发人员甚至是架构师都不甚理解。

本文用假想的公司案例+图示的方式,解释BFF和网关是什么,它们是怎么演化出来的。希望对架构师设计和落地微服务架构有所启发。

服务化架构V1

我们先把时间推回到大致2011年左右。假设有一家有一定业务体量的电商公司CoolShop,在这个时间点它已经完成单块应用的解构拆分,内部SOA服务化已经初步完成。这个时候它的无线应用还没有起步,前端用户体验层主要是传统的服务端Web应用,总体服务化架构V1如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YICXu8Hj-1581484988574)(http://jskillcloud.com/img/post/2018060702/soa_v1.png#pic_center)]

服务化架构V2

时间转眼来到2012年初,国内的无线应用开始起风,CoolShop公司也紧跟市场趋势,研发自己的无线原生App。为了能尽快上线,公司的架构师提出如下V2架构,让App直接调用内部的服务:

### BFF架构概念 BFF(Backends For Frontends),即面向前端的后端,是一种专门用于支持特定类型的客户端的应用程序结构[^3]。这种架构允许创建专门为不同种类的客户端量身定做的API接口,比如移动端应用、桌面浏览器或是物联网设备等。 #### 作用 1. **优化用户体验** 不同平台上的用户界面有着不同的需求技术栈,通过构建独立于其他渠道的专用后台服务,能够更好地满足各个终端用户的特殊要求,提供更加流畅的操作体验[^2]。 2. **简化数据集成** 当面对复杂的业务逻辑时,BFF充当着中介者的角色,它负责协调并组合来自多个内部微服务的信息资源,在此过程中完成必要的过滤、聚合以及格式转换操作后再返回给调用方[^1]。 3. **增强安全性控制** 对外暴露的服务接口数量减少意味着潜在的安全风险也随之降低;与此同时,还可以针对具体场景实施更精细粒度的身份验证机制访问权限管理策略[^4]。 ```python # 示例:简单的bff层实现方式之一——路由转发与数据组装 from flask import Flask, jsonify, request import requests app = Flask(__name__) @app.route('/api/user_info') def get_user_info(): user_id = request.args.get('userId') # 调用用户信息服务获取基本信息 response_userservice = requests.get(f'http://userservice/api/v1/users/{user_id}') # 调用订单服务查询最近一次购买记录 response_orderservice = requests.post( 'http://orderservice/api/v1/orders/search', json={"userId": user_id} ) combined_data = { "basicInfo": response_userservice.json(), "lastPurchase": response_orderservice.json()['items'][0] if len(response_orderservice.json()['items']) > 0 else None, } return jsonify(combined_data) if __name__ == '__main__': app.run(debug=True) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值