0%

APP核心业务监控架构设计

目标

  1. 性能监控可以监控网络,crash,卡顿,cpu使用率,内存泄露,耗电量点。目前我们只做网络部分,但为了后期扩展必须保证可扩展性和易用性。
  2. 为了满足不同iOS App不同生命周期不同使用人群对App的使用,需要有不同性能的监控手段,SDK需要实现开发环境监控、测试环境监控、生产环境的监控。
  3. 灵活配置。能配置相关阀值、环境控制、监控模块增加和取消等
  4. 最小侵入。方便接入,无需手动添加监控采集点
  5. 用户无感知。不影响用户体验,不因为SDK增加明显的网络开销、CPU、内存等开销。

架构设计

一个APM平台的工作流程大致如下:在各端(移动端、前端、后端)采集性能数据,然后上传到后端进行建模、存储,由平台进行分析、挖掘,最后通过可视化的方式展示给用户。

SDK实际上只是一个数据采集系统,负责收集并上传终端上产生的性能数据,可以将Monitor大致可以划分为三个模块,最底层是数据采集模块(dataBuilder),负责采集各种性能数据,采集到的数据经过处理(dataProcessor)之后存储在内存或者数据库中(dataPersistence),最上层是数据的展示模块,通常会将采集到的数据上传到后台(dataPoster),供平台存储、分析和展示、或者给用户、开发者、测试人员查看(dataViewer))。为了配置的灵活性,可以将部分配置动态下发或者根据客户端需要进行配置,可以有一个配置接口模块(configure、interface),为确保最小侵入,可以使用iOS动态性的特点进行hook,可增加一个hook模块(Hooker)。

因此整体架构设计图如下:

img

远期规划支持开发监控、测试监控、线上监控

img

架构实现技术手段

参考文章:《移动端监控体系之技术原理剖析

http://www.jianshu.com/p/8123fc17fe0e

网络监控

目的

App内服务故障,可用性和延迟等问题,通过系统日志和监控报警机制及时发现,并作出及时反应,快速修复。

  1. 我们需要对APP核心业务及有损用户体验的服务,做监控,并及时发现问题,快速解决。
  2. APP端梳理核心业务并梳理第三方服务的依赖关系。
  3. 整理第三方紧急响应方案和紧急联系方式
  4. 我们需要建立App内所有请求状态和非请求主要业务的数据收集和报警机制

方案设计

URL监测

  1. 配置文件下发要监测的URL
  2. 使用NSURLProtocol 拦截app内发送的请求,检测请求的path在配置文件中存在,则协议生效,请求的response信息会进入监控中。
  3. 监控的设计采用单例模式,单例管理的是发送队列和检测的数据缓存(数据缓存上线是200条记录,多余200条还未发送,缓存会清除)。
  4. 触发发送的方式是Runloop事件 60s循环一次。

第三方监控

  1. 需要手动调用接口埋点,接口定义为传入第三方的Name 和要监测的信息(类型都为string)
  2. 监测的数据策略和触发的发送策略和URL监测一致,数据会统计的200条内。

技术点

  1. RunLoop 事件循环
  2. NSOperationQueue 串行队列
  3. 单例模式管理
  4. NSURLProtocol 协议拦截 (AOP思想)
  5. 网络请求

流程设计图

img