kubernetes 应用的 bff便捷开发
如果无法正常显示,请先停止浏览器的去广告插件。
1. K8s 应用 BFF 的便捷开发
送给面对 K8s 不知所措的前端开发者们
王振威 腾讯云 CODING 研发总监
2. 1. 为什么要实践BFF
目录
3. 01
为什么要实践 BFF
后端微服务化,前端 SPA 化
4. 经典单体应用架构
服务器生成直出 HTML
Server
HTML
5. Server Side Render -> Single Page Application
Frontend UI
+
服务器 API 提供 Data
Server
Data
HTML
6. Monolith Backend -> Miro Services
Kubernetes
用
户
VM
微服务,容器化,云原生
Server
D
订
单
物
流
F
E
G
7. SPA + Micro Services
Kubernetes
Frontend UI
用
户
+
Data
大量反复调用,
冗余数据
D
订
单
HTML
物
流
F
E
G
8. 如:著名的 N + 1 问题
展现用户博客列表页面
1.
1、查询博客列表
2、遍历博客列表,查询详情
调用接口,查询博客列表,得到博客 ID,分
页信息,和基本信息
2.
遍历博客列表调用接口获取博客详细信息,
并取用需要展现的信息
3. 遍历博客列表,查询评论统计
4. 遍历博客列表,查询点赞统计
前
端
3、遍历博客列表,查询评论统计
4、遍历博客列表,查询点赞统计
后
端
9. 本质:前端的界面思维,后端的数据思维
前端: 要用户体验,要顺畅
后端:要服务解耦,要性能
Page1 Entity1
Page2 Entity2
Page3 Entity3
失控的接口调用
10. 02
BFF 常见做法
API 网关? BFF?
11. 错误的做法: API Gateway as BFF
Kubernetes
Frontend UI
用
户
+
Data
D
Gateway
订
单
HTML
物
流
F
E
G
12. 错误的做法: API Gateway as BFF
Kubernetes
Frontend UI
用
户
+
Data
D
Gateway
订
单
HTML
物
流
F
E
G
13. 正确的做法: API Gateway And BFF
Kubernetes
Frontend UI
用
户
+
Data
D
Gateway
BFF
订
单
HTML
物
流
F
E
G
14. 正确的做法: API Gateway Plus BFF
Kubernetes
Frontend UI
+
Gateway
D
BFF For Web
订
单
Data
HTML
用
户
BFF For APP
物
流
F
E
G
15. 03
为什么 BFF 开发这么痛苦
环境搭建难,调试自测不便
16. Backend For Frontend
容器微服务
技术手段
不懂
前端开发者
服务目标
Backend For Frontend
17. 开发的要素
18. 环境搭建难
· 微服务数量多
老大,现在整个系统有接近 200 个微服务了,搭建一
套环境得两周。后端同学都搞不定,我也无能为力啊。
· 环境脆弱,易损坏
能用的现存环境本来就不多,很多人在上面调试测试,
动不动就坏掉,极大影响开发效率。
入职的第一感受就是:没有靠谱的环境给我使用。
19. 本地资源不够
· 微服务占用资源太多
老大,听说咱系统 i9+ 64G内存也跑不动了,你看我
这个2021款顶配 iMac 也不够用了,能不能安排再给
一台?
没有 128G 内存,根本跑不起来。
20. 编码自测循环耗时
太久
· 自测调试难
老大,不是我摸鱼啊,你看这写完一段代码,得等10
分钟才能看到运行结果。
摸鱼的日常
21. 问题出在这里
22. 04
用云实现便捷的 BFF 开发
另类思路,不是优化而是革新
23. 弹性思维理解环境
弹性交付的环境
• 定义环境而不是维护环境
• 按需,自助获取专属环境
• 使用与正式环境一致的手段定义
• 使用自动化手段加速环境创建
• 统一提供所有环境基础设施
按需所得
24. 从 K8s 生态打造弹性环境体系
25. 从 K8s 生态打造弹性环境体系
26. 效果:用 IDE 直接集成便捷调试
以前:盲写代码
现在:一键调试
27. 效果:VSCode 直连开发环境
Kubernetes
Gateway(开发模式)
源码同步
秒级自测
用
户
D
BFF For Web
订
单
BFF For APP
物
流
F
E
G
28. 编码完毕可以很快看到运行结果
%&
#$
!"
29. 如果环境准备好了,需要装一个插件
https://nocalhost.dev
• 开源: https://github.com/nocalhost
• 便捷:提供 IDE 插件,装上就能用
• Kubernetes 生态:Helm, Kustomize 等
Nocalhost
30. Talk is cheap, show me the code.
31. 演示 Wepack 的 BFF 开发
https://wepack.coding.net
• 提供各种类型制品管理的服务
• 微服务数量: 40 左右
• BFF 方案:内置于 Gateway 组件,Golang 开发
• 运行于 Kubernetes 集群中
32.
33. 总结一下
· 理解 BFF
是一个前端开发者需要写的后端组件。前端负责,但要按照后端组件的方式
进行开发和调试。
· 环境上云,自动化环境生成
用弹性思维理解环境,只维护环境定义,不维护环境本身。
应该使用自动化手段弹性按需生成环境,让开发即时自测编码结果,而不是
等待集成测试确认问题。
· 便利化开发和调试
要尽可能缩短 “编码 – 自测” 这个反馈循环的时间,从 IDE 层面进行集成,
确保开发者可以高效验证自己的编码结果。
34. 结合现状,平滑过渡
35. 感谢倾听
大会官网