郑腾霄
(四川大学计算机学院,成都 610000)
随着互联网技术的飞速发展,企业的门户网站已成为对外宣传、提升服务水平的重要途径,网络也已成为政府机关为公众提供信息的重要渠道,及时对网站流量和用户访问情况进行统计分析,通过数据来分析用户的浏览习惯,可对优化网站运营架构、调整推广策略起到积极的作用[1]。
网站流量统计是指在获得网站访问量等基本数据的情况下,对有关数据进行统计、分析,从而发现用户访问网站的规律[2]。网站流量统计又分为:PV(Page View),UV(Unique Visitor)。PV即页面浏览量,用来衡量一个网站的网页用户访问量,用户每进行一次页面刷新,就算作一次PV流量。UV即独立访客数,代表访问某个站点的不同IP地址的人数。
通过对网站进行流量分析,可以刻画出网站近期的运营情况,从而引导网站开发,运营人员作出相关决策来改进网站的服务,对网站维护,制定网站营销策略提供有力的依据,对网站的运营架构进行调整,促进网站整体的改进。
站点流量分析有多重相关的评估指标,总体可以分为网站PV,UV维度,以及网站用户维度,以下对这两个维度分别进行介绍。
(1)网站每天(每周,每月)的PV。网站每天(每周,每月)所有页面总共被访问的次数。
(2)网站每天(每周,每月)的UV。网站每天(每周,每月)所有页面被独立的IP所访问的次数。
(3)网站总PV,UV的环比情况。网站今天-昨天(本周-上周,本月-上月)的浏览量对比增长或者减少的百分比。
(4)网站每天浏览量的变化趋势。根据网站每天的访问量绘制折线图,刻画出网站每天流量的走势。
(5)网站单独页面PV,UV分析。一个网站通常会有多个页面,对各个页面的浏览量进行分析可以更好地对网站进行分析。
(1)访问者的来源[3]。分析访问者的来源类型,来源类型分为搜索引擎、其他网站跳转和直接输入网址。
(2)访问者使用的设备。根据网站日志得到访问者所使用的设备(电脑、手机型号、浏览器、操作系统等)。
Nginx是一个虽然轻量级,但是性能比较高的Web服务器。有着并发能力强,占有内存较少等特点。
YAF框架是一中用C语言编写的PHP框架。所有的框架类,不需要编译,在PHP启动的时候加载,并常驻内存。YAF框架还具有更短的内存周转周期,相比于原生的PHP框架,YAF框架的执行速度更快,占用的内存更少[4]。
Hadoop Streaming是Hadoop平台提供的一种编程工具,它允许用户使用任何可执行文件或脚本作为Mapper和Reducer[5]。面对大小为数十G甚至上百G的日志文件,如果使用一个单机的程序去分析,时间复杂度会非常高,效率很低。本文通过使用Hadoop Streaming分布式计算框架,将单机的日志分析程序分布式并行运行,解决了单机分析比较大的日志文件速度极慢的问题。
LNMP就是指Linux系统下Nginx+MySQL+PHP这样的网站服务器架构[6]。
系统采用标准B/S三层结构开发,三层结构分别为:用户界面层(UI)、业务逻辑层和数据层。
其中,数据层主要负责:数据拉取,分布式数据计算,数据入库的操作。逻辑层主要负责系统页面的路由,以及数据的获取以及展现,可视化之前的预处理等工作。UI层负责数据的可视化工作,绘制出数据的各种图形,如图1所示,下面详细进行分析。
图1 数据传输层逻辑图
(1)数据层
原始的日志数据存放于网站服务器所在的线上机上,通过Linux,crontab命令编写例行化脚本每天定时拉取到HDFS上面,然后编写相应的脚本,通过Ha⁃doop Streaming计算框架对日志进行计算,结果存放于集群。然后同样通过Linux下的Crontab命令,编写Python脚本定时从线上集群下载文件到服务器。然后编写Python脚本,首先使用open函数逐行读取从集群下载的临时文件,通过Python的ConfigParser类读取配置文件获得数据库地址以及数据表名,并通过MySQLdb类的connect方法链接数据库,最后通过exe⁃cutemany(sql,args)方法来将每行数据插入数据表,其中sql为插入的sql语句,valuse为Python的list数组,对应数据表的每列的数据。
(2)逻辑层
用户访问系统的主页时,Nginx服务器会根据主页的url路由到对应的action,然后加载smart模块的对应的tpl文件,然后触发嵌入tpl文件中的js文件,然后组装传入的参数,调用AJAX请求,然后Nginx服务器会再次根据AJAX路由到对应的action,从数据库中获得相应的数据返回给js。js中获得返回的数据之后使用echart绘图框架绘制相应的图形,根据设定的id,展示到相应的tpl文件中的对应的div控件上面。
(3)UI层
UI层主要负责页面的展示。
本系统采用Linux+Nginx+PHP+MySQL这样的网站服务器架构。首先,需要在Linux系统下安装好MySQL,本系统采用5.1.45版本。然后安装Nginx服务器,将框架的入口文件配置在Nginx服务器上。然后安装PH以及所用到的AP框架。系统的前段页面使用了smarty模板的技术,所以还要安装以及配置smarty模块。
日志的初始地址位于线上机,为了使用Hadoop对日志进行分析,需要将其定时(每天)拉取到HDFS(Ha⁃doop分布式文件系统),本文使用Linux系统下的crontab命令来定时运行shell脚本的方法来实现。
Crontab命令的配置如下:
脚本的内容如下:
Hadoop-Streaming是Hadoop平台提供的一个编程工具。使用它可以让任何语言的程序在Hadoop Map Reduce中运行。
以上为分析日志的Hadoop-Streaming程序,可以指定maper与reducer的数量,输入与输出的集群目录,以及用于计算的mapper与reducer程序。
Mapper脚本的主要代码如下:
通过以上脚本,可以统计出每天网站的PV总量,其他的计算指标,比如网站总PV,UV等可以通过类似的方法得出,再次不一一赘述。
在使用Hadoop-Streaming对日志分析完毕后,最后的输出存放在Hadoop分布式文件存储系统,HDFS上面,为了将数据在Web页面可视化展示,需要将数据存入数据库中。本文的设计思路如下:首先使用ha⁃doop命令将HDFS上的文件下载到本地:
数据表设计如下:
表1 可视化系统,后端数据库设计
其中,id是此数据表的自增主键,唯一标识了某一天的PV,或者UV访问量;type字段标识了表中每一条数据对应value字段所代表类型,type=1时代表当天的pv,type=2代表当天的u;value字段标识了每种数据的指标量;time代表本条数据所对应的日期。
系统界面展示模块采用了LNMP的架构模型。LNMP就是指Linux系统下Nginx+MySQL+PHP这样的网站服务器架构[7]。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。其中,后端使用的框架为YAF框架,前端使用到的技术有:smarty模板技术,ajax技术,JavaScript以及echarts数据可视化框架。Smarty是一个使用PHP写出来的模板引擎,可以将HTML代码与PHP代码实现逻辑分离。AJAX可以通过与后端服务器的少量的数据交换来实现网页的局部更新操作。JavaScrip是一种脚本语言,现已被广泛的应用于Web开发中,可以为网页添加各种动态的功能,本文更是通过echarts数据可视化框架来绘制图表让页面更加美观。Echarts是一种可视化的框架,通过提供方便丰富的可视化图表,极大缩短了用户与数据的距离。
前端展示效果如下:
图2 可视化系统前端展示效果
基于Hadoop-Streaming+LNMP的网站流量分析系统,使用Hadoop-Streaming这个Map-Reduce框架在网站运营过程中,在服务器上所产生的日志进行分析,得出一些网站运营情况的一些数据以及结论,然后通过LNMP架构,echarts数据可视化工具将这些数据展现出来,刻画出网站运营过程当中所出现的问题,为网站运营人员作出相应的运营决策提供了有效的参考以及依据。弥补了传统的流量分析方法在大流量网站数据分析方面的缺陷。
[1]杜晓春.基于Web的网站数据分析软件Wysistat的设计与实现[D].西安:西安电子科技大学,2010.
[2]焦荣梅.浅谈网站流量统计分析法[J].科技信息,2007(16):264.
[3]冯英健.如何获得网站流量统计数据[EB/OL].(2005-03-02)[2016-10-29].http://www.marketingman.net/FAQ/2005.htm.
[4]Inacio C M,Trammell B.YAF:yet Another Flowmeter[C].Proceedings of the 24th International Conference on Large installation System Administration.USENIX Association,2010:1-16.
[5]7.Zeng Z.Moodle 2 Distributed Computing Architecture Based on LNMP[J].Computer Era,2013.
[6]王风玲.基于PHP+MYSQL的新闻发布系统的研究与实现.计算机应用与软件,2012,36(24):42-44.
[7]Zeng Z.Moodle 2 Distributed Computing Architecture Based on LNMP[J].Computer Era,2013.