议题十四 微博信息流性能优化历程 微博张善禄

Razor

2018/11/20 发布于 技术 分类

文字内容
1. 大会视频回放链接:http://www.itdks.com/eventlist/detail/2823
2. 微博信息流优化 新浪微博 张善禄
3. 信息流优化 • 流服务 • 信息流性能优化 • 性能监控系统
4. 信息流 问题: • 业务与信息流紧耦合 • 维护成本越来越⼤大 ⽬目标: • 实现业务插件化 • ⽀支持微博其他⻚页⾯面快速开发 重构之前 视频 故事 ⽂文章 … 信 息 流 信息流 基 础 服 Http 线程池 ⽇日志系统 … 务
5. 流服务⽅方案 需求: • 展示内容 • 处理理业务逻辑 • 同其他模块交互 业务模型 Adapter Modify DataChanged ViewModel Action ActionExecutor BindView ClickEvent View
6. 流服务⽅方案 ⽬目标: • 框架保证业务隔离 • 易易扩展 插件化接⼝口 流服务 ViewFactory ViewModelFactory ActionExecutor Category
7. 流服务⽅方案 需求: • Factory相互独⽴立 • 框架⾃自动合并Factory Factory1 Factory2 Factory3 type 0 type 1 type 2 type 0 type 1 type 2 type 0 type 1 type 2 Factory合并 type 0 type 1 type 2 type 3 type 4 type 5 type 6 type 7 type 8 FactoryGroup
8. 流服务⽅方案 • 流服务提供流式⻚页⾯面的机制,不不处理理任何业务逻辑 • 信息流的业务和别的业务⽅方⼀一样,作为流服务的⼀一个插件实现 业 务 信息流 视频 ⽂文章 … 流 服 务 流服务 基 础 服 Http 线程池 ⽇日志系统 … 务 插 ViewFactory ViewModelFactory 件 接 ActionExecutor LifecycleListener ⼝口 流 Presenter ViewModel 服 务 EventRouter FactoryGroup 核 ⼼心 StreamContext
9. 信息流性能优化
10. 微博View的结构 头部 ⽂文字 Card-视频 标签 底部按钮
11. 微博View的结构 问题: • View层级深 • Measure/Layout性能差 • BindView开销⼤大 • 动态View创建问题 头部 ⽂文字 转发微博 图⽚片 Card区 商品 标签 … 底部按钮 头部 转 发 ⽂文字 微 图⽚片 博 … 视频 Card 直播 区 域 ⼤大图 ⽂文章 …
12. 微博View的拆分⽅方案 问题: • 微博背景 • 微博点击/⻓长按事件 ViewModel ⼦子ViewModel ⼦子ViewModel ⼦子ViewModel ViewModel ⼦子ViewModel ⼦子ViewModel ItemView ItemView ItemView ItemView ListView
13. VirtualView ViewModel 流服务 使⽤用VirtualView⾃自动处理理微博的背景/点击/⻓长按等 ⼦子ViewModel ItemView ⼦子ViewModel ⼦子ViewModel ⼦子ViewModel ItemView ItemView Virtual View ⼦子ViewModel ItemView ViewModel Virtual View RecyclerView Virtual View ItemDecoration TouchListener
14. 预加载业务逻辑 Data Create ViewModel Preload ViewModel post Render Adapter View ⼦子线程 主线程
15. 预加载View Data Create VieVwiMewodel Preload View ⼦子线程 ViewFactory create View ViewCache 主线程
16. 成果 测试机 :Mi 5s 系统版本:6.0.1 测试⽅方式:⾃自动化测试 测试时⻓长:30分钟 对标版本:810 & 8102 120 卡顿数量量 90 60 30 0 810 8102 卡顿数量量 : 测试期间产⽣生的卡顿,越少越好 FPS低位数:FPS数据排序后5%位置上的数,越⾼高越好 59 FPS低位数 58 57 56 55 810 8102
17. 性能监控系统
18. 性能监控 卡顿 ? 性能问题: • IO • CPU密集型操作 • 渲染流程 • 锁争抢 • 线程数过多 性能问题特点: • 不不易易复现 • 普通打点效率低,作⽤用⼩小 性能优化 如何发现性能问题 如何评价性能优化效果
19. 性能监控 微博 Feed Pagecard … Video 微博业务 性能⾃自动化 测试 ⾃自动化测试 解析 配置 线程池 Log http 缓存 微博基础服务 监控SDK BlockMonitor FpsMonitor CpuMonitor MemMonitor MemoryInfo Choreographer Looper Framework /proc/stat /proc/[pid]/stat Linux 监控SDK • 模块化 • 性能⾼高 • 易易接⼊入 ⻚页⾯面信息 上传数据 监控扩展模块 扩展 ⽩白名单 监控配置窗⼝口 实时性能数据查看 MonitorCenter API Block FPS CPU Mem Listener MonitorData 基础 Looper.Printer CpuReader 对象池 Choreographer.Callback MemoryInfo 线程管理理 ⽇日志
20. 性能监控 开发全链路路性能监控系统 需求确定 开发 提交代码 alpha阶段 线上 开发阶段, 实时查看性 能状态 性能测试bot 阻⽌止有性能问 题的代码合版 产⽣生性能报告 对新版本性能 进⾏行行评估并预 警 上传线上⽤用户 的性能⽇日志, 性能问题预警 机制
21. 谢谢!