马云曾在一次演讲中提到:“人类正从IT时代走向DT时代”。所谓DT时代,即大数据时代。
大数据时代已经来临,几乎所有企业都已经意识到了数据中蕴含的巨大价值,纷纷组建自己的大数据团队,收集并分析用户数据,挖掘潜在价值。那么,大数据的价值到底体现在那些方面呢?我认为,其价值主要包含以下几点:
1.辅助决策:分析用户的各种行为,形成统计分析报表,辅助日常产品运营和调优,管理层可以通过数据报表了解公司业务发展状况,从而制定相应的战略决策。
2.驱动业务发展:通过数据更加了解用户诉求和产品反响。利用行为日志还原用户操作场景,理解用户决策模式,发掘产品不足,优化产品结构,提升用户体验。
3.实现产品智能和增强变现能力:细分用户群体,精准化运营。结合用户画像体系,针对细分人群,采用不同的运营策略,提升运营效率,节约成本;挖掘用户喜好,为单个用户提供个性化的服务,“投其所好”,提供更好的产品体验,实现产品智能,有效促成交易,增加营收。
图1.大数据金字塔模型(转自极数蜗牛)
大数据的价值演化过程,如上图1所示。要想从大数据中挖掘出巨大的潜在价值的前提,便是可以尽可能多地收集到需要的数据。本期我们将通过一系列文章介绍用户行为数据收集系统该如何设计,共分4篇,分别介绍整体架构设计、客户端SDK设计、数据接收端设计、监控&高可用设计。本文为第一篇,介绍整体的架构设计。
系统目标与核心功能
数据收集系统的核心设计目标,一言以蔽之,以尽可能小的资源成本及时稳定地收集尽可能多的数据。其核心功能和要点如下。
01
收集尽可能多的数据
大数据时代,数据为王。要想让数据发挥其价值,一方面需要数据量足够大,这样才能有足够多的分析样本,才具备统计学上的意义。另一方面需要数据维度尽可能全面,数据质量尽可能高。因此,在进行用户行为埋点时,要尽可能多地围绕重点业务收集相关信息,尤其是核心业务信息,因为收集数据的最终目标是进行业务分析,从而挖掘数据价值,用于优化产品和驱动业务发展。例如,对于电商行业,核心的业务信息便是围绕交易的各种维度数据,如用户属性、商品属性、消费场景、订单属性、支付信息等,围绕核心数据的分析,可以帮助有效促成交易,价值不言而喻。
02
节省资源
收集的数据量越大,也就意味着需要更多的网络带宽来进行传输,更多的存储成本来将数据落盘存储,更多的计算分析资源来对数据进行挖掘。但是资源总是有限的,因此提升资源的利用率,节省资源,显得尤为重要。这涉及到数据压缩、数据合并、合理的文件格式等问题,在后续文章中会详细介绍。
03
高可用性
从用户端收集到的数据是源源不断的输送到服务端的,接收服务短时间宕机,就可能会造成几万甚至几百万的数据丢失,造成数据的不连续,从而导致质量下降。因此服务端的高可用性是稳定收集的重要前提。因此,在进行架构设计时,要充分考虑高可用性的设计,同时对监控和自动化处理,也有一定的要求。
04
可追踪性
数据的流转处理需要经历多个环节,每条数据都要有自己的ID,作为数据的唯一性标识,并且带有一定的中间处理环节的信息,这样才能具备可追溯性。这点非常重要,在数据ETL过程中,对数据进行安全校验、剔除重复、过滤脏数据都需要依赖这套机制。
05
实时性
大数据的其中一个重要特性就是,数据的时效性。数据越是新鲜,其价值越大,因为距离用户行为发生的时间点越近,反映用户的最新情况,可以做的事情也就越多。因此,保证实时性也是系统设计的一个重点,其核心点在于尽可能缩短中间环节的耗时,减少链路上的损耗。
数据的流转过程与模块组成
数据收集的大致过程为: 用户行为产生数据,由客户端SDK进行一系列的处理后,通过网络上报,中间需要经过DNS解析和负载均衡机制,到达数据接收端,再由接收端进行简单处理后,落盘存储或进入其他系统。如图2所示:
图2.数据流转过程
由上图也可以看出,数据收集过程,主要分为3个模块:客户端SDK、DNS&负载均衡、数据接收端。3个模块的具体设计会在后续的文章中详细介绍。本文将从整体上介绍他们是如何配合的。 首先,数据是由用户产生的,因此需要将埋点代码与用户的业务行为进行绑定,在特定的业务时机收集相关信息。之后,需要将这些数据统一传送给客户端SDK,由SDK对数据进行规整处理、加密、生成校验信息、重复合并等处理,再通过网络进行上报。由于上报的客户端数量庞大,因此上报时首先便是由DNS进行一轮负载均衡,同一个域名通过多个IP进行分流,其次是有专门的负载均衡服务,在接收到数据后分配给数据接收集群来处理,集群内每个处理器的角色都是对等的,方便后续进行水平扩展,收到数据后需要做简单处理,打上追溯码和进行数据合法性校验等,然后进行存储或流入其他系统。
系统设计时的矛盾点
01
效率与实时
为了追求数据的实时性,必然要求产生数据后,立即上报,但是这样会产生大量的网络请求,传输效率自然会下降,同时在高峰时期会对服务端造成巨大的并发压力。因此,合理的策略是对日志进行分级处理,不同级别的日志采用不同的上传策略,只有少数实时价值巨大、时效性强的行为日志采用立即上传策略,其他则选择现在客户端先做聚合,然后再一起上报给服务端。例如,在视频服务应用内,播放行为、广告曝光点击属于实时价值大,时效性强的数据,需要立即上传到服务端,但是如升级行为、页面浏览点击、登录注册、评论等时效性不强,可以现在客户端聚合,然后再多条一起上报到服务端。
02
收集更多数据与节省资源
大数据时代,数据是一切的基础,尽可能多的收集数据,才能让这个基础更丰满。《大数据时代》的作者维克托·迈尔-舍恩伯格的观点是,要尽可能多地收集数据,尽管你还不知道它的价值是什么。但是更多的数据,也就意味着需要消耗更多的资源。这显然也是一个很现实的问题。我们采取的策略是,面向分析收集数据,如果没有人力或者计算能力分析,收集到的数据也只是一堆数据而已,而且随着时间推移,其价值会逐渐下降。有些数据,比如版本功能评估的数据,我们会在版本刚上线的时候收集,但是过一段时间版本稳定且评估结束后,关闭其收集开关,从而节省相关的资源。
03
高可用性与系统复杂度
数据收集系统要足够稳定,因为任何一次故障,损失的数据量可能都是巨大的,况且错误的数据有可能会引发错误的决策。因此,在系统设计时会考虑高可用的方案,但是这又可能会增大了系统的复杂程度,使系统变得难以维护。我们的策略是,不是让系统本身来实现高可用,而是由监控系统承担一部分的高可用性工作。当发生问题时,监控系统会第一时间发现,并自动处理故障,从而实现高可用性。
上文介绍了整体架构设计时要考虑的关键点和注意事项,相信大家对如何设计用户行为数据收集系统有了一个大致的概念。后续的文章,我会详细介绍下各个模块的具体设计。下一篇会详细介绍客户端SDK的设计方案。
END
更多精彩内容
长按扫码可关注
继续阅读
阅读原文