记一次数据同步方案的选择处理
系统的数据来源是其他系统,要么通过第三方接口拿数据,要么把数据同步过来进行处理查询
两种方案选择
因为需要的数据源在其他系统里面,所以最大的阻碍其实是数据,要么和其他系统合作,两边对接api接口拿数据,要么从其他系统同步数据过来,自己去处理逻辑,两者互有利弊。综合考虑各种因素,最终选择同步数据过来自己去处理。
数据处理方案
数据情况
同步的数据量查看了一下,大概几百万条,同时一个月数据量几万条,而且是增长很快,可能到后面就是一天几万条。数据的一致性要求相对来说不太高,数据从产生到使用间隔大概三四天,但是也不排除只有一天的场景。同时数据有明显冷热分层,冷数据基本不使用,热数据使用频率非常高。
采用方案
所以基于数据量,一致性,数据增长率,以及系统的负载情况考虑,两种方案结合起来,白天增量同步,晚上全量同步。简单讲就是系统压力不大的时候采用全量同步,大的时候采用增量。同时同步的过程中还要注意错误处理机制,重试机制,以及数据的幂等性等一系列情况的处理。 同时为了进一步减少系统压力,根据业务从源头对数据进行筛减,一些明显没用的数据直接过滤掉不进行同步,只同步业务最终用得到的数据。
总结
数据同步方案需要考虑数据量,数据的一致性,数据的增长率,数据库的负载率等选择合适的方案,同时根据业务对同步方案进行深度定制,从源头到最终使用一步步减少数据的同步量,如何选择合适的同步时间点。同时还要考虑别把第三方的系统给查崩了,造成误伤,保证最后数据使用的时候没有问题。最后的最后确保别人从你接口拿出去的数据你做好了日志记录,免得出了问题找的满头大汗,因为这就不是你的锅 :)
以下是方案情况对比
第三方接口
优点 :直接调用别人的接口即可,不需要进行数据同步,减少工作量,(增加别人系统工作量),对接一下dto,参数即可
缺点:引入了第三方接口,增加了不稳定,而且是个黑盒,出了问题,逻辑都不清楚,同时需要我们做好日志的记录,以及重试的逻辑等。假如第三方接口挂了也会被牵连(深有感触),同时网络io相对来说增加了整个请求时长。
数据同步
优点 :数据同步过来在本地,处理逻辑清楚,出了问题方便排查,同时减少网络io的时长,第三方接口挂了没影响。
缺点 :要进行数据同步的开发工作,保证数据的及时性,完整性,考虑数据同步的性能问题等。
数据同步方案选择
全量同步
将数据全量从其他系统复制过来
优点:减少数据传输量,节省宽带和时间;提高同步效率,仅更新变化的部分,更少时间完成任务;对数据实时性要求的高系统比较合适;
缺点:数据较为滞后,因为有部分数据可能手动更改从而无法及时同步;容易出现数据冲突和一致性问题;实现方案较为复杂
增量同步
优点:同步简单粗暴,直接复制所有数据即可;同时数据一致性高,不用担心冲突;实现方案简单