InfoQ|日活超过 3 亿的快手是怎么进行性能优化的?


采访嘉宾 | 杨凯
作者 | 冉叶兰
在移动互联网时代 , 由于设备资源受限、网络不稳定等因素 , Web 端和移动端的性能优化显得尤为重要 , 如果性能不好 , 用户就容易流失 , ToC 的产品尤为明显 , 体验差的产品必然会被市场淘汰 。 如何做好性能优化是每个企业都会关注的 。
在将于 11 月 24-25 日举办的 GMTC 全球大前端技术大会上 , 快手性能优化负责人杨凯将会分享《快手 APM 平台建设与性能优化》 。 他表示 , “随着快手 App 功能越来越多 , App 的性能也面临着严峻的挑战 , 诸如 App 越来越卡、内存占用越来越大、包大小不断增加等各类问题都严重影响着用户体验” 。 InfoQ 在会前采访了杨老师 , 我们一起来看看快手是如何应对性能挑战的 。
InfoQ:快手 APM 指标监控平台的建设背景是什么?目前发展现状如何?
杨凯:APM 是我们针对快手的性能检测做的一个监控平台 , 其建立背景主要有两方面 , 一方面有很多用户反馈在使用我们的 App 时 , 遇到过卡、闪退和发热等问题;另一方面 , 我们从现有数据分析得出结论:性能对于用户活跃度有着重要影响 。
目前 , 我们已经基本完成了崩溃、内存溢出(OOM)、应用无响应(ANR)、卡顿、启动、帧率(FPS)、包大小的线上、线下监控 , 电量、流量等监控正在开发中 。 线上的话 , 我们有天级、小时级的监控 , 并且重点指标有完善的报警机制 。 对于包大小、启动等 , 我们建立了一套实验室环境 , 可以监控到每个 mr(Merge request ) 导致的变化 , 以及日常迭代劣化 。
APM 主要解决我们面临的各种稳定性和性能问题 。 效果非常明显:
优化了 40% 的启动速度 , 提升了我们的 0 播、留存等关键产品数据 。
优化了 23M 包大小 , 大大降低了我们新用户获取成本 。
两个优化 , 都获得了快手技术线的绩效提升奖 。
InfoQ|日活超过 3 亿的快手是怎么进行性能优化的?
本文插图

InfoQ:你们在搭建指标监控过程中遇到哪些难点?是怎么解决的呢?
杨凯:APM 可以做的事情很多 , 容易铺得很广 , 但每一点都做不透 。 另一方面 , 虽然大家都觉得性能重要 , 但如果没有数据的支撑 , 也容易陷入到处救火而看不到成绩得窘境 。 所以我们一方面参考业内经验、根据数据分析得出重要程度 , 评估每个方向的优先级 , 各个击破 , 抓住重点 , 力求每一点都做到极致 , 并且能从用户数据上得到充分的体现 。
我们是一个音视频软件 , 所以对内存的使用 , 尤其是 C++ 申请的内存会比较多 。 内存泄露 , OOM、地址空间不足等问题非常突出 。 业内现有方案对我们来说并不完全适用 , 需要我们根据自己的实际情况 , 开发监控、解决问题 。 业内有比较成熟的 malloc hook 方案监控 C++ 内存的申请、释放 , 但我们还需要知道哪些内存不可达 , 哪些大块内存被长时间持有 , 才能更好地解决我们的问题 。
另外 , 我们在线上发现的性能问题 , 通常不是我们性能组能独立解决的 , 需要推动各业务方配合解决 。 这些工作会给大家日常的开发工作带来额外的负担 , 但它又对我们产品体验有很重要的影响 。 所以我们一方面尽量完善工具 , 上报更多更全的数据 , 另一方面我们要将大家作为一个整体团队 , 享受项目的成果 。
InfoQ:内存优化过程中遇到的问题是如何解决的?
杨凯:我们有一套自己的方法论 , 即定义问题、分析问题、解决问题、验收以及防劣化 。
定义问题:在最开始阶段 , 先将问题量化 , 例如用户卡 , 就需要定义什么叫卡 , 怎么监控用户卡?
分析问题:我们会在收集到足够的用户数据后 , 分析用户实际的问题场景、原因 。
解决问题:很多问题 , 并不是性能组可以解决的 , 但是我们可以提供工具定位、发现问题 , 推动相关开发人员解决 。


推荐阅读