设计模式在一个用户访问路径分析系统架构设计中的应用

设计模式在一个用户访问路径分析系统架构设计中的应用

前天接到一个项目,需要采集用户行为进行分析,例如:有N个页面,每个页面有都按钮和链接,需要记录每次用户一些特征行为,如:

特征行为一:A页面点击一个按钮跳到B页面,然后在B页面点击一个链接跳到C页面,然后在C页面点击下载。

特征行为二:D页面点击按钮跳到E页面,然后在E页面点击按钮跳到C页面,然后在C页面点击下载。

两个特征最后都在C页面下载软件,现在需要统计A-B-C-下载和D-E-C-下载这两种行为的分布(页面的访问时间,人数等),帮助运营更好的运营网站,这个有点类似AB测试,当然特征不止这两种,另外网站目前大约在20万UV,将来可能扩展到500万-1000万的UV,如何构建这个这个采集系统。
很多人拿到这个项目的时候就会直接想到在session中记录这中特征轨迹,然后插入数据库,在数据库里面做统计,每天统计一下1000万级别的数据量最多也就1-3个小时就分析完,当然这个看来是可行的,也最简单。
但是要考虑到一个问题,如果这个网站有100个页面,每个页面有3个按钮。那么这种组合将会是1001003=30000种组合(这个只是两个页面的组合,不算多个页面的组合,当然运营也不会要求30000种组合的统计数据,他们也看不过来),用程序来维护这些组合且不说系统的设计将会有多复杂,就完成这种组合的解析工作将是一个巨大的工作量,有没有什么好的办法呢。
办法当然是有的,记住一点用户想要的最终系统不一定是我们要做的,我们分析一下这个需求的实质,首先我在前面是提到了一个词”组合”,从”A-B-C-下载”我们其实可以解析成一下动作

来源页 当前页 动作
PX PA A1
PA PB A2
PB PC A3

//PX表示未知页,PA表示A页,A1表示点击动作1

我们来分析一下这组数据来源页可以看成一个可变量A,当前页看作是可变量B 动作可以看成是可变量C,这样一来就有了三个可变量(其实就是可变量分析),这可以就可以完全套用经典的设计模式中的桥模式来设计这个系统。我们只需要记录每次点击的来源页,当前页和动作就完全可以分析出来我们想要的用户行为轨迹。
我们中设计结果的好处就是当然运营需要一种轨迹的的时候只需要将模型告诉我们,然后用程序实现掉进行编号,在用模型来解析这些数据将最后结果插入数据库,当然数据库的设计也很简单,值需要序列号,模型ID,IP,servertime,clientTime,paramStr6个值就行了,也就是说数据库不需要知道具体模型是什么,他只要进行IP,和时间还有参数三个纬度的分析就行了。以后无论想要什么样的用户轨迹我们只需要将其转化为模型实现分析后插入数据库,再由数据库分析后得出分析结果,这里有用到了一种设计模式,那就是适配器模式将不同的业务需求转换为同一个类型的结果输出,这样一来从整个程序的扩展性和可维护性来说有是有好处的。
下面在这个是程序设计上的架构,接下来就是系统部署架构。看以下系统部署图
简单部署图
采集服务器收集上报数据,这些数据以文本方式存放,如果直接插入数据库的话一个是网络上不安全,一个是数据库会受不了高并发的插入操作。
由于预测将来将会有有500-1000万UV,所以需要将采集服务器设计成可横向扩展的,所有的采集数据文本将在分析服务器上汇总,目前由于数据较少,大约每天产生1G数据,单个分析服务器完全可以胜任,如果以后业务量增加,可以轻松部署hadoopp来做分析,最后数据库基本上不会有什么压力,因为经过处理的数据放入数据库之后只有很少一部分,可以看看扩展之后的整个系统结构。
扩展部署图
还是有点有规模的,整个设计在业务和硬件上的扩展都是很灵活的,拿出来分享一下,也希望大家在各自的应用中能够更多的使用设计模式来将系统设计得更加灵活。

坚持原创技术分享,您的支持将鼓励我继续创作!