写点什么

阿里巴巴陈武:通过亿级用户 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:097568
用户头像

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

关注

评论

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

往日之歌

彭宏豪95

首厚智能:嵌入 SpreadJS 表格组件,搭建实验室信息管理系统(LIMS)

葡萄城技术团队

SpreadJS 实验室管理系统 Lims

python实现·十大排序算法之冒泡排序(Bubble Sort)

南风以南

Python 排序算法 冒泡排序

5天掌握以太坊 dApp 开发

陈东泽 EuryChen

比特币 区块链 智能合约 以太坊 dapp

一文搞懂Spring依赖注入

麦洛

《3个月9门课,谈下我的极客时间学习活动的心得》

王伟鹏

分布式系统选主怎么玩

奈学教育

分布式系统

教你快速升职加薪(毒鸡汤,慎服……)

Geek_6rptuk

团队管理 企业文化 个人成长 团队建设

为什么要云原生?

Aaron_涛

架构 云原生

SaaS生态比拼,谁会是这场PK中的主角?

人称T客

Java开发架构篇:DDD模型领域层决策规则树服务设计

小傅哥

领域驱动设计 DDD 小傅哥 重构

程序员的修行之路-人生是一场修行

牧马人

程序员

3亿办公族合力,第三代SaaS抵达战场

人称T客

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单!

江南一点雨

Java spring Spring Boot spring security

BPM产业数字观察:中国市场趋向成熟,蛰伏的BPM即将醒来

人称T客

Spring Security 如何将用户数据存入数据库?

江南一点雨

Java spring Spring Cloud Spring Boot spring security

Linux 常用命令

Jayli

Linux

金蝶2019财报在此——比头条更精彩

人称T客

忙于数字化转型,你避坑了吗?

人称T客

kube-prometheus抓取jvm监控指标

天飞

Java JVM Prometheus kubernete

汇总一下Intellij IDEA常用的牛逼插件

公众号:V5codings

一个产品最不重要的东西

Neco.W

产品 外包 产品经理

游戏夜读 | 写游戏用什么语言?

game1night

市场调研分析师走向末法时代

人称T客

用友2019财报:你们看到的是数字,我却看到了office

人称T客

极客时间学习心得:用分类和聚焦全面夯实技术认知

Anfernee Hu

学习

用Serverlss部署一个基于深度学习的古诗词生成API

刘宇

自然语言处理 学习 Serverless

Java 25周年:MovedByJava之观点

X.F

Java 架构 编程语言

一个前端工程师与死神的较量

陈辰

大前端 压力 医院 生活质量 工程师

程序员的修行之路-培养工作兴趣

牧马人

程序员

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