微服务间如何选择推送和拉取数据

摘要:
例如,订单系统中的订单付款将转移到供应链系统进行交付和分配。数据需要多样化,实时性不强,因此最好使用消费者侧拉动式CRM系统来拉动订单数据进行显示,而CRM系统需要做实时性较弱的报告显示或操作。为了提高性能,可以以分页的形式提取数据,并通过队列分组处理订单数据。对于重复的数据,可以以时间戳的形式记录,时间戳应在CRM系统中保持不变。消费者服务可以在第一时间获得更新的数据。

在现在的系统架构中,服务间会大量采用消息来进行通信。在消息系统中,一般有两种消费模式:生产端推送和消费端拉取。那么在什么情况下,我们采用生产端推送,什么情况下换为消费端拉取呢?今天本篇文章就针对这个话题谈谈我个人的想法,希望对大家有用。

简单来说,是由实际业务决定、包括通信间的双方系统的技术实现、双方系统的架构和性能,看日后是否此业务会经常修改等多方面决定的。

数据是动态的且实时性强,宜采用生产端推送

订单系统有一些订单数据,供应链系统需要订单系统的订单数据,并做后续处理。例如, 订单系统的订单支付完成之后会转到供应链系统中做出库,配送等处理。

我相信绝大多数做供应链系统的时候,都会决定在订单系统的订单付完款之后,把订单数据推送到供应链系统中。如果要让供应链系统去轮循地查询订单系统的订单数据是否被付款,不仅不能保证发货的实时性和准确性,而且系统性能上也会有不必要的消耗,供应链系统还要被迫处理重复订单的问题。但注意一点的是,如果将推送设计成实时推送也是不合适的,推送成功与否不应是判断订单是否成功的条件,供应链系统与订单系统并不是强关联的,正确的做法是订单付完款的动作后,做推送的动作设计成异步,通过消息机制,推送到供应链系统,供应链系统在接收到订单后也会反馈一个接收成功的消息给订单系统,进入发货流程。

数据有多样性需求且实时性不强,宜采用消费端拉取

CRM系统需要拉取订单数据展示,CRM系统要做一个报表展示或实时性不强的操作。这种情况就可以设计成系统主动去拉订单系统的订单数据,然后根据CRM系统的业务维度,分析订单数据,展示订单数据。这样做可减轻订单系统的压力。为了提升性能,可以采取分页形式来拉取数据,通过队列分组处理订单数据,对于重复数据,可以记录时间戳的形式来解决,时间戳要持久化在CRM系统中。

最后我们来总结一下推送和拉取的优缺点。

推送的优点

1. 实时性高。消费者服务能第一时间拿到更新数据。

2. 服务压力小。相比于拉取模式,每次推送都有数据,避免空轮询消耗资源。

3. 交互简单。推送模式中,消费者只需要提供接受数据接口即可,不需要额外的开销。

推送的缺点

不能确保发送成功,如果生产端推送失败,需要生产端维护失败的推送。

缺乏数据的多样性,推送的数据的内容格式一致,可能会有比较大的数据冗余存在,不能根据消费端的不同需求进行变化。

总结

前面简单总结了一些推送和拉取的适用场景和区别。实际工作中,服务之间的交互是会采用混合式的,
例如,“先推后拉”,“先拉后推”等等,在不同的业务场景下,服务间的交互方式会做对应的调整。
大家也可以谈谈你工作中采用的服务交互方法,欢迎留言。

免责声明:文章转载自《微服务间如何选择推送和拉取数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF 自定义滚动条样式Weblogic12c 单节点安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据、分布式系统中经常会使用到Zookeeper,它是微服务、分布式系统中必不可少的分布式协调框架。它的作用体现在分布式系统中解决了配置中心的问题,以及解决了在分布式环境中不同进程之间争夺资源的问题,也就是分布式锁的功能以及分布式消息队列功能等...

Hive/Impala批量插入数据

问题描述 现有几千条数据,需要插入到对应的Hive/Impala表中。安排给了一个同事做,但是等了好久,反馈还没有插入完成……看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际执行起来,速度很慢,每条数据都要耗时1s左右。比在MySQL中批量插入数据慢多了,因而抱怨Impala不太好用 问题分析 首先,必须明确的是,把每条数据处理成...

破解数据匮乏现状:纵向联邦学习场景下的逻辑回归(LR)

摘要:主要介绍了华为云可信智能计算服务(TICS)采用的纵向联邦逻辑回归(LR)方案。 本文分享自华为云社区《纵向联邦学习场景下的逻辑回归(LR)》,作者: 汽水要加冰。 海量训练数据是人工智能技术在各个领域成功应用的重要条件。例如,计算机视觉和商务经融推荐系统中的 AI 算法都依靠大规模标记良好的数据才能获得较好的推理效果。然而在医疗、银行以及一些政务...

如何将txt中的数据整理到Matlab中画图

需求:我有一个如下图所示格式错乱的txt文本,现在我需要用matlab把其中的某些列画成图,具体步骤如下: 1.txt文本中的初始值整理好; 2.新建excel文件,数据-导入-选择txt文档-导入; 这里需要说明的是:excel文件必须放在MATLAB的主文件夹下,如上图所示的位置。 下面开始导入数据: 一直下一步知道完成。 3.选定排序,对B...

tcp keepalive

部分信息可以看UNIX网络编程第157页, 摘录过来: 在一个正常的TCP连接上,当我们用无限等待的方式调用下面的Recv或Send的时候: ret=recv(s,&buf[idx],nLeft,flags); 或 ret=send(s,&buf[idx],nLeft,flags); 如果TCP连接被对方正常关闭,也就是说,对方是正确地调用...

C#程序员开发WinForm必须知道的 Window 消息大全(转)

消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows...