基于rsync+sersync数据实时双向同步的设计(一)


大数据最广泛的一个应用场景就是构建数据仓库,数据仓库中的数据生命周期一般包括:数据的获取,数据的分类,数据的解析清洗,上传到hdfs。或多或少,主要都是这几个过程,asiainfo这边的离线分析的数据,通过远程接口机接入(文件或压缩包的形式),部通过部署的可视化的etl工具(木兰工具),定时去扫描远程接口机的文件,然后开启ftp服务,ftp到本地,在进行解析,加工,入库。定时包括天级别,小时级别,分钟级别。

这种定时去扫描拉取的策略明显是有很大弊端的。定时开启ftp服务区拉取数据,会导致某段时间的负载激增,机器负载严重的情况下,ftp就像小水管一样,很慢很慢,导致数据延迟,这既没有合理利用机器资源,也可能造成数据延迟。而且扫描文件的时候是根据文件日期去匹配的,这会导致一个问题,就是扫描的时候个别文件还没过来,我只ftp了扫描的文件,将后过来的符合规则的文件遗漏在远程接口机上,最终造成数据积压。

这个时候,数据实时同步,就显得尤为重要,拉取的过程其实就是一个同步的过程。

为什么要用rsync+sersync的架构?
1.sersync是基于inotify开发的,类似于inotify-tools
2.sersynvc可以记录下被监听目录中发生变化的(增删改)具体到某一个文件或目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。速度很快,所以数据量小的时候可以用inotify-tools数据量大的话最好用sersync

方案:
通过rsync+sersync来实现数据的双向同步
rsync:数据同步工具
sersync:封装了inotify-tools,监控文件夹的变化,并且可以明确监控到哪个文件变化,通过事件触发(create,open,modify,closeWrite,close,moveFrom,moveTo,delete)rsync同步工具的工作。

方案优点:
合理运用机器资源,不会出现机器负载脉冲式变化
开启服务,实时监控remote端数据文件的变化,实时同步到本地,减少数据延迟
支持失败重试,断点续传,可以根据机器资源变化,设定线程池大小
本地处理后的数据会在remote端同步删除,不会误删数据
同步数据完整不改变(bin的传输方式)
可以维护同步数据的列表,为后续需求开发预留(监控)

你可能感兴趣的:(hadoop,linux)