美团基于 Serverless 的前端研发体系建设和业务实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团基于 Serverless 的前端研发体系
建设和业务实践
张方成
美团·基础技术部·前端技术中心
2.
3. 个人简介
2016 年加入美团,曾负责美团私有云平台前端建设,
目前负责美团 Node.js 基建、Serverless 前端方向以
及静态网站托管服务建设,关注前端工程化、云化、
Serverless 架构等技术领域。
4. 目录
• 背景
• 美团 Serverless 前端建设
• 前端交付实践
• 未来规划
5. 背景:为什么做Serverless?
业务复杂度不断增加
6. 背景:为什么做Serverless?
技术架构演进
基础设施服务化
业
务
研
发
平台服务化
业
务
研
发
业务应用
业务逻辑托管服务化
业
务
研
发
业务应用
业务逻辑
2019上线
Serverless平台
业务应用底座
运行时、框架
平台软件 平台软件
存储、数据库、中间件 存储、数据库、中间件
基础设施
机房、网络、服务器
平
台
研
发
基础设施
机房、网络、服务器
平
台
研
发
Serverless 使业务开发者聚焦业务逻辑开发
平台软件
存储、数据库、中间件
基础设施
机房、网络、服务器
平
台
研
发
7. 背景:Serverless可以为前端解决什么问题?
业务特点与痛点
美团Node.js应用占比
业务特点
• B端产品:系统复杂,更关注效率
• C端产品:访问量大,更关注稳定性
B端
30%
工具
40%
• 工具型产品:访问量极低,更关注机器费用
业务痛点
C端
30%
• 研发效率低:资源申请、基础服务集成、发布耗时
• 运维成本高:集群扩缩容、机房容灾、节点隔离
• 机器费用高:冗余部署、资源利用率低
8. 背景:Serverless可以为前端解决什么问题?
使前端开发者聚焦业务逻辑开发
策略
Serverless 架构下
按需使用、集群扩缩容、机房容灾、节点隔离
基础设施
对象存储
日志
文件存储
机房
操作系统
数据库
内容加速
服务器
网络
安全
机器申请、维护
平台软件
监控
高并发
软件稳定性
高可用 高性能
统一接入SDK
框架
服务高可用、高性能、高并发
业务应用底座
运行时
集成基础组件SDK
函数粒度发布更快
业务逻辑
9. 美团Serverless前端全景
业务解决方案
中后台系统解决方案
前端服务编排平台
一站式SSR平台
小程序运营配置平台
……
• 提升业务开发效率
• 架构和稳定性保障
FaaS 平台
研发套件
研发框架
管理视图
触发源 HTTP MQ 应用网关 RPC
事件网关 适配器 路由 限流/降级 流量统计
发布工具
WeIDE
基础组件
沙箱
SDK加载器
存储
数据库
Node 函数运行时
实例
中间件
……
Java
函数运行时
运维
10. 目录
• 背景
• 美团 Serverless 前端建设
• 研发套件建设
• 基础组件建设
• FaaS平台建设
• 前端交付实践
• 未来规划
11. 美团Serverless 前端建设:研发套件建设
研发流程中的工具面临重构
开发
不适合、用不了了
调试 构建部署 线上运维
云函数调试 函数粒度的项目部署 运维工具
研发框架
Era
Remo
Nami
开箱即用的框架
Node-server Express
Next.js
Next.js
Koa
公司常⻅研发框架有10+种
12. 美团Serverless 前端建设:研发套件建设
整体方案思路
开发
研发框架集成
沉淀业务实践
通过开放能力集成框架
云端开发体验探索
调试 构建部署 本地调试 部署组件 服务监控 弹性伸缩
远程调试 灰度部署 链路追踪 容灾建设
触发器调试 函数部署 性能诊断 限流降级
提供研发流程中必要工具
线上运维
13. 美团Serverless 前端建设:研发套件建设
通过开放能力集成框架
研发框架
Koa
Express
Era
Nami
……
• 合作共建
• 业务框架遵循规范
规范定义
研发套件
架构规范 部署规范 运维规范
目录规范 构建规范 监控规范
资源托管 发布规范 日志规范
降级规范 变更审批 压力测试
容灾规范 。。。 性能测试
开发
调试
构建部署
线上运行
14. 美团Serverless 前端建设:研发套件建设
云端开发体验 探索在线的开发协作模式
协作效率
在线开发
项目开发
项目调试
在线调试
开发效率
一键初始化
项目创建
提供一致的环境配置
灰度部署
项目部署
独立开发
共享开发环境
项目运维
监控大盘、数据分析
实现开发周期的闭环
实现高效的团队合作
15. 美团Serverless 前端建设:基础组件
存在的痛点
PaaS
图片服务
消息队列
配置管理
…
中间件
任务调度
数据库
存储
MySQL
对象存储
故障演练
传输平台
KV存储
性能诊断
分布式数据
文件存储
…
…
学习和使用成本高,SDK很多、配置零散
运维 原有方式
监控 引入SDK
日志 配置
链路追踪 初始化
变更管理 调试
密钥管理
16. 美团Serverless 前端建设:基础组件
策略:简化组件的使用方法
触发源
消息服务、对象存储、应用网关、定时器
方式一:基于事件模型使用
• 配置启用组件,无需引入SDK
事件网关
函数实例
API方法
FaaS
管理端
17. 美团Serverless 前端建设:基础组件
基于运行时使用
函数实例
方式二:基于运行时使用
• 配置启用组件,无需引入SDK
函数运行时
Function
Function
Function
基础组件SDK加载器:加载基础组件
基础组件依赖
监控 日志 数据库
对象存储 配置管理 分布式缓存
运行时集成基础组件SDK
从上下文中读取基础组件实例
18. 美团Serverless 前端建设:FaaS平台
整体架构设计
运行态
• 如何应对高并发
触发源
• 如何降低机器费用 事件网关
HTTP
适配器
MQ
路由
管理系统
应用网关
限流/降级
RPC
流量统计
• 稳定性保障建设
函数管理
发布管理
场景管理
实例
业务函数
Function
Function
Function
Function
Function
Function
Function
Function
Function
函数沙箱
监控大盘
资源池管理
SDK集成
配置管理
监控
Kubernetes
日志
…
19. 美团Serverless 前端建设:FaaS平台
如何应对高并发
Nginx 网关
• 弹性伸缩
• 支持快速扩容
事件网关
支持快速扩容的关键就是减小冷启动时间
实例 实例 实例 实例 实例 实例 实例 实例
实例 实例 实例 实例 实例 实例 实例 实例
高并发下
20. 美团Serverless 前端建设:FaaS平台
冷启动时间优化
包含美团定制流程
请求触达
容器调度
镜像下载
业务代码
下载
容器启动
函数运行
时启动
代码加载
请求执行
业务代码初始化 20s+
实例初始化 30s+
消除实例初始化时间
减小业务代码体积
大应用拆分、
提供平台依赖、
删除不必要的代码以及
第三方库依赖
实例预热
请求触达
池化资源调度
500ms
业务代码
下载
代码加载
2.1s(2+0.1)
请求执行
请求完成
请求完成
21. 美团Serverless 前端建设:FaaS平台
如何降低机器费用?
Nginx网关
• 单实例多并发
• 减小沙箱配置
事件网关
• 实例缩容为0
• 合并部署
实例 实例
函数沙箱 函数沙箱
函数沙箱 函数沙箱
0.25C0.25G
配置
* C* G配置
22. 美团Serverless 前端建设:FaaS平台
合并部署
实例
实例
沙箱
服务A
沙箱
服务A
实例 实例
沙箱 沙箱
服务A
实例
服务A
沙箱 沙箱
服务A 服务A
沙箱 沙箱
服务A 服务A
单实例内运行
1个沙箱演进到多沙箱
机器需求:2C4G * 4
机器需求:2C4G * 1
23. 美团Serverless 前端建设:FaaS平台
稳定性保障
稳定性建设下沉,使业务专注于解决自身的挑战
24. 美团Serverless 前端建设:FaaS平台
稳定性保障全景图
产品
使用规范
软件研发
软件开发和产品发布
容量规划
变更管控
预案与演练
最佳实践
项目管理
高可用架构
容量评估
弹性伸缩
单元测试
应急响应
可观测性
技术评审
研发流程规范
资源池保障
持续集成
链路容量
质量及运营
事后总结和根因分析
故障识别、⻛险规避
和故障处理
技术指导
服务压测
灰度发布
变更审批
故障复盘
预案建设
预案执行
监控
稳定性保障模型
故障演练
日志
响应机制
性能诊断
故障处理
告警
25. 美团Serverless 前端建设:FaaS平台
高可用架构
Nginx 网关
部署架构
事件网关
• 业务线隔离、地域隔离、多机房部署
通用集群
弹性伸缩
• 定时伸缩、预留实例、提前扩容
容灾降级
北京机房
金融集群
上海机房
北京机房
上海机房
• 业务降级、限流、熔断
上海
北京
函数实例
实例
实例
实例
实例
实例
实例
实例
实例
26. 美团Serverless 前端建设:FaaS平台
示例:SSR场景降级策略
FaaS平台
前端项目
构建产物
业务集群
客户端
请求
响应
Serverless事件网关
Nginx七层网关
主动感知
被动兜底
实例
实例
部署SSR服务
SSR服务
实例
实例
降级
降级
实例
对象存储
部署CSR⻚面
CSR⻚面
27. 美团Serverless 前端建设:FaaS平台
可观测性建设
定位
• 发现问题:服务监控
• 定位问题:服务日志与性能诊断
稳定性
发现
止损
28. 美团Serverless 前端建设:FaaS平台
可观测性:服务监控
系统监控
• CPU、内存、磁盘、网络等
应用监控
• 访问量、QPS、错误数、响应时间
进程监控
• CPU、内存、GC
29. 美团Serverless 前端建设:FaaS平台
可观测性:服务日志
用户端日志
• 全链路日志
函数平台日志
事件网关
App、Web和小程序
函数运行时
• 链路分析
前端日志SDK
服务端日志SDK
日志系统
日志分析
链路拓扑
前端日志系统
全链路日志
服务端日志系统
业务日志
业务函数执行
30. 美团Serverless 前端建设:FaaS平台
可观测性:性能诊断
告警
告警条件
监控平台提供
内存表现异常
性能诊断平台提供
定位性能问题
31. 美团Serverless 前端建设:FaaS平台
灰度发布
策略类型
Serverless事件网关
• 流量百分比
• 自定义条件
header、cookie、query
90%
10%
特性
• 平滑发布
• AB 测试
• 0 秒回滚
原分组
实例
实例
实例
新分组
实例
实例
实例
实例
实例
32. 美团Serverless 前端建设:美团Serverless前端全景
业务解决方案
中后台系统解决方案
助力Web前端服务上云
前端服务编排平台
落地效果
管理视图
• Node服务覆盖度:50%
发布工具
• 研发效率提升: 30%-40%
• 运维成本:业务免运维
WeIDE
• 资源利用率:40%以上
小程序运营配置平台
FaaS 平台
研发套件
研发框架
一站式SSR平台
基础组件
触发源 HTTP MQ 应用网关 RPC
事件网关 适配器 路由 限流/降级 流量统计
实例
函数运行时
中间件
存储
数据库
Function
Function
Function
Function
运维
SDK集成
配置管理
监控
日志
…
33. 目录
• 背景
• 美团 Serverless 前端建设
• 前端交付实践
•
• 案例一:流量波动较大的服务
• 案例二:低频访问SSR⻚面场景
未来规划
34. 前端交付实践:业务案例一
流量波动较大的服务
业务特点
• 平时流量小
• 高峰流量大,QPS 最高/最低差距达 30 倍
• 传统容器部署Node
痛点
• 服务器成本:流量上下波动剧烈,高低峰期间流量相差
大。现有的部署方式只能按最高业务峰值来进行申请,在
流量低谷,大部分机器资源是冗余的,资源利用率低
• 运维成本高:业务研发需要人工运维,机器替换申请等,
影响业务开发效率
• 应急响应不及时:线上出现问题时需要人工干预,处理成
本高、不及时
SSR/API 服务
35. 前端交付实践:业务案例一
低成本迁移
事件网关
事件网关
函数实例
服务器
应用
Web适配器 函数实例 函数实例
函数1 函数运行时 函数运行时 函数运行时
函数2 函数1 函数1 函数2
应用
函数2
传统架构
平滑过渡
过渡阶段
引导升级
Serverless架构
36. 前端交付实践:业务案例一
接入Serverless架构后
带来的改变
• 实例自动伸缩:自动扩容、定时扩容
• 全面的监控:系统、流量、性能数据监控的
一站式解决方案
收益
• 服务器成本降低:资源利用率由10%提升到
35%以上
• 运维成本降低:一站式监控,迁移后零运
维;
• 应急响应:秒级发布、实例异常自动隔离。
系统层面的紧急情况由平台承担。
实例随着QPS增加自动扩容
37. 前端交付实践:业务案例二
低频访问SSR⻚面场景
业务特点
• ⻚面粒度部署
服务A-⻚面1
服务A-⻚面2
服务A-⻚面3
• 日常流量较小
• 流量有波峰波谷
服务A-⻚面4
服务A-⻚面5
函数沙箱
实例 1C1G
多⻚面-单沙箱-单实例
服务A-⻚面6
痛点
• ⻚面间隔离性差
• 发布回滚耦合、时间⻓
38. 前端交付实践:业务案例二
部署架构演进
收益
服务A-⻚面1
服务A-⻚面2
服务A-⻚面3
沙箱 沙箱 沙箱
实例 1C1G 实例 1C1G 实例 1C1G
• ⻚面间隔离性提升
• 发布效率提升
痛点
服务A-⻚面4 服务A-⻚面5 服务A-⻚面6
沙箱 沙箱 沙箱
实例 1C1G 实例 1C1G 实例 1C1G
多⻚面-多沙箱(单实例)
• 资源利用率低,~10%
39. 前端交付实践:业务案例二
部署架构演进
原来
服务A-⻚面1 服务A-⻚面2 服务A-⻚面3
沙箱 沙箱 沙箱
服务A-⻚面4 服务A-⻚面5 服务A-⻚面5
沙箱 沙箱 沙箱
实例 1C1G
多⻚面-多沙箱-单实例
• 发布/回滚时⻓:10分钟
• 隔离性:⻚面间耦合
现在
• 发布时⻓:5s,回滚时⻓:0s
• 隔离性:⻚面间沙箱隔离
40. 前端交付实践:业务案例二
SSR运行时解决方案
• 函数运行时支持插件能力
Vue2
• 业务定制SSR运行时
Vue3
多框架支持
……
MRN
React
沙箱
SSR 运行时
Node.js 函数运行时
• 支持多框架扩展
• 冷启动时间降低
41. 未来规划
65%+ 工具建设
组件集成 函数运维
提升资源利用率 提升研发效率 面对运维挑战
42.
43.