写点什么

阿里巴巴陈武:通过亿级用户 App 的实践验证,锤炼高质量 APM 体系

  • 2016-08-02
  • 本文字数:3524 字

    阅读完需:约 12 分钟

在这个飞速运转的移动 App 时代,有一句格言——快总比慢好。这也使得对移动 App 性能的管理、优化需求变得越来越急切,不可忽视。

2016 年 8 月 18-19 日,由极客邦、InfoQ 和听云联合主办的 APMCon2016 中国应用性能管理大会将在北京举行(现在报名,享8 折优惠),聚焦当前最为关键的移动端、Web 端和Server 端的性能监控和管理技术。本届大会,我们有幸邀请到了阿里巴巴高级无线技术专家陈武(花名:苍井),前来分享《性能可视化实践之路》的内容,向参会者介绍系统化的App 性能度量实践体系,以及百川在APM 领域的开放方案。

而在会前,我们对陈武老师进行了专访,以下是专访文字整理。

InfoQ:您之前在腾讯从事产品开发,后来到阿里做技术研发工作,对技术和产品领域深有经验,能不能谈谈您对技术性产品的理解?

陈武:这个问题需要从三个层面来回答。

产品层面的挑战:在 App 开发领域,产品大部分是面向终端用户,把服务包装成 App,在很多产品场景下,产品经理可以很好的参与产品体验。而在技术产品领域,受众则是广大的开发人员,我们提供的不是一种日常的业务场景,而是某种开发场景,所以想找一个对技术很了解的产品经理是非常难的一件事情,让一个技术很好的开发把产品梳理的很清晰也是一件非常难的事情,所以在整个业界有很多很牛的开源技术,但是真正产品化很好的开源技术却非常少。

技术层面的挑战:在国内 BAT 都做了很多技术开放,包括百川也做了 2 年的技术开放,这些开放产品大部分是 to B 的场景,很多厂商接了你的 SDK,首先考虑的是包的大小,包大小意味着推广成本。其次是运行时对性能的影响,这个直接关系到体验。最后是服务的效率,像阿里的 TAE、百度的 BAE 这种服务,用户基本是把身家性命都挂在你上面了,服务不可用之后能否快速发现并快速解决是至关重要的。

技术选型:大公司技术大部分比较成熟,比如百川的产品大部分都经过手淘、支付宝这种亿级的 App 的实践验证,加上严格的研发测试流程,确保了整体产品稳定性。

InfoQ:能否介绍一下您在淘宝参与过的无线中间件研发,有哪些中间件?是否有开源计划?

陈武:我在淘宝主要参与无线大数据采集系统和研发支撑体系建设,从客户端 SDK 到服务端数据网关都有涉猎,大部分数据产品都带一些业务属性,暂时没有开源计划。

InfoQ:请陈老师简单介绍一下百川技术开放平台的架构是怎么样的?这样的架构有何优点?

陈武:百川技术开放平台主要是给移动开发者赋能的一个平台,百川为开发者提供了快速构建,提升留存,帮助开发者通过电商变现三项能力。技术开放平台是基于 PaaS 的服务,包括一系列的客户端 SDK 和百川产品控制台。开发者可以按照自己的需求选择接入客户端 SDK,比如用户反馈,性能调试,电商变现,掌中测(新产品)等 SDK。百川控制台提供了统一的 PaaS 服务,这样的结构对开发者来说客户端接入是最轻量的,服务也是可定制化的。

InfoQ:我们看到阿里百川为开发者提供了很多创新的工具和服务,如热更新服务,能否简单介绍一下。对于这些工具和技术的服务化过程中有哪些难点?

陈武:热更新服务提供给开发者一种无需发版等待,实时修复应用线上 bug 的方案。通过线上发送补丁的方式,在类加载阶段操作指针进行方法的替换,实现在线 bug 热修复的功能。热更新服务端还提供分应用、分版本发布,提供完善的版本管理服务;多阶段发布,本地测试、灰度测试、全量发布,防止补丁错发误发;

对于这些工具和技术的服务化过程中,难点在于如何将纯粹的技术转化为面向大众开发者的服务化工具,这就要求我们更好地包装技术,提供给开发者更加简易的接入使用方式,更加安全可靠的使用体验,更加贴近开发者的服务化功能。

