蚂蚁前端灰度监控与变更防御
如果无法正常显示,请先停止浏览器的去广告插件。
1. 前端灰度监控与变更防御
饶海(陆沉)
前端工程师@蚂蚁集团
2. • Content Title 2
• Content Title 3
• Content Title 4
• Content Title 5
• Content Title 6
3. 饶海(陆沉) 支付宝 - 体验技术部 - 前端基础平台
雨燕架构师
雨燕前端监控负责人
React / Data Visualization / DevOps
“每样都懂一点点”
https://github.com/raohai
4. 大纲
• 背景介绍
• 监控覆盖率提升
• 灰度发布与前端灰度监控
• 基于灰度监控的变更防御
• 总结与展望
你可以:
✅ 了解蚂蚁前端监控在安全生产下遇到的问题和挑战
✅ 了解建设前端灰度监控的思路
✅ 了解研发平台建立变更防御的思路和方法
✅ 了解实施前端变更防御会面临哪些问题、如何应对
5. 安全生产背景下的挑战
核心问题
策略
解决方案
推进监控覆盖率
监控发现率低 建设场景 - 模板体系
监控覆盖率低、 很多应用没有
监控或者监控配置不对 增加监控覆盖率
监控能力建设
建设前端灰度监控体系
变更型故障多
灰度过程可监控
变更故障占比 77%
推进监控与
研发平台融合
平台安全生产体系弱
灰度过程问题可发现
没有形成交付保障机制 建设基于灰度监控的变更
防御体系
平台和监控结合不足 建立应用交付保障体系
6. 安全生产背景下的挑战
问题互相交织,解决只能一步步来
3
建设基于灰度监控的
变更防御体系
2
建立应用交付保障体系
建设前端灰度监控体系
1
推进监控覆盖率
建设场景 - 模板体系
增加监控覆盖率
灰度过程可监控
灰度过程问题可发现
7. 大纲
• 背景介绍
• 监控覆盖率提升
• 灰度发布与前端灰度监控
• 基于灰度监控的变更防御
• 总结与展望
8. 监控模板 - 解决温饱问题
实现监控的传统路径
• 监控提供埋点 SDK / 探针,用户手动接入
• 自动采集 / 手动上报
• 手动配置监控
问题是什么
开发者
平台 / 架构
• 接入烦琐、不会配置
• 相同场景重复劳动
• 采集到的指标有限
• 维度、指标无法规范统一
• 框架维护者、架构师介入程度低
9. 监控模板 - 解决温饱问题
破局:场景 - 模板体系
• 相同场景的应用有通用的监控项
• 按场景梳理通用监控项、配置为模板
• 打通框架上报、容器数据。开箱即用
• 模板 - 监控一秒更新
业务自定义
架构师定义
业务自定义 业务监控项 业务上报
运行时异常 JS Error 捕获上报
框架捕获异常 Worker Error
Runtime Error 框架上报
容器捕获异常 白屏 / 闪退 容器上报
10. 监控模板 - 解决温饱问题
5
大监控场景
小程序、 H5 离线包、H5 在线、PC、 PC 微前端
场景
97%
监控覆盖率
高可用等级 H1、H2 应用
监控模板
业务自定义
脚本捕获
框架捕获异常 容器捕获异常
✅ ✅
小程序 ✅ H5 在线 ✅ ✅ ✅ ✅
H5 离线 ✅ ✅ ✅ ✅
PC ✅ ✅ ✅ PC 微前端 ✅ ✅ ✅
11. 监控模板 - 解决温饱问题
12. 大纲
• 背景介绍
• 监控覆盖率提升
• 灰度发布与前端灰度监控
• 基于灰度监控的变更防御
• 总结与展望
13. 蓝绿发布 / 灰度发布
线上版本
线上版本
90% 流量
负载均衡
线上版本
逐步扩大
新版本
蓝绿发布
新版本
10% 流量
灰度发布
14. 灰度发布生效原理
访问
支付宝客户端
拉包
灰度决策
用户
拉包
白名单灰
地域灰度
进入灰度
进入生产
验证
前置条件
灰度 5%
推送
灰度 10%
灰度 50%
生产
推送
CDN
15. 灰度发布 - 遇到什么问题
开发者
没有发布安全感
变更相关故障占比高
平台 / 架构
•
可灰度、可监控、可回滚机制不完善
变更过程可监控性不满足需求
• 监控无法感知灰度过程
• 线上和灰度数据混在一起
• 不知道发布过程中发生了什么
• 不知道对比线上情况如何
想象中的指标变化情况
实际的指标变化情况
16. 建立前端灰度监控体系
使用迭代标识区分监控
迭代标识
使用
自动注入
上报
迭代标识
迭代标识
初始化监控
17. 建立前端灰度监控体系
以迭代标识为顶级维度清洗数据
业务监控项
90% 流量
运行时异常
线上版本
框架捕获异常
线上版本数据
新版本数据
另一个新版本数据
容器捕获异常
业务监控项
10% 流量
新版本
运行时异常
框架捕获异常
容器捕获异常
GROUP BY
迭代标识
18. 建立前端灰度监控体系
• 0 配置。开箱即用的前端灰度监控
• 迭代信息关联 / 版本覆盖率 / 基线对比
• 精准区分此次迭代引起的数据变化
• 迭代新增异常
第 9 ⻚
19. 建立前端灰度监控体系
第 9 ⻚
20. 大纲
• 背景介绍
• 监控覆盖率提升
• 灰度发布与前端灰度监控
• 基于灰度监控的变更防御
• 总结与展望
21. 基于灰度监控的变更防御
平台安全生产体系弱
没有平台机制保障交付
安全生产没有切入点
• “充分灰度” 、“看监控” 全凭用户自觉 • 安全生产经验没有复用机制
• 出现问题时没有机制阻止影响面扩大 • 各职能团队没有途径参与安全生产保障
• 经验口口相传
故障案例:
以去年的某起故障为例:
• 发布的灰度时⻓仅 30 分钟,在半夜流量不够的情况下未发现问题
• 在监控上发现了异常。但因为没有配置报警,未能及时发现问题止血
22. 分批灰度和变更防御流程
配置灰度批次
开发者
灰度 5%
重新检测
进入灰度
中止发布
验证前置条件
验证失败
开始阶梯灰度
灰度 10%
推送灰度策略
…
重新检测
灰度 50%
全量
验证成功 / 扩大灰度
灰度
后置验证
验证失败
验证成功 / 完成发布
23. 灰度后置验证
灰度
后置验证
?
进行哪些验证 ?
验证哪些指标 ?
这些验证是如何保障灰度发布的 ?
24. 背景 / 挑战 - 策略 / 解法 - 结果
基于灰度监控的变更防御
变更防御规则
专家模型规则
平台希望用户关心什么
•
•
•
•
灰度有没有充分
变更防御规则
灰度版本实际有流量
灰度引流符合预期
流量
规则说明
当前版本有真实流量进入
当前版本的流量占比符合预期
我有没有把应用 / ⻚面 / 小程序搞挂
有没有引入新的异常
异常相比线上有没有变多了
变更防御规则 指标
白屏闪退率阈值 白屏 / 闪退
变更引入新异常 新增异常
异常率
变更使异常相较基线增加
业务关心什么
•
指标
重要业务指标有没有变遭
规则说明
当前版本的白屏闪退率有没有超标
当前版本有没有新增异常
当前版本的异常基线占比有没有变化
业务规则
变更防御规则 指标
业务自定义规则 业务指标
规则说明
业务指标符合预期
25. 基于灰度监控的变更防御 - 两种拦截类型
一旦出现,则立刻拦截
•
•
在变更防御执行过程中,一旦发现指标满足
某些要求,则立刻触发拦截
白屏、闪退、新增异常等属于此类型
默认拦截,直到满足条件再放行
•
•
在变更防御执行过程中,默认不通过。直到
指标满足要求
流量、灰度覆盖率属于此类型
26. 基于灰度监控的变更防御
充分灰度是一切的前提
• 当前灰度的迭代标识必须有真实流量进入 (不解释……)
• 当前灰度的迭代标识流入的流量必须接近灰度引流百分比
•
(例如设置了 5% 灰度),则流入当前迭代标识的流量必须接近全量的 5%
27. 基于灰度监控的变更防御
新增异常拦截
•
对于每一个异常建模,记录首次出现时间、首次出现迭代
hash: 4cd2fcdbaf95dd0c94b387816188e3ac
首次出现时间: 2021-05-21
首次出现迭代: 0.2.2105201954.59
• 在灰度过程中如果捕获到错误,且错误首次出现的迭代标识是当前正在灰度的迭代标识
• 一定程度上说明当前变更引入了新的异常。此时拦截
28. 基于灰度监控的变更防御
异常率拦截
• 异常率 = 每分钟异常发生次数 / 流量
• 基线异常率 = 全部异常发生次数 / 全部流量
/
•
= 2.8 %
灰度异常率 = 灰度版本的异常发生次数 / 灰度版本流量
/
•
可以发现,当前灰度版本的异常率显著高于基线,因此触发拦截。
= 14 %
29. 基于灰度监控的变更防御
雨燕⻔禁
雨燕监控
⻔禁项
自动化测试
雨
燕
元
信
息
…
监控
规则
匹配
卡口
代码
提交
迭代
推进
灰度
防御
后置
校验
能力执行
监控防御规则
监控模板
流量
充分灰度
结果回调
异常
新增异常
白屏闪退
雨燕标准研发模型
线上
数据
白屏
雨燕统一调度系统
雨燕数据资产
自定义
监控
灰度
数据
容器
数据
拦截
结论
30. 完整的灰度发布与变更防御流程
31. 完整的灰度发布与变更防御流程
32. 大纲
• 背景介绍
• 监控覆盖率提升
• 灰度发布与前端灰度监控
• 基于灰度监控的变更防御
• 总结与展望
33. 总结与展望
变更防御 = 研发流程 X 监控 X 数据
• 灰度监控与变更防御:给用户发布安全感
• 前端监控和数据要结合研发平台才能发挥更大价值
• 后续会支持用户配置自定义的监控防御规则、组合防御规则等
• 把当前基于规则的变更防御升级成智能变更防御规则
提供开箱即用的监控和防御,而不是让用户自己实现
• 技术普惠
• 使用平台机制保障安全生产
• 让各职能团队有途径参与安全生产
34. AFI.team
35.