4月19号
到了现在说下开发进度吧~~
系统设计
简单说一说
由于与需要接受的数据原比较多,再加上服务是部署在阿里云上的,所有的数据均是通过http接收
目前数据接收后直接存储到elasticsearch或者是存储到MySql中
目前没有对实时的数据进行处理.
由于数据在下游都是经过清理的所以传输过来之后直接就可以使用elasticsearch进行聚合,直接展示.
接下来要做的
重中之重(服务高可用)
index服务没有搭建高可用,导致数据丢失
在13号可以明显的看到数据在晚上丢失了,白天看日志发现是服务器莫名挂掉了无奈只能找php从新要数据.高可用服务构建
服务端的高可用本来想用zookeeper做的,但是时间有限而且公司接下来可能需要使用spring cloud 既然如此那还是用eureka搭建注册中心.hadoop基础搭建
hadoop目前公司没有需要对线下数据进行大量计算的任务,但是出于将来的考虑还是要搭建的.
目前的任务就是这样能做到那就做到那把
遇到的痛点
被迫使用mysql对数据进行统计
由于老大的要求,只能将超哥从FB哪里爬来的数据进行展示,由于需要两张表之间进行聚合等比较运算,写了个很长的sql但是效率巨低,所以纠结了一下改变了策略.解决办法
将爬虫服务部署到阿里云上,之后使用logstash将mysql中的数据查出来定时同步到elasticsearch中,在es中再次使用聚合查询出想要的结果.
input {
stdin { }
jdbc {
jdbc_connection_string => "jdbc:mysql://172.17.70.225:3306/galaxy"
jdbc_user => "galaxy"
jdbc_password => "lollollol"
jdbc_driver_library => "/usr/mysql/mysql-connector-java-5.1.45-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement => "SELECT fb.id AS id, course_id, fb.title AS title, fb.price AS price, fb.student_limit AS student_limit, fb.student_count-fb.previous_count AS previous_count, fb.previours_price AS previours_price, fb.current_cycle_income AS current_cycle_income, fb.create_time AS create_time, fc.course_type AS course_type, fc.status AS status, fc.sale_status AS sale_status FROM fb_course_snapshot fb LEFT JOIN fb_course fc ON fb.course_id = fc.id WHERE fb.id>:sql_last_value"
use_column_value => true
tracking_column => "id"
schedule => "* * * * *"
}
}
filter {
date {
match => ["create_time", "yyyy-MM-dd HH:mm:ss,SSS", "UNIX"]
target => "@timestamp"
locale => "cn"
}
}
output {
stdout {
codec => json_lines
}
elasticsearch {
hosts => "172.17.70.224:9200"
index => "fb_goods"
document_type => "fb_orders"
document_id => "%{id}"
}
}
该配置文档,遵循一些logstash的规则进行无数据收集和匹配
在使用logstash的时候也是遇到了一些坑
- 每一个logstash的配置文件只能支持一个sql的查询,也是就是说如果想要配置多个数据源,需要每次再配置的时候开启input的属性
- logstash的守护进程,由于logstash需要在后台一直运行,所以logstash需要一个守护进程去保证他可以在后台一直执行,目前我用的方法就是在启动的时候加一个’&’ 表示在后台运行,在后期肯能会写一个收获进程.
- logstash—filter
filter {
date {
match => ["create_time", "yyyy-MM-dd HH:mm:ss,SSS", "UNIX"]
target => "@timestamp"
locale => "cn"
}
}
logstash支持使用过滤器插件,可以将收集后的数据进行过滤,这个配置的方法给所有的查询添加一个时间戳字段.
4.logstash—output
output {
stdout {
codec => json_lines
}
elasticsearch {
hosts => "172.17.70.224:9200"
index => "fb_goods"
document_type => "fb_orders"
document_id => "%{id}"
}
}
用来接收数据,将数据输出到指定的数据源
基础服务
index服务
主要负责
- 接收上报的数据
- 消费数据,对数据进行分类存储
- 大数据存储
- es(目前使用)
- hdfs文件存储系统(未构建)
- 业务性数据存储
- mysql
- 消息队列(未构建)
search服务
主要负责
- 对线下数据的聚合展示(目前使用es对数据进行聚合)
- Galaxy数据展示平台业务代码
pass服务(本地MQ消费者)
主要负责
- 消费本地MQ中的消息,并将消息进行上报
项目进度
敏感字眼辣眼睛数据展示
该模块主要是负责往期敏感字眼辣眼睛数据概览以及往期敏感字眼辣眼睛数据对比分析,帮助产品运营更直观的通过敏感字眼辣眼睛往期的各地区报名人数考试情况来分析敏感字眼辣眼睛的情况。
- 敏感字眼辣眼睛首页展示(接口完成)
- 敏感字眼辣眼睛首页表格(开发中)
- 敏感字眼辣眼睛详情页(数据未上报)
敏感字眼辣眼睛数据展示
- php分类列表
- 课程列表
- 直播方向
- 所有的直播间人次和最高并发量
- 各时间峰值人数
- 指定课程各时间直播峰值人数
- 指定课程直播总人数和平均听课时长
以上数据已同步到es中
目前安排
录播视频 指定课程录播课(包含直播视频回放)
- 听课次数,听课时长
- 听课时间
用户行为分析
该模块主要负责对使用app的用户进行为分析,对用户进行画像,并且将用户的行为分析汇总。
- 数据结构设计(完成)
- 数据采集(开发中)
- 数据分析(未进行)
- 漏斗分析(未进行)
- 留存分析(未进行)
- 用户路径分析(未进行)
- 用户行为序列(未进行)
订单数据分析
该模块主要是对公司的订单进行分析,统计销售总额,通过时间以及活动进行分析课程的销售情况。
- 秒杀数据统计(完成)
- 订单历史数据拉取(完成未上线)
- 历史订单销售额每月订单销售额(完成)
- 需求完善中。。。。。。。
app使用分析
该模块主要是对APP的使用情况进行分析,统计每日的访问量,接口的访问热度从而帮助产品完善app的设计
- 用户历史注册数据(完成)
- 用户注册数据(进行中)
- app活跃度(完成)
- 用户app使用情况(未完成)