相较于业界的其他热修复产品,HotFix 对设备的兼容性稳定性更好,HotFix 同时支持 Dalvik 和 ART,兼容极大多数的 2.3.3 到 6.0 的设备。阿里的 Hotfix SDK 无需重启就可以立即生效,对金融类和电商类这种时效性很强的业务无疑是更好的选择。

InfoQ:中间件技术是淘宝的核心技术,能列举一下您的团队现在正在使用的中间件吗?在研发过程中遇到过哪些障碍?解决方案是什么?

陈武:手机淘宝是一个多 bundle 的架构,几乎所有模块都包装成了 SDK,包括业务的 SDK 和基础的 SDK,大家使用比较多的有 accs(网络连接),Agoo(推送),weex(动态化),WindVane(H5 容器)HotFix(热修复)等。阿里在没有做多 bundle 解耦之前模块依赖比较严重,手淘几百个人的团队经常打个包需要好几天时间来处理集成的冲突问题,后面我们做了中间件的隔离,业务之间通过暴露服务来解耦,整体研发效率和代码可维护性都得到了比较好的控制。再加上我们的摩天轮打包平台,把集成、编译、安全、发布做了统一的收口,用系统化的方式保证了快速交付的能力。

InfoQ:在移动性能优化中,一些调试工具如 Instrument 和 mAPM 监控的分工是怎样的?

陈武:Instrument 是一个开发期的调试工具,主要用来客观的定位某台设备的性能瓶颈,其功能要比 mAPM 强大很多,受设备数和生产环境影响,Instrument 很难收集用户复杂使用场景下暴露的性能问题。mAPM 是一套移动 App 的运维监控体系,可以收集运维期的用户性能数据,如 crash、网络失败、卡顿等,mAPM 可以发现一些用户特定使用场景下的性能问题。一般是看开发的生命周期,结合使用。

InfoQ:阿里百川在移动应用性能监控方面能提供哪些能力?

陈武:具体能力如下:

  • 百川 APM 提供移动应用端 + 服务端深度应用性能监控服务,提供精确至代码行的故障定位,是一套非常全面的端到端应用性能解决方案。
  • 移动应用端关注影响用户体验的核心问题:崩溃、ANR、网络请求错误以及响应时间过长等,帮助开发者提升移动应用的用户体验。
  • 服务端关注关键节点的性能情况:数据库操作、NoSQL 操作、API 接口调用等,同时提供性能问题追踪、服务端环境监控、自定义告警等服务。

InfoQ:阿里百川 APM 有哪些性能指标?

陈武:首先,阿里百川 APM 的移动端实现了对崩溃、卡顿以及网络性能的监测。崩溃(以及卡顿)部分会展示异常发生的次数、影响的设备情况、在不同设备和系统中的分布等。同时,还提供详细的错误日志,来帮助用户找到出错的代码行,并进行错误定位。网络部分会对响应时间、错误率、请求量、运营商、网络环境等因素进行统计,多维度展示网络性能情况,同样对于网络错误,也有丰富的日志信息来定位问题。

InfoQ:阿里百川 APM 在性能监控方面,如何做到最小侵入?怎样对性能影响最小?

陈武:这是两个问题,分别回答如下。

接入成本:百川 APM 的 SDK 探针采取 AOP 的编程方式结合 Java ByteCode Instrument 机制,在编译时注入监控代码,以减少开发者的接入成本。另外,我们还通过配置文件进行初始化做到了零代码集成。

性能影响:我们在性能开销上做了很多优化,比如我们的帧率探针,我们会按照用户点击屏幕的频率来动态调整检查的时钟,以保证尽量的减少 CPU 消耗。网络的一些数据我们在客户端采集的时候有一些缓存队列,缓存满了才 commit,在上传数据的时候也做了压缩,减少网络开销。

InfoQ:阿里百川目前使用的数据可视化框架是什么?是自研还是第三方?

陈武:内部有 G2、Data-v、Ant-D,Ant-V 等,业界有 D3,E-Charts。百川按照产品线的业务场景有不同的技术选型。

InfoQ:对于运维领域的数据可视化实现,您认为有哪些难点,如何确保展示真正有用的信息?

陈武:难点有端到端的全链路分析,需要结合业务来跟踪请求数据,要从接入层、到 Web 容器、应用业务中间层、DB 等都打上标记,在数据大盘上清晰的看到一个业务请求经过的路径和耗时,对于慢请求分析,全链路压力测试都有非常直观的帮助。

