基于 Serverless 的腾讯在线教育中后台业务落地实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 基于 Serverless 的腾讯在
线教育中后台业务落地实践
杨波
腾讯IMWeb高级前端工程师
2.
3. • 团队Node服务开发回顾
• 企鹅辅导智能题库Serverless探索与实践
• Serverless一体化建设
• 未来展望
4. 预期听众收益
避免Serverless落地过程中踩坑
了解Serverless落地中常⻅问题解决思路
了解Serverless团队化建设的几个要点
5. 团队Node服务开发回顾
6. 团队Node服务开发回顾
前端团队介绍
腾讯IMWeb团队
技术矩阵 React/Vue/Angular Node/小程序/Wasm/Flutter…
系统建设 DevOps系统
低代码平台
WEB/Node框架…
负责产品
团队数据
成员人数100+
发布次数 160+/周
GIT COMMIT 1000+/天
7. 团队Node服务开发回顾
IMWeb的Node开发场景的变化
Node接入层
业务中台
运营活动
管理系统
SEO优化
直出场景
2015
SSR
2017
逻辑开发
2018
前端全栈
团队协同
体系化运维
2019
上云
8. 团队Node服务开发回顾
前端团队全栈研发全景图
产品孵化
H5
PC
诊断
研发支撑
告警
全链路日志
业务代码
全量日志检索
运营系统
管理后台
小程序
配置系统
消息系统
服务组件
基础组件
…
… 压测调优方案
业务组件 切流灰度系统
流量异常 COS Redis DAO CSRF 登录 二维码
成功率 IMServer 监控组件 加锁 缓存 TTS OCR
接口耗时 IMLog CDN 频控 队列 数学公式 口语测评
CD系统
CD系统
自动化测试
业务返回码
云监控
Quality
腾讯云FASS 中台服务
腾讯云BASS 业务后台
Runtime
CI系统
本地开发套件
Devops
9. 腾讯企鹅辅导Serverless探索与实践
10. 腾讯企鹅辅导Serverless探索与实践-智能题库
企鹅辅导上课模型
1 老师课前备课 2 学生课前测试
3 老师直播上课 4 学生课中测试
6 老师批改作业 5 学生课后作业
基础能力
智能题库
11. 腾讯企鹅辅导Serverless探索与实践-智能题库
题库系统当前架构
H5 系统 题库系统 考试系统 批改系统
PC WEB 组件 选择题 解答题 口语题
反馈系统
…
适配多端
Android/IOS
适配多业务
IPAD
Windows客户端
小程序
数据
测评
解析
试卷
考试
…
12. 腾讯企鹅辅导Serverless探索与实践-智能题库
题库系统优化-方案思考
目标
思考
方案
适配多端
接口原子化 接口裁剪 适配多业务
接口适配
非IO密集场景 免运维诉求 低成本诉求
Serverless BFF
BFF
Serverless
13. 腾讯企鹅辅导Serverless探索与实践-智能题库
1、如何复用现有Node框架
2、后台接口如何上BFF
问题分析
3、SCF BFF性能优化方向
4、SCF中数据库的使用
14. 腾讯企鹅辅导Serverless探索与实践-智能题库
Controllers
Logic
1、如何复用现有Node框架
IMServer(KOA)
Routers SCF main_handler
Node Server API Gateway
HTTP HTTP
IMServer请求流
IMServer透传数据格式
SCF透传数据格式
如何解决格式差异?
SCF请求流
15. 腾讯企鹅辅导Serverless探索与实践-智能题库
1、如何复用现有Node框架
HTTP
API Gateway
SCF main_handler
通信
UDS
SCF请求模型
IMServer(KOA)
Node Svr
Routers
Node Svr请求模型
时延 吞吐量 固定端口号
UDS(Unix Domain Sockets) 2US 1.73 M/S 不需要
TCP sockets 6US 0.25 M/s 需要
对比指标
通信方式
Controllers
16. 腾讯企鹅辅导Serverless探索与实践-智能题库
1、如何复用现有Node框架
init
Node Svr
trigger
listen
HTTP
API Gateway
入口
IMServer(KOA)
UDS通信文件
trigger
req
SCF mian_handler
进程间通信模式
Routers
Controllers
17. 腾讯企鹅辅导Serverless探索与实践-智能题库
旧接口
外网接口
CGI1-1
CGI2-1
通用反向代理
业务模块代理
后端逻辑服务
CGI3-2
新接口
…
NGINX
2、后台接口如何上BFF
后台Proxy(cmd调用)
CDN回源代理
SVR1 SVR2 SVR3
cmd1-1 cmd2-1 cmd3-1
cmd1-2 cmd2-2 cmd3-2
cmd1-3 cmd2-3 cmd3-3
后台公共逻辑库
直出
…
SVRN
…
后台接口架构
18. 腾讯企鹅辅导Serverless探索与实践-智能题库
旧接口
2、后台接口如何上BFF
新接口
BFF1
业务模块代理
后台Proxy(rpc调用)
BFF2
BFF3
…
BFF
RPC调用
后端逻辑服务
SVR1 SVR2 SVR3
cmd1-1 cmd2-1 cmd3-1
cmd1-2 cmd2-2 cmd3-2
cmd1-3 cmd2-3 cmd3-3
SVRN
…
SVR1
后端原子
后台公共逻辑库
原子1-1
原子1-3
细粒度
单逻辑
易测试
SVR2
SVR3
SVRN
原子3-1
原子2-3
原子3-2
原子3-3
…
19. 腾讯企鹅辅导Serverless探索与实践-智能题库
BFF1
BFF2
新接口
旧接口
2、后台接口如何上BFF
BFF3
…
新接口
BFF
RPC调用
现有原子能
是否可用
SVR1
后端原子
原子1-1
原子1-3
SVR2
原子2-3
SVR3 SVRN
原子3-1 Y
…
原子3-2
原子3-3
前端BFF闭环
N
后台新增原子
20. 腾讯企鹅辅导Serverless探索与实践-智能题库
2、后台接口如何上BFF
旧接口
新接口
协议约定通用字段
协议 前后端约定通用数据字段
SDK下游寻址优化
SDK 解决同子网IP相同的问题
SCF RPC调用如何处理?
通用字段
21. 腾讯企鹅辅导Serverless探索与实践-智能题库
APP
⻚
面
Windows客户端
题目
H5
试卷
PC WEB
解析
分数
小程序
…
前端
业务逻辑闭环
题库架构
Serverless BFF
BFF 接口 API 层
接
口
RPC调用(通用协议,标准SDK)
原子逻辑
原子逻辑
登录
权限
原子逻辑
存储
缓存
…
…
业务逻辑
基础逻辑
后端
数据逻辑闭环
22. 腾讯企鹅辅导Serverless探索与实践-智能题库
USER
STGW
接入层
APIGATEW
NGINX 3、SCF
BFF BFF性能优化方向
Serverless BFF层
SCF
后台原子
后台原子层
存储资源
23. 腾讯企鹅辅导Serverless探索与实践-智能题库
3、SCF BFF性能优化方向
接入层
BFF层
后台原子层
USER
STGW
BFF
后台原子
开启就近访问
NGINX
APIGATEW
存储资源
SCF
SCF多地部署
冷启动优化 同一网络调用
RPC调用 业务接口缓存
原子接口缓存
读写分离
…
…
…
24. 腾讯企鹅辅导Serverless探索与实践-智能题库
3、SCF BFF性能优化方向
什么是冷启动?
冷启动
优化
云函数被invoke时创建新实例来处理请求,
新实例从创建到启动完成的这个过程
避免创建新实例
优化思路
提升冷启动速度
25. 腾讯企鹅辅导Serverless探索与实践-智能题库
3、SCF BFF性能优化方向
冷启动
优化
实例复用
SCF启动过程
实例预留:预先启动一些实例
避免创建新实例
实例加热:定期加热实例
实例预请求:业务上按需预请求
加快响应:缓存逻辑&同步改异步等
下载&部署速度
提升冷启动速度
提升下载速度:代码精简压缩
提升启动速度:减少服务启动依赖
26. 腾讯企鹅辅导Serverless探索与实践-智能题库
1、业务请求耗时:从平均1秒优化到800MS
耗时优化的结果:
2、冷启动请求占比:从10%降到5%
3、冷启动请求耗时:从平均5秒降到平均3秒
27. 腾讯企鹅辅导Serverless探索与实践-智能题库
冷启动
冷启动
SCF实例2
SCF实例1 DB连接
DB连接
DB连接
SCF实例3 DB连接
冷启动 SCF实例N
冷启动 SCF实例2
数据库
4、SCF中数据库的使用
SCF实例1 DB连接
DB连接
DB连接
代理
冷启动 SCF实例3 DB连接
冷启动 SCF实例N
数据库
数据库连接占满
冷启动
无法避免
数据库连接占满
数据库连接复用
28. Serverless一体化建设
29. Serverless一体化建设全景图
CD系统 IMFS
SCF跳转发 开发模板
SCF CD系统发布 本地调试
容灾网关
权限统一
CVM跳转发布
操作简化
CONF发
三地部署
规则转发
DEVCLOUD
公网域名
IMServerless
TS规范
日志上报
版本绑定
内网域名
版本发布
免发布
团队权限GIT文件
T
R
A
C
E
I
D
WEB HOOK
Grafana视图
ES集
SVR
SCF/STKE同构
SVR
SCF/STKE同构
SVR
SCF/STKE同构
HTTP、UDP
IMLOG
IMFS规范
研发闭环
别名绑定
Imlog
GIT
规范
业务自动容灾
IMSERVER
组件
云函数GIT仓库
灰度导流
告警云函数
API GATEWAY
镜像
SCFRequest
企微告警拉群
NGINX
性能优化
SCF多函数发
IMFS
日志监控
CLIENT
流量闭环
监控闭环
30. Serverless一体化建设
Serverless一体化建设方向
定规范
团队化SCF开发规范建设
怎么喜欢怎么来
一体化 提效率
SCF多人开发研发效能提升
多快好省
保质量
SCF稳定性保证的团队方案
31. Serverless一体化建设
目录规范
本地研发规范
定规范
开发规范
团队化SCF开发规范建设
函数规范
CI/CD规范
状态码规范
日志告警规范
32. Serverless一体化建设
定规范
目录规范
本地研发规范
配置精简,结构清晰
多函数支持,TS支持
保持传统本地开发习惯
33. Serverless一体化建设
函数配置规范
函数规范
APIGATEW配置规范
SCF接口转发规范
Node.js版本 内存配置 网络配置 别名配置 …
Path配置 超时配置 响应类型配置 …
路由配置 熔断配置 限流配置 …
定规范
基于Serverless Framework
CI/CD规范
Yaml文件规范 命令简化 …
基于GIT进行CI 分支构建 云端构建 环境隔离 …
基于GIT分支CD 需求管理 发布Checklist 发布周知 …
34. Serverless一体化建设
上下游回包格式
状态码规范
状态码分层
内置状态码组件
retCode字段 errMsg字段 …
系统错误 逻辑错误 网络错误
…
全局错误捕获 系统错误捕获 基础状态码 …
定规范
统一TraceID
日志告警规范
生成规范 透传规范 …
基于ELK模型告警 日志SDK ES索引字段 Grafana告警视图 …
企微推送&电子流提单 自动拉取 自动AT负责人 自动提BUG单 …
35. Serverless一体化建设
1、统一SCF开发模板
开发
提效率
2、收拢SCF账号权限
SCF多人开发研发效能提升
3、优化SCF部署耗时
部署
4、提升SCF部署效率
IMFS
36. Serverless一体化建设
提效率
1、统一SCF开发模板
开发
部署
2、收拢SCF账号权限
SCF多人开发研发效能提升
目录结构
基础依赖库
构建命令
Imfs-create
基础配置
路由配置
3、优化SCF部署耗时 日志配置
4、提升SCF部署效率 中间件配置
…
37. Serverless一体化建设
提效率
1、统一SCF开发模板
开发
2、收拢SCF账号权限
SCF多人开发研发效能提升
账号A
账号B
账号C
3、优化SCF部署耗时
部署
4、提升SCF部署效率
地域A
命名空间 D
SCF A
地域B 命名空间 E SCF B
地域C 命名空间 F SCF C
… … …
…
资源浪
费
管理困
难
38. Serverless一体化建设
提效率
SCF多人开发研发效能提升
SCF A
1、统一SCF开发模板
开发
开发-命名空间
2、收拢SCF账号权限
统一账号
SCF B
统一地域
部署
4、提升SCF部署效率
限
测试-命名空间
SCF C
3、优化SCF部署耗时
资源浪
费
收拢权
生产-命名空间
…
管理困
难
39. Serverless一体化建设
提效率
1、统一SCF开发模板
开发
SCF多人开发研发效能提升
SDK SCF
BUILD
SDK SCF
DEPLOY
SDK FILE
UPLOAD
SCF FILE
DOWNLOAD
2、收拢SCF账号权限
优化部署耗时
3、优化SCF部署耗时
部署
4、提升SCF部署效率
部署触发次数越少越好
SCF Layer
单次部署文件越小越好
SCF INIT
40. Serverless一体化建设
提效率
1、统一SCF开发模板
开发
SCF多人开发研发效能提升
SDK SCF
BUILD
SDK SCF
DEPLOY
SDK FILE
UPLOAD
SCF FILE
DOWNLOAD
SCF INIT
2、收拢SCF账号权限
优化部署耗时
业务逻辑
动态逻辑
3、优化SCF部署耗时
部署
4、提升SCF部署效率
SCF Layer
部署函数
频繁
耗时降低
SCF
静态依赖
node_modules
部署为layer
按需
41. Serverless一体化建设
提效率
SCF多人开发研发效能提升
APIGATEW
1、统一SCF开发模板
开发
1、函数版本发布
2、修改APIGATEW指向
2、收拢SCF账号权限
3、优化SCF部署耗时
部署
函数版本 V
4、提升SCF部署效率
3、发布APIGATEW
函数版本 V+1
团队强制使用别名
APIGATEW
函数别名PROD
函数版本V
1、函数版本发布
2、修改函数别名PROD指向
函数版本 V+1
42. Serverless一体化建设
提效率
SCF多人开发研发效能提升
团队强制使用别名
1、统一SCF开发模板
开发
2、收拢SCF账号权限
APIGATEW
函数别名PROD
函数版本V
1、函数版本发布
2、修改函数别名PROD指向
函数版本 V+1
DevOps单系统闭环
3、优化SCF部署耗时
部署
4、提升SCF部署效率
APIGATEW
函数别名PROD
函数版本V
一个按钮点击操作
函数版本 V+1
43. Serverless一体化建设
提效率
1、统一SCF开发模板
开发
SCF多人开发研发效能提升
DevOps系统闭环
2、收拢SCF账号权限
3、优化SCF部署耗时
部署
4、提升SCF部署效率
多项目多函数发布并行处理、状态实时掌握
44. Serverless一体化建设
最终概览效果
学习SCF、API文档
GIT CLONE他人项目
删掉其他业务逻辑
各种申请权限
编写业务逻辑
GIT PUSH 开发分支
SCF控制台创建函数
云API控制台创建服务
体系化收敛
OCI DEPLOY函数到测试命名空间
转发请求到测试网关API
云函数控制台查看日志
本地验证
权限&创建
本地开发
CD系统提发布单
CD系统 触发CI构建
云函数控制台发布版本
云API控制台创建API
云API控制台API绑定函数版本
发布云API
现网验证
发布上线
45. Serverless一体化建设
并发激增
保质量
冷启动调优
SCF稳定性保证的团队方案
函数发布
并发超出预设值
未知错误码
系统错误兜底
46. Serverless一体化建设
目前的SCF请求流
CLIEN
T
腾讯云 腾讯云
API SCF
API SCF
API SCF
NGINX
…
…
47. Serverless一体化建设
腾讯云
CLIEN
T
NGINX
不可控
容灾
腾讯云
API SC
API SC
API
… SC
…
不可控
…
48. Serverless一体化建设
基于网关容灾方案
CLIEN
T
NGINX
SCF网关
统一兜底容灾
业务失败,直接触达用
腾讯云 腾讯云
API SCF
API SCF
API SCF
…
业务失败,流控拦截
…
49. Serverless一体化建设
网关容灾方案-基于CVM容灾
CVM和SCF业务同构
Node SERVER
server_entry.js CVM镜像
scf_entry.js SCF代码包
IMFS
LOGIC LOGIC LOGIC …
一套代码,一个开发习惯,一次构建,两个入口
50. Serverless一体化建设
SCF网关最终架构
网关(基于NGW)
规则匹配 插件
规则更新 鉴权 日志
匹配 解析 灰度 改写
腾讯云 腾讯云
API SCF SCF
SCF
API
CLIEN
T
…
同构
代理转发
NGINX
DNS解析 转发执行
失败重试
天津
API
SVR SVR
多地部署
深圳
CVM
南京
…
SVR
…
51. 总结
1. Serverless落地实践中常⻅问题解法
1、现有Node框架复用 2、后台接口如何上BFF
3、冷启动优化方法 4、SCF中使用DB的原则
2. Serverless一体化建设的要点
1、Serverless团队规范
2、如何提高Serverless研发效率
3、如何保证Serverless业务质量
52. 未来展望
53. 未来展望
云函数编排
多函数拆分
54. 未来展望
云函数编排
下游服务
SCF
数据层
函数复用
SCF
SCF
下游服务
SCF
SCF
函数治理
性能保障
数据层
可观测性
55. 未来展望
多函数拆分
Controller Logic
APIGATEW
Path
SCF
Node Svr
Controller Logic
Controller Logic
函数健壮性
本地研发体验友好
Path
APIGATEW
Path
SCF Controller Logic 拆分规范
SCF Controller Logic 依赖分析
SCF Controller Logic DevOps
Path
56.
57. 未来已来,前端的目标是星辰大海!
扫码关注IMWeb微信公众号
工作机会
与我交流
58.