笔者曾经参与过的一个游戏数据分析平台研发过程,现在回头总结一下这个平台搭建过程。
这是一个基于服务器端的解决方案,也就是说数据采集是在移动应用的服务器端完成的。数据采集,数据分析和结果存储平台采用了如下框架。
具体思路如下:
数据生成: 采用提供sdk的方式,移动应用者需要在服务器端嵌入相应的SDK并且调用不同的API把想要分析的数据写到相应的日志文件。不同的服务器解决方案需要不同的SDK,java,c++,php等不同的library。提供SDK的方式可以保证不同的开发者可以采用统一的日志格式存储,方便后面的数据分析处理。缺点是不够灵活,需要嵌入服务器代码,而且要根据不同的服务器种类提供不同的SDK。
数据采集: 由于数据生成是分布在不同的移动应用服务器上,这些数据需要集中采集做统计分析,采用了Linux的rsync工具同步数据到数据分析平台下的相应的存储空间。 Rsync是linux下镜像备份工具,remote Sync。 Rsync采用可配置的定时器方式将新产生的日志数据上传到HUB上。并且保证以增量的方式传输到指定hub节点。
数据分发:采用Kafka分布式消息分发系统,需要实时处理的数据分发给Storm, 离线处理的数据由Hadoop来处理。
数据处理:实时数据处理使用Storm, 离线处理采用hadoop来处理
数据存储: MYSQL, 采用分表分库的方式,以达到水平分割数据,增加可扩展性。
数据呈现: 采用Django框架