支付宝客户端架构分析:自动化日志收集及分析

小蚂蚁说:

《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”、“网络优化”、“性能启动优化”、“自动化日志收集”、“RPC 组件设计”、“移动应用监控、诊断、定位”等具体实现,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。

本节将结合禾兮在 OSChina 珠海站现场的分享《移动端分析方案在蚂蚁金服 mPaaS 中的实践》,介绍支付宝客户端自动化日志收集与分析的具体思路。内容将分成三个部分展开:

  • 支付宝客户端分析方案的探索;
  • MAS 移动分析框架浅析;
  • mPaaS 技术架构与助力。

支付宝客户端分析方案的探索

正如我们在《开篇 | 模块化与解耦式开发在蚂蚁金服 mPaaS 深度实践探讨》已经对支付宝的架构演变与开发团队规模发展做过介绍:

截止目前,在研发上面,支付宝仅 Android、iOS 客户端开发人员近千人,客户端代码行数超过了数百万行,按业务划分的工程数也已近千个,每个工程都有独立的开发 owner 负责某一个具体的模块。虽然工程师团队及工程量越发庞大,支付宝依旧能够做到日发布的频率以确保业务快速迭代,同时在业务功能日益复杂的环境,保证 App 闪退率仅 0.01%。

那么,在如此大体量的用户规模和研发团队下,支付宝又是如何确保用户使用过程中的用户体验呢?我们主要从以下两个维度衡量客户端用户体验:

  • 静态:指应用开发过程中,关注 App 本身的安装包大小、存储、涉及到的用户隐私权限、安全策略等,决定用户是否愿意安装并使用你的应用。
  • 动态:指应用发布上线后,用户在使用过程中,App 的启动速度,闪退、卡死卡顿等稳定性数据,网络请求,内存以及电量流量等用户实际的使用感受。

启动应用是用户使用任何一款应用最必不可少的操作,从点击 App 图标到首页展示,整个启动过程的性能,严重影响着用户的体验。支付宝客户端作为一个超级 App,启动速度当然是我们关注的重要指标之一。支付宝对于应用启动过程中的优化,主要分为以下四个方面:

  • 框架治理:

梳理启动流程并重构,遵守启动过程中按需加载原则。

引用 Pipeline 机制,根据业务优先级规定业务初始化时机。

制定统一的开发规范,尽量降低业务方流程对启动性能的影响。

  • 业务治理:

按需加载,延时执行。

线程治理:统一管理已有线程,并调整线程优先级。

I/O 治理:关注主线程 I/O,优化合并频繁读写的 I/O 操作,尽量使用统一存储。

  • 技术突破:

防止启动过程中的 UI 重刷操作。

虚拟机优化,包括 JIT 关闭,降低 GC 次数。

基础模块调优,分析主线程耗时操作并优化。

另外,用户使用过程中 App 的内存、存储、电量及流量等消耗,也是重要的衡量指标。具体的优化点如下:

  • 内存:

内存分析:memtrace hprof 线下内存分析,遍历对象,根据生命周期标记内存泄露,同时根据 object 创建引用确定业务归属。

Native 内存:图像库切换到 native 层,4.x bitmap 像素数据放到 ashme 共享内存,降低 GC。

内存优化:对象池复用,减小 bitmap 对内存占用,使用更小的图,尤其注意三方 H5 页面。

  • 存储:

存储分析:查看应用存储大小。

存储优化:使用共享库,业务定向优化,压缩存储等。

  • 流量:

耗流量原因:分析各种网络请求。

流量异常捕获:hook 所有网络请求,根据host聚合流量,超过阈值确定异常。

流量优化:PC 底层协议优化,资源增量按需下载,同时通过切面信息调用方。

  • 电量:

耗电原因:监控 CPU 使用率,各种 sensor、gps、weaklock、网络连接等耗电操作。

耗电异常捕获:遍历线程,获取所有线程运行时间,与主线程比较确定异常。

耗电优化:高性能 dump 线程栈优化,通过线程映射调用方,评估调用逻辑进行优化。

针对以上每个优化点,支付宝都投入了大量精力进行研究和实践,有关启动性能优化的详细内容可以查阅文档《支付宝客户端架构解析:iOS 客户端启动性能优化初探》和《支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」》,其他优化点请持续关注“客户端架构解析”系列文章。

