很多朋友很想知道神策分析(Sensors Analytics)是如何实现在每天十亿级别数据的情况下可以做到秒级导入和秒级查询,是如何做到不需要预先指定指标和维度就能实现多维查询的。今天正好在这篇文章里面,和大家交流一下我们的技术选型与具体的架构实现,希望能够对大家有所启发。
当然,脱离客户需求谈产品设计,不太现实;而脱离产品设计,纯粹谈技术选型与架构实现,也不现实。因此,我们首先会跟大家探讨一下神策分析从产品角度,是如何从客户需求抽象产品设计的,而产品设计,又是如何确定我们的技术选型。然后,我们则会从产品的整体架构出发,逐步介绍每一个模块和子系统的具体实现。
在决定做神策分析这个产品的最开始,我们就准备满足这样一类客户的需求,即对数据的安全与隐私有顾虑,或者希望能够积累自己的用户行为数据资产,并且完成数据的深度应用与二次开发。

因此,这就决定我们的产品需要是一个可以私有化部署的产品,可以部署在客户的内网中,这基本也构成是我们产品的核心设计理念。
而正因为需要私有化部署,我们在设计上,也必须考虑到因为这一点而带来的一系列在运维、审计方面的技术调整;同时,为了方便客户能够基于我们的系统二次开发,充分发挥数据的价值,保留最细粒度原始数据,同时,在数据处理从采集、传输到存储、查询的各个环节都对外提供普适易用的接口,降低客户的开发代价。
数据分析是一个很大的领域,而我们最核心地是满足客户对于用户行为分析这一个特定领域的需求。帮助他们回答这样一些问题:用户使用产品的活跃情况和频次分布;核心流程转化情况;分析上周流失用户的行为特征等。同时,我们期望神策分析可以适应不同的行业的不同产品,而这些不同产品肯定又会有不同的技术架构。
针对这种需求,我们在技术上做了两个关键性的决策:首先,我们对分析模型进行抽象,期望用少数几个分析模型能够满足大部分需求,而剩余未满足的需求则通过自定义查询来实现,这样的好处,就是可以集中精力来优化查询速度;其次,为了减少 ETL 的代价,我们尽量简化数据模型,从而能够减少 ETL 的环节,保证神策分析产品在不同行业的适用性。
随着互联网的发展越来越深入,一个用户在同一个产品上的行为,已经需要从多个不同的来源来进行采集了,这些来源包括 iOS、安卓、Web、H5、微信、业务数据库、第三方配送服务、客服系统等。不仅仅是需要采集到,还需要能够将同一个用户在不同来源的数据进行打通。
针对这种需求,神策分析决定提供全端的数据采集方案,需要包括主流的客户端平台和主流语言的 SDK,Restful 风格的数据导入 API,全埋点与可视化埋点等埋点辅助手段。同时,为了方便埋点的迭代与管理,还需要在这方面下大力气。同时,为了解决跨屏贯通一个用户的问题,还需要提供 ID-Mapping 方面的解决方案。
相比较传统的网页或者 App 统计工具,如百度统计、Google Analytics 等,我们想解决的是用户更加灵活更加深入的分析需求。例如,分析不同地域、不同品类的销量对比;分析比较不同客服的服务质量;对比不同年龄段用户的转化情况;分渠道分析转化效果;察看使用不同功能后对留存的影响等。

针对这一需求,神策分析需要提供全功能的多维分析能力,能够满足如下技术指标:维度、指标不需要预定义;漏斗、留存、回访分析都可以任意下钻。同时,这也决定了我们不能够存储聚合数据,而是应该存储最细粒度的明细数据。当然,这一决策也是受到私有化部署提供数据进行二次开发的影响。