任何数据分析平台都必须有数据采集模块,它在整个平台的位置处于最底层,因此稳定性和实时性是评估它最重要的二个维度。试想,用户动不动就提取不到所需的分析数据,亦或在急需数据的时候却不能及时的提取,都会严重影响用户的体验。
我所参与开发的通信数据分析平台,主要的数据来源是各种网元节点生成的日志文件。因此,在网元节点和分析平台之间,如何做到及时稳定的进行日志文件的同步,是需要考虑的核心问题。
批量采集
最开始的阶段,平台对实时性要求还不那么高,我们采用了批量采集模式,即在crontab任务中,制定FTP批量下载任务。
批量采集模式上线之初,除了及时性差之外,一切正常。但是随着接入的数据不断增加,我们发现了该模式下没有预料到的一个问题,即给解析服务器带来了负荷上的脉冲。在文件下载的同时,解析任务也在工作,这个阶段非常的消耗资源。于是,尝试考虑如果能做到削峰填谷,岂不是能更好的利用服务器资源。
面对及时性差和负荷脉冲的两座大山,决定有必要切换到实时采集模式。
实时采集
经过技术上的探索,发现inotify + rsync组合可以满足需求。
下图是部署示意图,工作模式简单来说,即网元节点(client端),监控指定目录,同步文件采集服务器(server端)。
平台的最终目标是能够实现数据的实时流处理和分析,因此,这次采集模块的技术迭代是必要的,也是最基础的一步。这步完成之后,后面可以把精力放在处理模块的实时性改造上了。