基于这些对用户体验优化的内容,支付宝构建了一套完整的超级 App 线上运维体系,实时监控线上 App 发生的异常问题,针对这些问题,以最快的时间定位问题原因并找到对应的解决方案,最后通过动态热修复的技术及时修复线上问题,最终形成一个线上质量保障的闭环,保障应用运行的稳定性。

MAS移动分析框架浅析

接下来,详细介绍超级 App 运维体系中的移动监控框架具体是如何实现的。

移动分析 MAS(Mobile Analysis Service)通过对移动客户端、H5、小程序、PC等多端埋点数据的采集与分析,实现产品核心指标监控,提供页面、设备、留存、性能等基础分析,并支持自定义事件分析、漏斗分析等高阶分析,帮助企业更好地完成业务监控、用户洞察与行为分析,指导产品迭代,精细化产品运营,辅助营销决策,加速业务商业化。主要分为以下四个阶段:

整个移动分析的完整链路从左往右看,就是客户端通过调用埋点 SDK 的接口进行数据埋点,埋点 SDK 对日志进行格式化后,先写入客户端本地文件,满足日志上报触发条件后,将本地日志上报到日志服务器并清理本地日志文件以减少存储大小;日志服务器接收到客户端上报的日志后同步到计算平台,经过离线计算和实时计算后,将结果进行展示,用来监控、分析、搜索、推荐等。

接下来我们将从移动分析框架的四个阶段,详细介绍数据分析的整个链路逻辑。

数据采集

根据采集数据时机、应用场景,最终用途的不同,我们把客户端采集的数据分为了以下几类。其中结合 mPaaS 模块化开发框架,报活埋点、押后台埋点、页面自动化埋点、性能埋点及 H5 埋点,由客户端 SDK 自动采集,无需开发者手动调用接口实现,开发者只需要关注自己的业务逻辑,在需要监控的逻辑除埋点统计。

为了降低频繁上报日志对应用性能的影响,客户端采集到数据后,会预先保存在应用本地,通过以下三种方式同步到日志服务器:

  • 自动上报:满足一定条件后客户端埋点 SDK 自动上报,包括

程序每次冷启动都会触发检查日志上报的逻辑。

程序进入后台会立即触发上报。

写日志时,某种类型的日志默认到达 40 条就触发上报。

  • 实时监控:对于比较重要的客户端日志,如异常、应用闪退日志等,可实时上报,产生一条上报一条,便于后台实时监控。
  • 动态控制:在自动上报的基础上,通过服务端下发的开关值,修改客户端日志写入和日志上报触发的条件。如在大流量并发的情况下,为减少日志服务器的压力,控制客户端只写入并上报异常或闪退日志,忽略行为日志的统计。

数据计算

上报到日志服务器的日志,会同步到计算平台进行计算,后台主要包含以下几个系统:

  • mdap:日志采集网关,负责收集客户端埋点日志,收到日志后,直接传输至 JStorm 集群进行计算。
  • JStorm:实时计算引擎,根据处理规则对日志进行实时解析并将需要的数据存储入库。
  • SSDB: kv 数据存储层,底层使用 leveldb,支持单表十亿级记录。
  • ZooKeeper:集群管理、组件间服务发现。

数据应用

计算平台计算出来的结果,可以为用户提供用户分析、事件分析、行为、性能等数据分析服务。

  • 基础分析: 关注于 App 的通用分析,包括每日登录用户、新增用户、使用时长、用户留存、页面分析、访问路径等基础分析。
  • 高阶分析: 用于 App 专注业务的特定分析需求,提供一种灵活的多维分析能力;提供热修复报告,帮助您了解 RPC、修复、回滚相关信息等。
  • 性能分析: 提供闪退、卡死、卡顿的统计功能。当客户端发生性能问题后,移动分析服务提供实时查看性能分析的统计数据。
  • 日志管理: 支持按关键字实时搜索查询日志,或通过服务端开关实时控制客户端日志上报逻辑。

数据决策

在上一步数据应用的基础上,可以与大数据、营销平台及推送平台结合,根据移动分析得到的埋点数据,通过大数据平台进行打标、圈人、用户画像及建模后,可以在营销平台上发起一次营销活动,指定活动的类型,活动算法,参与人群及活动奖品,通过消息推送、数据同步,动态发布等形式,触达到客户端,实现客户端拉新促活、活动推广及操作引导的目的。同时结合运营活动的场景需求,形成了一套完整的数字化运营体系,监控一次运营活动的参与人数、活动发放率、核销率等,观察活动的有效性。

mPaaS 技术架构与助力

