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. 感谢聆听 相关议题继续畅谈

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-13 17:59
浙ICP备14020137号-1 $Map of visitor$