大数据平台的技术演化之路 诸葛io平台设计实例
如今,数据分析能力正逐渐成为企业发展的标配,企业通过数据分析的过程将数据中的信息提取出来,进行处理、识别、加工、呈现,最后成为指导企业业务发展的知识和智慧。而处理、识别、加工、呈现的过程从本质上来讲,就是实现对数据的采集、清洗、加工、加载、建模分析,再到可视化的过程。
大数据平台的通用架构
1. 数据采集
采集是指集中企业待分析的原始数据的过程,例如可能是包含但不限于以下:
- 企业服务器的日志;
- 企业各种信息系统的数据(CRM/ERP/数据库);
- 企业的网站/App/小程序等客户端的用户行为记录;
- 使用的第三方系统(客服、IM、HR)提供的API;
采集的方式基本上分为两种:
PUSH模式:企业的数据一般来讲都是散落在很多地方,各种系统或者各种服务器,所以有一个数据采集中心,然后在各个数据产生的位置都有一个agent(可以认为是采集程序)然后朝数据采集中心发送数据的过程就是PUSH,比如在App或者网站植入了SDK,定期发送采集到的用户行为数据到服务端的过程就是PUSH模式;
PULL模式:企业有数据采集中心,从采集中心去访问获取各个数据产生点的数据,这个过程就是PULL,比如从企业的数据中心去调用第三方系统的API获取数据,就是PULL模式。
2. 数据的清洗
数据清洗的过程是指对数据进行一些处理,过滤无用的信息,规范得到能用到的数据。包括但不限于以下情况:
- 过滤SPAM垃圾数据,例如被攻击/造假/BUG产生的大量数据
- 抽取有用字段,例如上传的数据包含的信息很多,只用到一小部分
- 原始数据有很多格式不规范,要统一格式
3.数据的加工
数据加工是指清洗后的数据,还需要补充一些信息,可能是通过数据库查询出来的,也可能是通过计算规则计算出来的,或者算法技术加工出来的新字段。
例如,数据里面有个ip地址,需要计算出用户的地理位置,那么地理位置就是加工出来的字段。一般来讲,对于大多数大数据分析平台而言,加工是很重要的过程,基本上最后可用来进行分析的数据,要通过这一步充分完成加工计算。
4. 数据加载
数据加载是指把加工后的数据加载到合适的存储,可能是Hadoop集群的HDFS上,也可能是某个数据库,有可能是文件等等其他存储类型。
5. 建模分析
建模分析是指在查询前需要把数据进行处理,以优化查询,例如以下:
- 数据仓库建好了仓库模型,要把数据加载到数据仓库中
- 需要做数据索引,把数据进行索引优化
数据模型很重要,是整个数据处理分析的核心之一。每个企业都有自己的核心业务,以及核心目标,并且也有各自的数据源以及数据类型,所以也就意味着每一家企业的数据模型多少都会有些差异,也就是最个性化的一个地方,数据仓库就是这个数据模型的载体,一般来讲数据就是数据库技术,常见数据库之外,还有Infobright,Greenplum,Vertica,也有基于Hadoop技术的,用HDFS作为基础的存储,然后使用的查询引擎,包括Imapla,Presto,SparkSQL等等。
通常而言,数据团队要进行复杂的查询和分析,都是在此基础之上,通过SQL语言或者代码查询来实现的。
6. 可视化
可视化是最终分析结果要展示的过程,例如“双十一”酷炫的图表,一般企业都有自己的数据看板等等。
可视化背后主要是执行SQL或者运行代码得到的数据结果,可能是一维,也可能是二维,还有可能是多维,然后选择合适的图表类型进行展示,例如“线状图”、“柱状图”、“饼状图”、“雷达图”、“中国地图”等等。
以上是通用的大数据平台整个数据处理的方式,接下来就从诸葛io与通用的数据平台的差异入手,然后带入诸葛io的技术设计。诸葛io的整套技术能够做到的是,对企业分析流程的效率提升。
大多数企业的分析现状
自建或者第三方统计平台(百度统计/友盟/Talkingdata)+ 数据BI团队(早期团队人数很少,甚至是一两个工程师兼任);
自建或者第三方统计平台:大多都是汇总统计指标平台。对通用指标(例如PV、UV、DAU、留存)的计算,对企业设定好的业务行为(打车、订单、参与、金额)等汇总统计人数或者次数,数据平台存储的都是指标的汇总结果。指标的选择和下钻分析都需要数据团队的支撑。
数据BI团队:完成基础数据平台的搭建,并且梳理核心业务分析目标,对基础数据进行采集建模,并完成各个部门的分析需求。
所以最上面那张图就是大多数企业现在的分析现状:
基本上先统一由大数据部门整理输出各部门日常固定的数据指标,然后做个可视化,比如一个简单的页面
如果有新的分析需求,已经建模好的,那么数据团队就需要根据业务去写SQL然后得到结果,如果没有建模好的,就需要开始采集原始数据,然后重新开始清洗,这样一个过程,往往都比较反复耗时,分析效率很低
主要原因是,这样一种分析流程,是由固定的业务指标驱动数据的采集和处理,然后数据处理的过程基本上都是多维汇总的统计和计算
所以也就造成了问题:各个业务部门的分析需求需要依赖数据团队专业的数据分析能力进行问题建模,并且依赖他们SQL语言或者代码能力完成分析目标。但数据部门往往也有核心的分析需求和任务,所以公司变大过程中很多问题变得很低效。
诸葛io平台技术的演化之路
诸葛io的整个数据处理也是符合上面的整个流程,和其他数据分析平台,尤其是传统数据平台,按照处理过程抽象的差异主要如下:
诸葛io的分析能力远远大于目前大多数的统计平台,诸葛io把很多深入的分析场景,依赖数据团队进行建模以及SQL/代码等专业能力,变成了可视化的分析组件。这样极大的提高了企业的数据分析效率,并且还有专业的数据分析看板,辅助企业梳理了解分析需求和目标。
诸葛io的亮点如下:
在线实时多维查询,用交互式组件替代SQL和代码。例如以前需要SQL完成的查询,现在只需要如下:
丰富的分析组件,支持市场/产品/运营部门的大多数场景分析;
用户群:根据用户的新增情况,触发行为,用户字段筛选待分析的用户;
事件分析:对某个业务行为的参与情况;
漏斗分析:用户的转化情况;
用户行为路径:用户的行为路径;
自定义留存:某个功能或者某个业务用户的持续参与;
分析API和数据API,完全掌控您的数据,基于诸葛io灵活扩展:
除此之外,细致入微的产品设计,贯穿分析过程,例如:
点击数字到用户画像的洞察;
漏斗的无序和有序;
用户群“新增后X天”;
还有更多的场景,可以去感受和体验;
这样一来,回到刚刚的图片:
在建模时非常抽象,并且基于独立用户跟踪了整个业务的流程,所以不只是指标任意的配置可视化,很多以前依赖于SQL和清洗代码的逻辑,也变成了交互式的查询组件,所以能提高效率,那诸葛io是怎么做到的呢?先来看看整体的架构:
首先看看数据采集端,提供丰富的接口和SDK,能够采集到企业各个有用户行为数据的地方,目前来讲,主要分为以下:
Android客户端 : Android SDK
iOS客户端 : iOS SDK
网站或微站H5 :Javascript SDK
小程序:小程序SDK
日志:服务端Restful接口
CRM数据库 :导入工具
也就是采用了“PUSH”模式,各个端采集用户的行为,然后再按照规则发送给数据收集中心,各个端也就写了一些SDK,让开发者调用采集,然后就是数据收集端:
上图是据收集架构: 核心就是LVS+Nginx+Lua,诸葛io没有用比较重的后端语言来采集,而是选择了比较轻的Lua脚本语言,在nginx中集成就能完成高并发的复杂,LVS做解析服务器的负载均衡,后面是多个Nginx,然后Nginx本身就是高性能高并发服务器,所以并发的承载能力非常强。
诸葛io采用的是HTTPS加密传输,以及支持HTTP2协议:
采用HTTPS的原因是,防止数据在传输过程中被抓包截获;
采用HTTP2协议,服务端的处理性能能够极大的提升,连接也有优化。
使用LVS的原因是,虽然Nginx的性能很高,但是在高并发压力情况下,能够快速添加Nginx节点,再加上数据采集是异步,所以大流量情况下,LVS+Nginx基本上都能保证不会出现连接等待的情况了。
Lua是一种轻型的脚本语言,直接在nginx配置中嵌入,在很多游戏的服务端架构以及电商秒杀的架构中使用。服务端接收到上传数据之后,Lua会进行解析,并且添加上传时一些信息(ip,服务端时间,User-Agent)等等,然后push到Kafka的集群。
这套架构也是在诸葛io的日上传数据量逐步上涨过程中,逐步演化出来的。
简单来讲,数据采集具有高并发、高伸缩性性、HTTPS安全传输的特点。
然后就是数据清洗。诸葛io采集到的数据会有以下几个问题需要处理:
- 垃圾数据:乱码或者埋点错误产生的数据
- 作弊数据:恶意进行注入伪造的数据
- 淘汰数据 : 已经弃用的SDK版本数据
所以会完成对于上述数据的清洗。清洗完的数据,诸葛io还会进行一些信息加工,包括但不限于以下:
-识别用户和设备的身份关系
-加工字段:地理位置、UTM推广信息、设备、系统版本(网站或者微站根据UA)
-事件行为匹配系统id
加工信息之后,还会对数据按照数据模型进行格式转化和预计算处理,得到所需要的最优于查询的数据。
关于数据清洗加工部分,和其他大数据技术还有一些差异:
-独立的用户行为跟踪;
-基于用户身份的数据整合;
-精准的用户和设备关系识别;
-事件的标签化;
接下来是数据加载。数据加载的过程,就是把数据处理后的结果写入存储,这里,诸葛io主要加载的目标位置有以下:
原始数据备份:
AWS S3
HDFS(私有部署)加工后的数据:
AWS S3
HDFS(私有部署)模型数据仓库
Redshift
Greenplum(私有部署)
因为诸葛io同时支持SaaS和私有部署,私有部署采用的方案会有差异,S3和HDFS都是文件访问,所以业务层基本是一致,S3是因为存储成本低,HDFS是大多数企业的Hadoop平台。加工后的数据同上。
模型仓库,Redshift和Greenplum都是基于PostgreSQL的。加上自定义函数,在数据访问层保持一致。
然后在建模分析的过程,建模分析的核心是诸葛io的数据模型,也就是数据仓库设计,诸葛io现在的核心数据模型,分为以下主题:
用户:用户的属性信息;事件/行为(包含属性信息和触发环境);行为发生平台:平台(设备)的基础信息;
诸葛io的数据模型底层都已经对用户和行为进行建模,从上层指标的计算,可以直接下钻用户群体,并且对于用户的行为历史也有完整的还原和实时的洞察。
传统的数据分析平台都以设备进行统计,诸葛io是基于用户的,所以用户和设备的关系精准还原。
诸葛io的数据查询和访问:
数据访问层,是诸葛io把基于数据仓库的SQL查询访问抽象了一层服务,分为对内和对外两部分,用以控制对数据访问的统一管理。主要分为两部分:
对内是通过统一的API服务来进行访问
对外是有Open API的开放平台
可视化查询主要是通过诸葛io的网站进行完成,并且在技术上也是基于数据访问层实现。可视化在诸葛主要分为两部分:
1. 数据指标展现的可视化
2. 查询操作的可视化
指标展现可视化,包括不限于表格、柱状图、线图、漏斗。回到整个架构上:
可以看到有消息中心,诸葛io的消息中心是以Kafka为中心进行设计的。
消息中心主要处理包含以下业务消息的汇集和分发:
-各种SDK或者工具上传的数;
-数据清洗产生的中间的数据;
-模型结果数据;
-备份数据;
-其他流式处理数据;
Kafka具有多消费组的特点,也就意味着,可以在不同应用场景下对统一数据进行多种处理,并产生多种应用,例如下面场景:
收集到各种数据,并会添加到Kafka消息中心,然后会有以下不同消费应用。
实时计算中心,诸葛io用的是Spark Streaming进行处理,也有其他套件辅助进行一些数据挖掘,实时数据和关系缓存,诸葛io用的是Codis以及SSDB,Codis是分布式的Redis实现框架(由前豌豆荚团队开源)诸葛io会用来做分布式的消息以及状态存储,而SSDB是基于Redis协议的硬盘实现(作者是懒投资的CTO吴总)诸葛io会存储一些键值比较大或者多的数据,例如实时数据以及数据缓存。
基础存储刚刚讲过了主要是S3,索引用的是Elasticsearch,比如查询时的提示等等,在线多维实时数据处理查询就是Redshift和Greenplum了,然后统一了整个数据访问层以及API,并且分为内部和外部API,对外就是网站和开放平台了。
文章来源:http://mp.weixin.qq.com/s/-ABHRWcLmQObs-Qgh7Y5YQ
大数据平台的技术演化之路 诸葛io平台设计实例的更多相关文章
- 品友互动大数据平台的技术演化 https://www.sohu.com/a/191202836_99982360
品友互动大数据平台的技术演化
- APP技术演化的路
谈起APP,大家都太熟悉不过了,今天想谈谈这么多年技术演化的路. 早期一些大公司就开始做一些APP了,例如facebook.google等国外的公司就已经开发这个技术路线,那个时候的APP数量很少,基 ...
- 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
http://www.d1net.com/bigdata/news/325426.html 2014年11月,本文作者有机会和ZestFinance的创始人和首席执行官梅里尔(Douglas C.Me ...
- 细说Mammut大数据系统测试环境Docker迁移之路
欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 最近几个月花了比较多精力在项目的测试环境Docker迁移上,从最初的docker"门外汉"到现在组里的同学(大部分测试及少 ...
- 大数据项目相关技术栈(Hadoop周边技术)
J2EE 框架Spring 开发框架 + SSH or SSM Lucene 索引和查询IKAnalyzer 分词Webmagic 爬虫 ETL工具:KettleSqoop 结构化数据库-hadoop ...
- 亿级用户百TB级数据的AIOps 技术实践之路
关于面临的挑战 "因为专业性强,我认为反而让交互方式变简单了,打个点餐的比方,软件1.0阶段是,我要吃鱼香肉丝,我要吃辣的或是素一点的,根据清晰的接口上菜.而软件2.0阶段就是,我今天想吃开 ...
- hadoop大数据基础框架技术详解
一.什么是大数据 进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB ...
- 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
数据中心存储演化——FCoE 数据中心三大基础:主机 网络 存储 在云计算推动下,存储基础架构在发生演变 传统存储结构DAS.SAN在发展中遇到了布线复杂.能耗增多的缺点(原生性),需要对架构做根 ...
- 大数据时代的技术hive:hive介绍
我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...
随机推荐
- 2 new出的对象 prototype与__proto__
对象没有原型对象,函数才有 new出的对象,this的会重新创建,二prototype并不会重新创建,而是追溯原型链的方式进行继承 var Book=function(id,bookname,pric ...
- 解决Mysql Workbench的Error Code: 1175错误 无法删除数据
使用workbench,如果你要批量更新或删除数据,一般会报“ Error Code: 1175 You are using safe update mode and you tried to upd ...
- Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.G ...
- Spark开发环境
1. Win7下利用Intellij IDEA构建Spark开发环境 前提:Intellij IDEA Community 免费版下载(最新版14.0.1),Scala插件下载(最新版scala-in ...
- Linux grep命令详解[备份]
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- 【树】Construct Binary Tree from Preorder and Inorder Traversal
题目: Given preorder and inorder traversal of a tree, construct the binary tree. 思路: 线序序列的第一个元素就是树根,然后 ...
- SPSS学习系列之SPSS Modeler Server是什么?
不多说,直接上干货! SPSS Modeler 使用客户端/服务器体系结构将资源集约型操作的请求分发给功能强大的服务器软件,因而使大数据集的传输速度大大加快.除了此处所列的产品和更新,也可能还有其他可 ...
- 读取Java注解类型
参考文章: (1)https://www.cnblogs.com/extjs4/p/6411507.html 关于注解第一篇 (2)https://www.cnblogs.com/extjs4/p/6 ...
- manjaro i3 sound soft
sudo pacman -S pavucontrol sudo pacman -S pulseaudio # 为了启动 fcitx 输入法…… #exec --no-startup-id LANG=& ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...