移动互联网数据分析移动客户端流量统计移动客户端数据统计

移动互联网数据分析 移动客户端流量统计 移动客户端数据统计

原创文章,转载请注明原地址

在这个公司两年多了,期间做了移动客户端数据分析,视频播放器数据分析,短地址数据分析等数据分析方面的工作,

公司提供的平台还算大,每日分析的数据好几千万,期间积累了一些经验和教训,和大家一起分享一下.

欢迎批评指正.

这里主要讲的是移动客户端数据的分析

数据分析肯定要有一个数据产生的过程,然后才是数据收集与数据分析,将分为三段来讲


一.数据的产生

传统的web数据来源大概分为两种,一种是浏览器访问服务器产生的日志,一种是在web页面上使用js获取相应的数据,然后向服务器发送数据.

第一种方法,想获取的数据和其它数据一起混杂在服务器日志中,不方便分析,而且浏览器访问产生的数据有限,没法做更多分析,一般是简单统计的系统,采用这种方法.

第二种方法比较好一点,js能够获取的数据较多,较全面,统计数据和其它数据分开,能获得比较"纯"的数据


移动客户端的数据分析大概也有这两种方法,不过移动客户端没法运行js,一般是针对不同的平台,写不同的类库,

这需要和客户端开发人员进行合作,如android可以写一个通用的jar包,ios可以一个通用的类库,写好后,就可以供相同平台的移动应用程序进行调用.

值得说明的是,移动客户端收集的数据有两点需要注意:

一是可扩展性,客户端可以获得的数据很多,开始的时候,只获取关心的数据,但是随着时间的推移,可能需要获取更多的数据,

这个时候就要保证客户端收集数据的可扩展性,即能在旧的协议格式上随意扩展,一般可以用json格式.

二是数据注意压缩,因为我国移动资费还比较贵,1M流量大概一块钱,如果不考虑这一点,像web一样无限制地收集数据,并发送到服务器,

手机流量将会非常大.数据压缩有两方面,一方面,如果使用json格式的话,key可以压缩,比如"app_version":"1.0.1"代表应用版本号是1.0.1,

压缩后可以这样,"av":"1.0.1",尽量压缩key,反正只要服务器端知道key的含义就行.另一方面是指使用压缩协议,比如可以将数据使用gzip压缩,

这样数据量会更小了.

三是要注意数据上传的时机.由于移动设备cpu,内存啥的都比较弱,如果频繁地传送数据,肯定会对应用的体验产生影响,一般都是将数据积累一定的时间,

然后一次上传,这样能减轻对用户的干扰,但是有些实时数据,还是需要实时上传的,这个可以看情况而定.

 

 

二.数据的收集

移动客户端收集数据后,一般通过http协议或者其它方式上传到服务器.

服务器将客户端传过来的数据进行持久化.

刚开始的时候,我的做法比较山寨,起了一个web应用,写了一个servlet,从http请求中将数据提取出来,

直接插入数据库.这样的问题很明显,如果并发稍高,数据库首先撑不住,因此用了数据库连接池,

这样的问题还是很明显,并发再高,数据库都会面临非常大的压力.

再后来,经过经理的提醒,打算先将数据存为日志,因此在servlet中使用了log4j,将数据按照一定的格式存为日志.

但是受限于java web应用的处理模型,在压力测试的时候,发现servlet在高并发下,响应时间会很长,而且超时率非常高.

在我们公司的破机器下,2G内存,4核cpu,在1000并发的情况下,响应时间大概100ms以上,3000并发的情况下,响应时间达到了500ms,

而且超时率已经达到了5%,cpu占用率相当高.

当时领导带我去找了一位公司牛人,他是负责nginx模块开发的,当时我对nginx是什么都不太清楚.

他写了一个nginx接收post请求的模块,我从他哪里将模块代码拿来,经过自己的修改,增加了配置日志滚动时间,配置自定义文件名等功能,

后来再进行压力测试,在5000并发下,相应时间非常少,而且超时率为0%,cpu占用也不高,由于满足了需求,而且没有再多的测试服务器,所以不在往上测试了.

当时nginx的稳定版好像是0.7.x,开发版是0.8.x,当时的nginx不支持静态post请求,因此自己开发nginx模块,当时还发现了nginx存在的bug :)

开发nginx模块是稍有难度的,像我这样平时是以java语言为主的,好久没碰c语言了,改写nginx模块,还比较费劲.

不过现在的nginx模块好像增加静态post功能了,而且可以用nginx的lua模块来获取http请求中的内容了.

比以前容易多了.

 

三.数据的分析

数据的分析其实分为实时与非实时,非实时的话比较好办,就是将收集收集到的日志用程序来跑就行,

java,python,hadoop都可以.

 

首先讲讲非实时数据分析(离线数据分析)

数据分析的方法其实看数据量的大小,现在很火的是hadoop分布式,但是如果数据量太小,其实根本没有必要使用hadoop,

而且就我个人的经验来看,hadoop还不够稳定,还不够成熟,用起来门槛也很高.

所以我强烈推荐如果数据量不是很大,千万级一下,使用脚本对数据进行分析吧.

当时刚进公司的时候,经理就建议我用脚本对日志进行分析,当时我理解的脚本是linux的shell脚本,

我想shell如何分析json数据呢?而且我们需要根据ip查出地域,当时我觉得用shell无法完成.

受限于当时的经验,没有用脚本分析日志,而且使用自己最熟悉的java程序来分析.

其实脚本有很多种啦,比如python,perl,都有json库,而且都有根据ip获取地区的代码,

网上随便搜一下就是很多.

第一版我使用的是java应用程序,一行行地读取日志,并且找了一段能根据ip查地域的代码,加上qqwry.dat纯真数据库,

就能根据ip获取所对应的地域了.这个程序运行了很久.

相关阅读