还有如何统计应用概览数据,数据大盘的概览数据需要非常简洁概要的表现应用的整体情况,这一层的数据是根据各个模块的数据聚合汇总起来,难点在于数据聚合模型的建立和计算空间时间复杂度上的平衡,既要保证数据是准确体现业务运行情况的,又要保证一定的实时性。

InfoQ:在 8 月份的 APMCon2016 大会上,您将现场分享《性能可视化实践之路》内容,具体会讲那些技术点呢?参会者能有哪些受益?

陈武:主要围绕影响用户体验的几个因素,包括耗电,耗流量,卡顿,闪退,网络错误,视觉还原体验等常见的影响留存的 case,探讨研发生命周期中如何做到研发期性能可视化,运维期性能监控告警。带给开发者的是一个系统化的 App 性能度量的实践体系,以及百川在 APM 领域的开放方案。

InfoQ:感谢陈武老师接受我们的专访,期待您在 APMCon2016 大会上的精彩演讲。

关于受访者

陈武,阿里巴巴高级无线技术专家。91 无线最早一批 iOS 开发者,2010 年加入腾讯先后经历手机 QQ、QQ 空间、应用宝等多款产品开发,2013 年进入阿里巴巴,从无线数据采集到性能可视化,再到百川平台,参与阿里多款无线技术中间件产品的研发。

2016-08-02 00:097498
用户头像

发布了 181 篇内容, 共 93.0 次阅读, 收获喜欢 207 次。

关注

评论

发布
暂无评论
发现更多内容

MementoPattern-备忘录模式

梁歪歪 ♚

设计模式

函数

Jason199

js 函数 6月月更

linux之zgrep查找压缩包文件文本

入门小站

Linux

git 高效操作之 range revert

Nick

git git revert 6月月更 range revert 高效操作

后端提升技术资源汇总

卢卡多多

技术栈 资源汇总 6月月更

【技能树共建】Python requests 模块

梦想橡皮擦

6月月更

windows下修改、编译、构建spring-framework4.1.8.RELEASE源码

程序员欣宸

Java SpringFramework 6月月更

Jetpack Composes 学习【02】Text

坚果

6月月更

Node详细讲解

恒山其若陋兮

6月月更

秒懂网络拓扑中的下一跳地址

wljslmz

网络协议 网络工程师 网络技术 6月月更

A Guide to Write Elegant ETL in Easy SQL

Bright

数据开发 ETL 大数据开发 EasySQL

Fabric.js 锁定背景图,不受缩放和拖拽的影响🎃

德育处主任

web前端 canvas FabricJS Fabric.js 6月月更

初识SDN网络

穿过生命散发芬芳

SDN网络 6月月更

企业网站建设方法

源字节1号

软件开发

StatePattern-状态模式

梁歪歪 ♚

设计模式

VistorPattern-访问者模式

梁歪歪 ♚

设计模式

透过华为军团看科技之变(三):数据中心底座

脑极体

鲲鹏DevKit工具基础知识

乌龟哥哥

6月月更

原来Mysql索引要这么设计才能起飞

慕枫技术笔记

MySQL索引 6月月更

SDN系统方法 | 4. 裸金属交换机

俞凡

架构 网络 sdn SDN系统方法

MediatorPattern-中介者模式

梁歪歪 ♚

设计模式

leetcode 79. Word Search 单词搜索

okokabcd

LeetCode 搜索 算法与数据结构

HTML代码清除CSS和JS代码

入门小站

工具

Django API 开发:博客系统接入 API

宇宙之一粟

django API 6月月更

读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》

蔡农曰

读书笔记 架构 后端 后端开发 后端开发书籍

Leecode上的代码到Pycharm运行解决方法

武师叔

Python pycharm Leet Code 6月月更

Java中的13个原子操作类

急需上岸的小谢

6月月更

【愚公系列】2022年06月 二十三种设计模式(二十三)-访问者模式(Vistor Pattern)

愚公搬代码

6月月更

Jetpack Composes 之TextField详解

坚果

6月月更

vue指令-1

小恺

6月月更

mysql基础操作

工程师日月

6月月更

阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系_DevOps & 平台工程_Xue Liang_InfoQ精选文章