App 研发效能提升和性能优化实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 多架构下的移动中台设
计和实践
郭伟
2022.8.17
2.
3. 郭伟
TMF产品技术负责人
经历过华为,腾讯,腾讯9年鹅。
干过后台、客户端、前端技术栈
近年来耕耘在安全、质量和效率相关领域的田野间
4. 目录
移动中台建设背景
移动中台建设思路
移动中台落地实践
总结与展望
5. 01
移动中台建设背景
6. 腾讯内部App生态
娱乐
社交
腾讯
办公
APP数量繁多,业务内卷严重
APP 100+
安全
内部生态
门类内2至4Team并行赛马
公益
...
7. 腾讯内部App生态
App架构
10%-
老年App,历史债务较重的App。多数
在向Hybrid和跨度架构演进
跨端
RN
纯NA
Flutter
Hybrid
小程序
60%+
中青年App,混合H5和小程序的App
20%+
青年App,或明星App的重构版
8. 研发人员困境
研发小哥痛点
因内外业务压力要求尽快推进业务功能研发,但
研发人员能用于开发的时间通常仅有40%~70%
研发小哥
或更少。
痛点来源
1、早期部分团队喜欢只招研发,其他工种工作研发
尽量覆盖,长期形成惯性
2、边界灰色工作或者未赋能出去的工作,最终还是
研发闭环
3、沉淀较少,人工执行工作较多
项目经理:老板说对面已经发布了xx,我们太慢了
客服:某机型用户说某页面打开有时候卡顿,有时候又
好了,怎么回事?
产品:帮忙发布个xx,帮忙统个数据,帮忙分析下xx
测试:大佬帮忙配置个xx环境
9. “杂事”有哪些
10-20%
流程20%~30%
研发流程过深参与,例如提
测、发版等。
20-30% 20-30% 工具10~20% 排障20~30% 踩坑10%~20%
疑难杂症,根据各方反馈的 内部或者第三方SDK,质量
现象,在线或者离线联调。 较低,重复踩坑,接入联调
帮助统计各种临时数据。
10-20%
耗时。
研发小哥:天天打杂,但我想写代码。
质量20~30%
10. 原始的初衷
集合开发流程工具集,建设中台减少杂事,效率质量一起提升
使业务研发回归本位,更多精力专注创造性研发工作
11. 为什么要建设“一个”中台
业务痛点:
1、解决一个业务架构需要一个对应中台,单
团队多架构场景下,需要熟悉并接入多个中
台,跨中台增加业务团队负担
2、App架构升级,例如从NA转向小程序,原
有中台难以支持,可能需要业务团队适配不同
中台。
纯NA Hybrid 跨端
监控&日志 监控&日志 监控&日志
发布 发布&热更 发布&热更
… … …
统一框架组件
各组件抽取各框架公共部分
统一中台
3、不同中台组件级差异,业务可能需要选择 监控&日志 和拉通,甚至需要容忍。 发布&热更 框架差异
… 框架共性
技术架构增加额外认知成本,成为新种类“杂事”
12. 移动开发平台全览:覆盖研发运营全生命周期
运营分析&优化
业务运营
电商/内容/权益
用户/渠道/页面 活跃/流失
A/B Test 智慧投放
能力场景
框架组件
跨端
X5浏览器
移动中台
国密库
离线包
热修复
支付/钱包
权益商城 智能客服
数字人
监控分析
API治理
移动监控
基礎組件
高可用
消息推送
数据同步
移动分析
UI组件
基礎組件
灰度
环境检测
伪基站检测
安全信道
SDK沙箱
组件库
移动推送、投放
移动发布
应用发布
基礎組件
更新
直播/点播
移动网关
小程序容器
安全
业务组件
源码混淆
盗版检测
研发效能
DevOps
代码质量
研发规范
测试
云真机
自动化
功能、性
能、兼容
性
服务
开发支持
质量评估
恶意WiFi
检测
13. 02
移动中台建设思路
14. 研发框架建设思路
通过建设工具,加快环内流转,提升整体效率
监控
分析
研发
质量提升
开发/调试
发布
•
•
•
•
统一ID
质量度量
质量分析
日志
• 统一ID
• 灰度发布
• 热更框架
运营
组件复用
投放
•
•
•
•
研发架构
开箱即用的集成框架
组件库
研发驱动的UI库
• 统一ID
• 标签投放
• 活动/消息投放
• 统一ID
• 埋点上报
• DEM
15. 研发框架图
业务模块/
小程序矩阵
IDE
统一路由
/接口
容器层
首页
财富
LBS
扫一扫
OCR
WK
X5
其他业务条线
直播
其他
网络
RN 容器
安全
其他
小程序
组件库
框架
CI
CD
账户信息
统一ID 容器管理 组件管理 UI组件库 数据存储 OCR IM/会议 回溯
热更新
分布 监控 日志 扫一扫 LBS 人脸核身 直播 虚拟空间
推送/投放 分析 …
其他 分享 键盘 网络 AR 其他
APP Shell
规范
16. 研发框架图
Hybrid 小程序
APP H5 View
业
务
逻
辑
Service
WXML
JS
JS
HTML/CSS
WCSS
Bind Event
小程序 容器
Web View 容器
容
器
(可选)
API库(JS/Flutter)
渲染引擎(JS/Flutter) JS引擎/Flutter Widget
JS Bridge
Method Channel/JS Bridge
Call Native
公
共
组
件
组件库(JS/Flutter)
JS引擎
渲染引擎
WK/X5
Set Data
Native 组件库
Call Native
Native 组件库
JS
Core/X
5
Flutter
17. 为什么先讲质量
痛点:
1、内部生态仍有大量业务没有接入质量组件
2、App使用新架构,原有中台没有对齐的质量组件,新挑战不断
模拟复现法
但是…
先上线,
有问题再说
代码分析法
局部屏蔽法
没日志
用户教不会
难必现
类比法
排除法
二分搜索法
分析日志法
逆向分析法
Hook 说服自己放弃
堆栈分析法 说服别人放弃
大数据分析法
提前崩溃法
18. 质量Step1:度量和SLI设计
业务层
业务埋点数据、自定义日志、染色日志
PV、UV、用户行为、用户事件分析、用户自定义分析
容器层
JS日志
JS Error监控
原生层
堆栈日志、系统信息
CPU、内存、磁盘等监控
分层定义指标,设置告警阈值,输出告警+日志
19. 质量Step2:架构、数据和模型分离
各架构独立日志埋点,分析过程分离数据处理和模型,形成统一告警
各App架构 模型 业务 首屏打开时延 掉帧 Crash
卡顿 内存
泄漏 电量
电量 内存
触顶 JS ERROR
其他 卡顿 其他
日志
系统数据
统一告警
容器
原生
20. 质量Step3:性能优化案例库
优化案例库,梳理框架差异
磁盘 耗电量
内存 流畅度
举
网络
响应时延
例
磁盘
案例x:建表使用autoincrement声明
框架:通用
CPU
原因:Sqlite维护自增长ID需新维护sqlite_sequence内部表,使
框架差异
得插入业务表操作耗时为无autoincrement的两倍
解决方案:非必要,勿使用autoincrement
21. 质量Step4:日志获取
可观测性:监控结果(现象)+日志,回传分析。
App/小程序
自定义上传策略
日志压缩
业务日志
JS日志
日志SDK
网关
日志系统
日志存储系统
日志分析系统
系统日志
22. 质量Step5:日志分析
23. 统一网关需求
支持App框架
支持NA、小程序、
Flutter
接入友好
流量纳管
统一链路
统一SDK路由
指定日志回传
支持发布、投放、推送
安全、信创、国密
优秀的网关对于质量、效率提升明显
性能友好
低延迟
低资源需求
24. 网关性能方案对比
半长连接
网络协议
基于TCP长连接
心跳包保持(可优化)
短连接
基于HTTP的短连接
流量 流量较小 流量较大
弱网 相对较好 相对较差
连接保持较久 连接释放快
连接建立次数少 连接建立次数多
连接保持阶段无需解析 依据本地DNS缓存减小解析数
会话建立少, 会话建立相对较多,
密钥协商次数多 密钥协商次数多
业务场景 全满足 不满足推送
架构 小程序不满足 全满足
后台高可用 实现较难,CAP问题 实现简单,C要求低
连接建立速度
DNS解析
通信安全
C++ VS Java
C++性能提升30%以上
25. 统一网关框架
连接客户端与服务端,简化数据协议和通讯协议,实现前后端分离,提升开发效率和网络通讯效率
日志、指令开关、推送、投放、发布、业务SDK
网络 SDK(RPC)
TCP/ HTTP
基础模块
安全 通道
密钥交换 长连接保持
信息
控制
灰度策略
统一ID
数据加解密
移动网关
控制台
连接管理
•
标签
•
•
•
数据解压缩
路由转发
Profile管理
业务服务
黑白名单
•
API治理
染色日志
指令、开关
推送、投放
发布
26. 热更方案框架
Tinker | DN Flutter | JS Bindle | H5离线包 | 小程序包
架构和框架分离
框架沉淀复用
热更包下发
灰度策略
标签
更新时机
push通知
事件触发
主动拉取
更新机制
下载策略
加载时机
Fall Back
整包升级 网络策略 首次打开 online资源
Diff升级 压缩算法 二次打开 降级
27. 灰度发布
少量用户发布,快速试错,快速获取现网反馈
灰度发布与管理
统一网关
• 自定义标签
• 百分比流量
• 监控分析结果串联
推送时间 每日时间 推送上限
统一ID 自定义ID 地区
产品版本 系统版本 机型
推送频次
网络环境
运营商
30%
10%
灰度用户组1
总用户
灰度用户组N
28. 研发套件痛点
即插即用的工具箱
接入简单
架构统一
业
务
需
求
痛点:业务和生态存在较大Gap
生
态
现
状
找不到想用且能用的SDK
SDK对接方法各异
架构多种多样
平台建设统一工具箱
即插即用 接入简单 架构统一 SDK难找 对接方案各异 架构异构
组件化 引入方法简单 各平台功能统一 零散分布各处 引入难度不一 各平台功能不一
获取方法简单 部署方法统一 获取方法统一 可能获取不到 部署方法不一 获取方法差异大
文档清晰 SDK管理简单 接口风格统一 文档找不到 SDK管理不一 接口风格差异大
29. IDE开发工具链
调试
开发
本地联调,如热更新调试 项目脚手架
跨端调试 SDK、文档快速获取
自测体验
提测
自动化部署 代码扫描、自动化测试
体验App分发 发起提测流水线
30. 客户端组件框架
•
•
能力SDK统一封装,形成统一调用接口,增加复用,减少开发量
网络链接统一纳管,通信安全统一处理
TMF组件化开发框架
宿主层
APP 01
3 网络架构统一:SDK后台统一接口网关
APP 02
APP 03
APP 04
......
SDK B
SDK A
TCP
业务层
业务模块 A
业务模块 B
业务模块 C
......
1 封装基础功能模块
TMF移动
开发套件
框架层
统一网关
移动网关 OCR 会议 反欺诈
LBS 人脸核身 TRTC 回溯
扫码识别 ASR 直播 国密套件
图片压缩 TTS 远程展业 ......
注解 注解处理器 TMF Core ServiceManager
HTTP
后台 A
后台 B
2 接口统一:NA接口和JS/小程序接口分别统一
31. 统一接口规范
NA调用:
容器
scheme://module/method/params
Webview
小程序容器
fw.get(Iclass).Imethod()
fw.startUri(Uri)
接口映射
路由映射
数据段
初始化绑定
编译绑定
API Class
IMPL Class
API Class
数据段
初始化绑定
编译绑定
Router
IMPL Class
Page
Router
Page
H5/小程序调用:
scheme.method(params) 或
Scheme.module.method(params)
32. 组件运行时共享
APP1(先安装)
APPN (后安装)
SDK1 SDKN
Interface.jar Interface.jar
Download
临时用APP1本地兜底方案
CDN
SDK1 SDKN
Interface.jar Interface.jar
Share
SDKN
Interface.jar
33. 03
移动中台落地实践
34. 落地案例—提升原产品性能 助力交行全新升级
• 背景:近几年互联网金融的蓬勃发展让手机银行的体验逐渐成为银行间的较量点。
• 需求:行方高层提出了三点要求
一、用户体验提升,页面秒开
二、问题压缩,崩溃率下降到行业平均水平之下
三、行业权威测评排名进前三
【交通银行全新升级手机银行】落地效果及价值
迭代周期从月级下降至周级
快速转型,能力迁移
崩溃率下降一个数量级(x%->1‰)
TMF组件丰富
接入方便
极大加快了产品上线进度
From 交通银行北京研发中心
35. 落地案例—关键举措
架 构 质 量 Hybrid 度量监控 多团队开发
业务解耦 X5内核 组件复用
网关入口统一 FPS优化、性能优化 持续集成
TCP链路改造 灰度测试/云真机 灰度发布
效率
36. 04
总结与展望
37. 总结:质量和效率工具 覆盖研发运营全生命周期
运营分析&优化
业务运营
电商/内容/权益
用户/渠道/页面 活跃/流失
A/B Test 智慧投放
能力场景
安全
直播/点播 支付/钱包
权益商城 智能客服
数字人
环境检测
伪基站检测
框架组件
跨端
X5浏览器
监控分析
移动网关
小程序容器
国密库
API治理
移动监控
基礎組件
高可用
移动分析
安全信道
SDK沙箱
移动中台
应用发布
基礎組件
更新
离线包
热修复
组件库
移动推送、投放
移动发布
消息推送
数据同步
UI组件
基礎組件
灰度
业务组件
源码混淆
盗版检测
研发效能
DevOps
代码质量
研发规范
测试
云真机
自动化
功能、性
能、兼容
性
服务
开发支持
质量评估
恶意WiFi
检测
38. 展望
架构 质量 效率
小程序+flutter架构的更多探索 更细粒度的覆盖 更多效率组件
深入组件质量 提升UI组件复用自动化
3
8
39. 代码驱动的设计
Code2Design2Code,通过UI组件库渲染设计素材库,设计人员基于基础素材库输出更多模版库
设计人员
设计素材库
开发小哥
库(细)
组件库(细)
1 C2D
模版
App集成
低码平台
或App集成
组件库(细)
设计素材库
小程序
H5离线包
库(细)
2 D2C
投放
发布
40. SDK质量监控
图片宽度 62cm
统一描述(Yaml)、统一组件上架标准、统一质量度量和SLI
告警
报表
3、告警,数据展示
1、上架
组件库
新接入标准
Component.yaml
组件框架
Kit
2、Metrics
SLI注册
质量监控
日志上报
日志分析
41.
42. 感谢聆听
相关议题继续畅谈