微服务囧途之BFF层登场
从单体架构演化为微服务架构后,架构者的期望是“模块A”+“模块B” = “后端服务”。
场景一
Web端和Mobile端都有一个详情页面,需要调用模块A的getDetail接口获取数据。假设Web端实际需要展示的字段是20个,Mobile端实际需要展示的字段是10个,对应的数据表字段为30个。
方案一:
为Web端和Mobile端提供不同的接口返回各自实际所需的字段。如:getDetailForWeb、getDetailForMobile;
方案二:
Web端和Mobile端复用同一个getDetail接口,返回字段取两端所需的并集;
方案三:
Web端和Mobile端复用同一个getDetail接口,返回数据表中的所有字段,各端自取所需,以后业务上可能会再出来小程序端、xx端等则可“复用”,可“扩展”;
方案一的囧境:
- 模块A承担了多端业务变化的适配工作,端上的业务调整都会引起模块A的变化;
方案二、方案三的囧境:
- 接口返回太多无用字段导致接口响应变慢并增加了前端同学理解接口的难度;
- 因为接口被多端使用会给后续维护同学增加重构的心理压力,结果就是随着业务的发展接口返回字段变得越来越多;
场景二
前端有个页面需要同时展示模块A接口和模块B接口的数据。
方案一:
前端分别调用模块A和模块B的接口并展示;
方案二:
前端调用模块A接口,模块A调用模块B获取数据并组装后返回给前端;
方案一的囧境:
- 当页面依赖的模块不多时不会有什么问题,当依赖的模块很多时会影响响应(浏览器对同一域名有最大请求并发限制);
方案二的囧境:
- 模块A和模块B耦合在了一起,并很可能出现双向依赖的情况;
- 模块A和模块B之间的边界开始模糊;
场景三
前端有个页面需要根据模块B getType接口的返回,来筛选展示模块A getDetail返回的内容。
方案一:
前端分别调用模块A和模块B的接口,然后根据type来筛选展示;
方案二:
前端只调用模块A getDetail接口,模块A去调用模块B getType接口并过滤数据返回给前端;
方案一的囧境:
- 长期发展会导致前端逻辑越来越重,还可能出现同一个功能逻辑散落在前端和后端;
方案二的囧境:
- 同场景二的方案二;
优化方案
增加BFF(Backend For Frontend)层,这样职责就清晰了。
前端:专注于交互、展示;
BFF层:专注于为各端提供接口服务;
能力层(模块A、模块B):专注于领域内的事情;
微服务囧途之BFF层登场相关推荐
- 骚年快答 | 微服务架构中的BFF到底是啥?
[答疑解惑]| 作者 / Edison Zhou 这是恰童鞋骚年的第263篇原创内容 昨天的骚年快答<技术中台与业务中台都是啥玩意>一文中留下一个问题:BFF是啥?为啥在API网关和业务中 ...
- 【有料】微服务架构中的BFF到底是啥?
在<技术中台与业务中台都是啥玩意>一文中留下一个问题:BFF是啥?为啥在API网关和业务中台之间加入了一层BFF?考虑到在实际工作中,我的大部分同事都问过这个问题,这里我也总结一下进行答复 ...
- 微服务架构中的BFF到底是啥?
一.从一个MyShop开始说起 为了讲清BFF是个啥,这里引用我在波波老师的课程<Spring Boot与K8s云原生应用开发>中学到的一个案例,来跟大家分享一下,并尽力说清楚BFF是啥, ...
- 微服务架构--BFF层
参考:https://www.cnblogs.com/edisonchou/p/talk_about_what_is_bff_in_microservices.html 一.什么是微服务架构中的BFF ...
- 微服务下使用GraphQL构建BFF
https://zhuanlan.zhihu.com/p/35108457 微服务架构,这个在几年前还算比较前卫的技术在如今遍地开花.得益于开源社区的支持,我们可以轻松地利用 Spring Cloud ...
- 微服务架构:BFF和网关是如何演化出来的?
题图 from pixabay.com 1.介绍 BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概念,这两个概念相对比较新,有些开发人员甚至是架构师都不 ...
- 转:微服务架构:BFF和网关是如何演化出来的?(这篇文章相当棒)
转自: https://juejin.im/entry/6844903806208049159 这篇文章写得非常棒,从服务,到bff, 到gateway 的一步步演化,描述的非常清晰易懂. 1.介绍 ...
- 微服务,BFF,API gateway 学习笔记
一.微服务 微服务是什么? 微服务模式的一般设计见下图: 如上图所示,把业务分块,做了垂直切分,切成一个个独立的系统,每个系统各自衍化,有自己的数据库.缓存等辅助系统,各个微服务共同完成整个系统功能. ...
- [微服务/API时代的前端开发] BFF超入门--Netflix、Twitter、Recruit选择BFF的理由
前言 在本系列"微服务/API时代的前端开发"中,我们将介绍当前备受关注的BFF(Backends For Frontends).这一篇,我们将主要介绍BFF的概要和例子,作为&q ...
最新文章
- JavaScript document write String content writes nothing o
- linux下使用lftp的小结
- es7 bulk api 批量插入es
- 机器学习和统计里面的auc怎么理解?
- rust投递箱连接箱子_一种用于防盗的牛奶投递箱的制作方法
- 【动态规划】P1004 方格取数(四维dp模板题)
- linux 删除进程的多种方法
- ubuntu安装python3.6_Ubuntu16.04下安装python3.6.4详细步骤
- idm6.40最新版exe下载器介绍
- Fashion MNIST进行分类
- 业界首款 ACAP 自适应计算加速平台——Xilinx Versal Premium 系列
- ARM DS-5 Development Studio 5.28.1 破解激活教程
- 医学影像开源数据集汇总
- UE5/C++ 基于GAS创建攻击伤害 5.1.1准备碰撞体
- Tp5设置参数全局过滤方法
- 基于《高级计算机图形学原理与实践》(西安科技大学)的学习笔记(一、二)
- 专业内容型APP,怎么让APP从零实现盈利?
- 系统或应用计算机指令的术语叫什么意思,[计算机软件及应用]BPM术语解释.doc
- Android Zenmode/DND(勿扰模式) 实现原理剖析
- pta 试试手气 C语言
热门文章
- Android:玩转ADB命令(ADB命令使用大全)
- 51nod 1475:建设国家 优先队列的好题
- 劳动保障协管员计算机考试,劳动保障协管员考试试题
- MVP -----个人理解与示例(android例子 实现)
- Android中如何根据图片url路径来获取网络图片
- 黑人抬棺用计算机演奏的乐谱,原神乐谱黑人抬棺怎么演奏_乐谱黑人抬棺_3DM手游...
- 超好玩的神乐七奈桌面宠物+有BGM音效
- Java技术交流群[微信](Talking Coding)
- python 仪表盘图片读数_opencv+python计算仪表盘读数
- 文档编辑之markdown语法(typora)