10.稳定性优化
1
2
3
4
5
//稳定性优化
1.统一编码规范、增强编码功底、技术评审
2.架构优化:统一容错,功能模块解耦
3.回归测试,压力测试,兼容性测试,
4.容灾方案:热更新(bugly),功能开关,崩溃后自启等

一、如何提升App的稳定性

正确认识

1
2
1.稳定性是大问题,Crash是PO优先级
2.稳定性可优化的面很广

稳定性纬度

1
2
3
1.Crash纬度
2.性能纬度
3.业务高可用纬度

稳定性优化概述

1
2
3
1.重在预防、监控必不可少
2.思考更深一层、重视隐含信息
3.长效保持需要科学流程

二、高Crash率的破解之道

Crash相关指标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.UV、PV Crash率(uv主要针对用户使用量,用户使用崩溃率,pv是用户使用的频率,用户使用崩溃的频率)
- UV Crash率= Crash UV/DAU
- UV 方便评估用户影响范围,结合 PV
- 注意:沿用同一种衡量方式
2.Java、Native Crash率
3.启动、重点流程Crash率
4.增量、存量Crash率
5.启动Crash率(启动时崩溃)
- 影响最严重的Crash
- 结合客户端容灾
6.增量、存量Crash率(增量指新增的crash,存量指以前老版本就存在的crash)
- 增量Crash是新版本重点
- 存量Crash是持续啃的硬骨头
- 优先解决增量、持续跟进存量
7.Crash率评价
- 务必在千分之二以下
- Crash率万分位优秀

Crash关键问题

1
2
3
4
5
6
7
8
9
10
11
12
尽可能还原Crash现场
- 堆栈、设备、OS版本、进程、线程名、Logcat
- 前后台、使用时长、App版本、小版本、渠道
- CPU架构、内存信息、线程数、资源包信息、行为日志
APM后台聚合展示
- Crash现场信息
- Crash Top机型、OS版本、分布版本、区域
- Crash起始版本、上报趋势、是否新增、持续、量级
责任归属
- 专项小组轮值
- 自动匹配分配
- 处理流程全记录

整体结构

1
2
3
4
1.采集层:错误堆栈、设备信息、行为日志、其它信息
2.处理层:数据清洗、数据聚合、纬度分类、趋势对比
3.展示层:数据还原、纬度信息、起始版本、其它信息
4.报警层:环比、同比、邮件、IM、电话

单个Crash处理方案

1
2
3
1.根据堆栈及现场信息找答案
2.找共性:机型、OS、实验开关、资源包
3.线下复现、远程调试

Crash率治理方案

1
2
3
1.解决线上常规Crash
2.系统级Crash尝试Hook绕过
3.疑难Crash重点突破、更换方案

三、移动端业务高可用方案建设

业务高可用重要性

1
2
3
1.高可用:性能+业务
2.业务高可用侧重于用户功能完整可用
3.业务高可用真实的影响收入

业务高可用方案建设

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
数据采集
- 梳理项目主流程、核心路径、关键节点
- Aop自动采集、统一上报
报警策略
- 闽值报警
- 趋势报警
- 特定指标报警、直接上报
异常监控
- Catch代码块
- 异常逻辑
单点追查
- 需要针对性分析的特定问题
- 全量日志回捞,专项分析
兜底策略
- 配置中心,功能开关
- 跳转分发中心

四、移动端容灾方案

移动端容灾必要性

1
2
灾:性能、业务异常
传统流程:用户反馈、重新打包、渠道更新,不可接受

容灾方案建设

1
2
3
4
5
6
7
8
9
10
11
12
13
14
功能开关
- 配置中心,服务端下发配置控制
- 针对场景:功能新加或代码改动
统跳中心
- 界面切换通过路由,路由决定是否重定向
- eg:Native Bug不能热修则跳转到临时H5
动态化修复
- 热修复能力,可监控、灰度、回滚、清除
- 推拉结合、多场景调用保证到达率
- Weex、RN增量更新
安全模式
- 根据Crash信息自动恢复,多次启动失败重置App
- 严重Bug可阻塞性热修
- 异常熔断:多次请求失败则主动拒绝

容灾方案集合

1
功能开关->统跳中心->动态修复->安全模式

五、稳定性长效治理

全流程Crash长效治理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
开发阶段
- 统一编码规范、增强编码功底、技术评审、CodeReview机制
- 架构优化:能力收敛、统一容错
测试阶段
- 功能测试、自动化测试、 回归测试、覆盖安装
- 特殊场景、机型等边界测试
- 云测平台
合码阶段
- 编译检测、静态扫描
- 预编译流程、主流程自动回归
发布阶段
- 多轮灰度
- 分场景、纬度全面覆盖
运维阶段
- 灵敏监控
- 回滚、降级策略
- 热修、容灾方案

六、问题

你们做了哪些稳定性方面的优化

1
2
3
1.Crash专项优化
2.性能稳定性优化
3.业务稳定性优化

性能稳定性是怎么做的?

1
2
3
1.线下发现问题、优化为主
2.线上监控为主
3.Crash专项

业务稳定性如何保障 ?

1
2
1.数据采集+报警
2.异常监控 + 单点追查

如果发生了异常情况,怎么快速止损?

1
2
3
1.能力:功能开关、统跳中心
2.动态修复:热修、资源包更新
3.自主修复:安全模式