上面介绍的支付宝内移动端分析方案的技术积累和架构实践,已经通过 mPaaS 移动开发平台作为蚂蚁金服金融科技的一部分对外开放。mPaaS(Mobile Platform As A Service),源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动 App。

在 mPaaS 移动开放平台上,我们将移动分析框架中的本地日志、埋点、自动化埋点、性能监控、Crash报告、诊断日志等模块,作为一个个独立的组件来进行输出。任何一个 App 都可以通过 mPaaS 插件,添加对应的组件,在当前应用中集成这些功能,只需要这样简单的操作,就可以让你的应用具有和支付宝一样强大的移动端分析监控能力。

客户端集成了这些移动分析相关的组件后,用户在使用APP过程中会产生相应的日志,经过数据采集、数据上报、数据计算等处理后,计算的结果会同步到 mPaaS 移动分析的大盘上展示,包括应用的基础应用概况、性能稳定数据、流量走向等等,方便开发者实时监控 APP 的概况大盘和稳定性等,实时发现线上问题并修复。

目前,mPaaS 移动开发平台已经服务了众多企业,包括蚂蚁金服内部的香港支付宝、网商银行、口碑商家等,同时还有大量的外部蚂蚁生态合作伙伴,包括12306、上海地铁、广州地铁、广发银行等。秉承着「给世界带来小而美的变化」的理念,我们通过 mPaaS 帮助 12306 这样的国民级 App 重构了客户端,使得大家可以用上一个好的体验的 App 进行出行购票,用 mPaaS 这样成熟的底层框架搭建一个 12306 仅需要 2-3 个月的时间。

除了 12306 还有支付宝香港版广发银行手机银行发现精彩多个客户端,同样在短短几个月的时间内便完成了业务重构。

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 快速生成有残午餐_写出优质Java代码的4个技巧

译者注:如果现在要求对你写的Java代码进行优化,那你会怎么做呢?作者在本文介绍了可以提高系统性能以及代码可读性的四种方法,如果你对此感兴趣,就让我们一起来看看吧。以下为译文。本文我们将介绍一些有助于解决常见问…

在Kubernetes上运行区块链服务(BaaS)

本文是在2018年11月15日由Linux基金会CNCF主办的KubeCon & CloudNativeCon China 2018大会的“Running Blockchain as a Service (BaaS) on Kubernetes”演讲内容基础上整理而成,从技术上介绍了阿里云如何将基于区块链Hyperledger Fabric的BaaS和容器集群技术Ku…

RabbitMQ 镜像集群之同步策略_专栏讲解

文章目录一、 基础知识汲取1.1. 镜像集群简述1.2. 策略参数说明1.3. 策略案例二、HA mode 同步方式2.1. 参数说明2.2. 案例2.3. 命令终端形式2.4. MQ管控台设置2.5. 队列同步2.5. 优缺点三、Ha async mode 同步方式(推荐使用)3.1. 参数说明3.2. 案例3.3.…

bug要改一天?

大家应该都听过下面的一个段子~女生:亲爱的,我来亲戚了男生:多喝热水......女生:我好像要感冒了,亲爱的~男生:多喝热水......女生:我现在好难受哦,快撑不下去了男生:多喝…

新手也能看懂,消息队列其实很简单

本文内容思维导图: 消息队列其实很简单 “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。我也在我的多篇文章中提到了这个概念。可能你是熟练使用消息队列的老手&am…

java注册是什么意思_springcloud注册中心是什么意思?有什么作用?

可能我们都知道现如今java分布式微服务的流行程度,那么你了解过springcloud的有关内容吗?例如,springcloud中的注册中心是什么?用在何处?注册中心其实就是服务发现的核心。它主要保存了各个可用服务实例的网络地址(指IP Address和Port)。服务注册中心…

如何去设计前端框架能力?星巴克消息开放项目从0到1,从点到面的思考

