跨系统类实时传输数据解决办法

本文探讨了跨系统实时数据传输的两种常见方法——异步推送和同步推送,以及系统定时拉取。作者建议避免复杂的异步推送,因其实现困难且运维成本高,推荐使用系统定时拉取,强调了及时性、低耦合性和容错性的优点。
摘要由CSDN通过智能技术生成

跨系统类实时传输数据解决办法

目前常规的做法有下面2种

  • 数据提供系统异步实时推送、同步实时推送
  • 目标系统定时拉取

两者要看具体的业务场景,除了同步实时推送,其他的实现方式都可以归类为类实时,因为网络传输到目标系统处理逻辑,是需要时间的

技术名词解释

  • 异步实时推送

数据提供系统的新增、修改、删除,在不影响自身逻辑的情况下,异步调用目标方接口,进行推送数据,记录对方处理的结果状态,有稍微的延迟,实现起来非常复杂,要考虑幂等性。如果对于有序修改的业务场景:如商品价格的多次修改,其中有一次失败,基于重处理的机制策略要求就非常高,系统实现太过复杂,运维成本巨大。

  • 同步实时推送

数据提供系统的新增、修改、删除,在不影响自身逻辑的情况下,同步调用目标方接口,进行推送数据,要考虑幂等性,对方处理成功后,数据提供系统再提交事物,好处是及时性高,缺点是系统耦合性太高,有一方系统出问题就不能作业。

  • 系统定时拉取

大家看到这个,有些人可能觉得太low了,有些人可能觉得太消耗目标系统资源了,还有及时性差、重复数据的问题,常规的做法确实存在这种情况,但是大家不得不承认:是真得好用,起码不会丢数据吧!!!

技术细节

异步同步推送实现复杂,同步推送系统之间的耦合性太高,两者要看具体使用场景,我个人建议不要再使用推送方案了,毕竟mysql主从同步都是从库拉主库的binlog数据,我们为什么还要使用这种不符合常规操作的技术方案,我推荐使用系统定时拉取方案,优点:及时性比较高,不会因为系统停机维护从而需要重新推送、重新拉取的操作。方便排除问题,不会因为网络原因导致无法传输数据。下面我就不贴具体代码了,简单的讲一下:

  • 新建系统配置表

加入类型是为了支持更多的拉取任务,批次间隔时间是为了解决某个时间段数据量过大内存溢出的问题,目标系统一般会分批返回数据,很少出现全量给的。预警阈值是为了告知异常通知给管理员。

在这里插入图片描述

实现讲解

系统定时拉取数据一般是通过时间区间来获取的,第一次请求也存在拉取全量数据的情况,这个时候系统管理员可以按照需求来填写“开始时间”,进行数据初始化。批次时间可以根据自己系统内存处理数据量来设置大小,这里默认30分钟。

如果开始时间-结束时间(当前运行时间)<30分钟,就不需要分批累加开始时间了,如果处理成功,修改配置表状态为30(成功)开始时间替换成上次运行的结束时间,预警阈值置0。这里程序需要记录整个处理的时长,如果<2s,系统就动态休眠(2s-运行时长),超过2s就不休眠,直接进行下一次任务。可以看出整个过程是阻塞式获取,及时性是非常好的。

处理数据时要注意先删后增,保证数据唯一性。

如果开始时间-结束时间(当前运行时间)>=30分钟,就需要把开始时间-结束时间(当前运行时间)拆分成多个时间段,每个时间段成功后就修改配置表开始时间加30分钟(提交事物),如果处理失败,后面不断阻塞式重试,并且配置表记录重试次数(开始时间不替换,保持上一次运行的值),达到预警阈值后,通知管理员处理异常。

小结

不要闭门造车,多看看行业做法

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值