本文由淘宝前端工程师罗嗣分享,主要讲述了作者在星巴克消息开放项目中的总结和思考,希望对大家有帮助,让业务分享更加有价值。 从满足星巴克项目需求单点出发,发散到从点到面的思考。从而总结了自己思考的基本流程(方法…

如何在springboot中使用PageHelper分页插件

文章目录1. pom依赖2. yml3. 实体类4. mapper映射文件4. mapper接口5. service接口6. 实现类7. controller8. 浏览器验证使用思路: 1.引入myabtis和pagehelper依赖 2.yml中配置mybatis扫描和实体类 3. 这2行代码 pageNum:当前第几页 pageNum:…

6.6折票仅剩3天 | BDTC 2019全日程公布,哪些是你感兴趣的话题?

2019年12月5-7日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的中国大数据技术大会(BDTC 2019)将于北京长城饭店隆重举行。届时,超过百位顶尖技术专家将齐聚于…

云栖专辑| 阿里毕玄:程序员的成长路线

2018年12月20日,云栖社区3周岁生日。阿里巴巴常说“晴天修屋顶”,所以我们特别策划了这个专辑——分享给开发者们20个阿里故事,50本书籍。第一位是林昊(毕玄)。 在这篇《程序员的成长路线》里,阿里基础设施…

java线程条件变量_使用条件变量(多线程笔记)

条件变量属性:使用条件变量可以以原子方式阻塞线程,知道某个特定条件为真为止。条件变量始终与互斥锁一起使用。使用条件变量,线程可以以原子方式阻塞,知道满足某个条件为止。对掉件的测试时在互斥锁的保护下进行的。如果条件为假…

用PyTorch创建一个图像分类器?So easy!(Part 2)

在第一部分中,我们知道了为什么以及如何加载预先训练好的神经网络,我们可以用自己的分类器代替已有神经网络的分类器。那么,在这篇文章中,我们将学习如何训练分类器。 训练分类器 首先,我们需要为分类器提供待分类的…

涨姿势,一个通信项目从开始到结束,原来还包括这些工作

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君责编 | 阿秃本月12日,中国移动31个省的通信工程设计与可行性研究集采正式启动。这次集采规模庞大,涵盖了无线网(5G、FDD、NB等)、核心网、承载网、支撑网等专业方向,预估基本规模超4…

spring项目链接RabbitMQ集群

文章目录1.pom2. spring-rabbitmq-producer.xml3. spring-rabbitmq-consumer.xml4. rabbitmq.properties1.pom <!--spring整合rabbitmq--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

听说支付宝有一个“疯起来连自己都打”的项目

小蚂蚁说&#xff1a; 自古红蓝出CP&#xff0c;在蚂蚁金服就有这样两支“相爱相杀”的队伍——红军和蓝军。蓝军是进攻方&#xff0c;主要职责是挖掘系统的弱点并发起“真实”的攻击&#xff0c;俗称“找茬”&#xff1b;红军则是防守方&#xff0c;其防控体系建设中的实时核…

蚂蚁金服红蓝军技术攻防演练究竟有多“狠”

如果一个技术团队不干别的&#xff0c;专门“搞破坏”&#xff0c;这是一种怎样的存在&#xff1f;这真的不是“天方夜谭”&#xff0c;在支付宝确实有这么一支队伍——技术蓝军。蓝军的任务就是不断地攻击和进攻&#xff0c;而防守方则是技术红军。在支付宝&#xff0c;蓝军从…

java虚拟机中xms_java JVM虚拟机选项: Xms Xmx PermSize MaxPermSize 区别

java虽然是自动回收内存&#xff0c;但是应用程序&#xff0c;尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。举例说明含义&#xff1a;-Xms128m表示JVM Heap(堆内存)最小尺寸128MB&#xff0c;初始分配-Xmx512m表示JVM Heap(堆内存)最大允许的尺…

linux 目录挂载

背景&#xff1a;文件服务器200G&#xff0c;日志大小已经超过200G&#xff0c;使用率达到100% 解决方案&#xff1a; nas挂载&#xff0c;申请的挂载磁盘空间1T 挂载声明&#xff1a; 当执行挂载命令后&#xff0c;本地挂载的原目录下面是空的 只有解挂后&#xff0c;以前目录…

阿里巴巴在内蒙古旱区试水物联网灌溉技术,一年省出1.5个西湖

阿里巴巴正用物联网技术解决干旱地区的灌溉问题&#xff0c;通过搭建农业物联网平台&#xff0c;全面监测农作物的生长状态&#xff0c;从而匹配最节约的灌溉方案。12月19日试验区研究人员得出预测结果&#xff1a;一年可以省出1.5个西湖的水。 一直以来干旱是困扰人类的重要环…

不少人暗搓搓的准备春招了,我有一些好东东和招聘信息给你

2017远去了&#xff01;2018远去了&#xff01;&#xff01;很快&#xff0c;2019 也要远去了&#xff01;&#xff01;&#xff01;被各种裁员和寒冬扎心的老铁&#xff0c;你还在犹豫什么&#xff1f;赶紧学习起来&#xff0c;找份靠谱的工作吧&#xff01;找工作这件事&…