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

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

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

 

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

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

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

 

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

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

 

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

推送的优点

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

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

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

推送的缺点

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

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

总结

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

 

时间: 2024-11-05 17:34:23

微服务间如何选择推送和拉取数据的相关文章

Android推送服务:百度云推送

一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做客户端(Client).相比通过轮询来获取新消息或通知,推送无论是在对客户端的资源消耗还是设备耗电量来说都比轮询要好,所以,目前绝大多数需要及时消息推送的App都采用Push的方式来进行消息通知. Android生态系统原本提供了类似于Apple iOS推送服务APNS的GCM(Google Clo

微服务架构设计 (六): 微服务间的共享的管理

在微服务的架构下, 产品或许会有上百个或上千个微服务.所以, 当这些上百个或上千个微服务, 同时都依赖于某个库 (Library) 时, 则当此共享的库, 即使只是针对某个微服务做些很少量的修改, 也可能会对其他上百个或上千个微服务, 造成不可预期的影响. 但在实际的项目中, 产品中的微服务又无法避免的会对某些库 (Library) 产生依赖; 共享某些库 (Library). 所以, 架构师必需要知道要如何管理微服务间的共享? 微服务会形成共享的原因, 主要是来自于: 微服务共同继承于某个抽象

利用WCF的Duplex服务向Winform程序推送消息

先看运行效果:在网页中发送消息[如图],利用WCF的Duplex服务向Winform 程序推送消息,Winform端接收到消息, 先建立两个项目,一个WebForm 项目和一个WinForm项目,并在项目下 建立好各自需要的文件 SendMessage.aspx 是发送消息的Web页面 ISendMessageService.cs 和 SendMessageService.svc用来实现WCF的 Duplex服务 GetMessageForm.cs 是接收消息的Winform窗口 当然, 还需要

微信放宽了服务号的每月推送数量限制

摘要: 近期,微信官方公布了一次重大的策略调整,放宽了服务号的每月推送数量限制,并且对于群发策略也有了很大程度的开放.先来看看官方说法: 1 .为了增强和提升微信公众帐号的服 近期,微信官方公布了一次重大的策略调整,放宽了服务号的每月推送数量限制,并且对于群发策略也有了很大程度的开放.先来看看官方说法: 1.为了增强和提升微信公众帐号的服务能力,所有服务号的群发次数由原来的每月1次改为每月(自然月)4次. 2.对已微信认证的服务号,开放公众平台高级群发接口,开发者可以通过高级群发接口实现更灵活的

利用阿里云容器服务实现Docker微服务间的负载均衡和服务发现

基于容器服务实现Docker微服务间的负载均衡和自动服务发现的方法 在容器服务上可以通过acsrouting将基于域名的http的服务暴漏出去,而且能够配合健康检查自动的负载均衡和服务发现,当其中一个容器出现问题之后,routing会自动将健康检查失败的容器从后端摘除,所以能做到自动的服务发现. 然而这个是将服务暴漏到外网的,那么服务间如何通过这种方式做到自动的服务发现和的负载均衡呢?容器服务引入了负载均衡的功能,只需要使用.local结尾的域名,并在依赖的服务的external_links中增

回顾微服务的边界选择

本文讲的是回顾微服务的边界选择[编者的话]本文讨论了如何定义微服务的边界,并采用机场旅客值机系统做了拆分微服务的例子,本文从模块上下文的角度对微服务进行边界定义,讨论了这种拆分方法的优劣,并引出了其他拆分依据的思考. 目前,微服务是一个热门的话题.尽管它很复杂,包括分布式事务.最终一致性.操作开销等,它依然是发展趋势,特别是它带来的优点,如跨语言架构.选择的伸缩性.强大的模块化.容错能力.实验性.敏捷性等. 微服务可能不是新鲜事物.我仍然记得,2011年我工作在一个SaaS产品,我们试图建立包含

微服务的框架选择

从微服务说起 微服务架构(MSA)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则. 用通俗的话来讲,就是为了高度解耦软件之间的依赖性,使每个独立的模块都能够单独测试,单独运维,最大限度的提高软件的开发流程.从下图可以看一下微服务的软件生命周期. 软件从需求分析就可以适配模块,也就是说需求分析的过程就可以加入设计,从新的角度来说就是在哪个模块中进行升级开发,开发人员在开发完成后,通过持续集成,将开发的结

精准营销时代 “微推送”如何踏上风口?

文章讲的是精准营销时代 "微推送"如何踏上风口,打开手机,连上网络,首先听到的是各种消息推送的声音,现如今,下载使用各种App首先会提醒是否接受消息推送,可以说,消息推送已经成为常态.一方面,用户可以非常方便.及时的获取重要信息,另一方面,对App开发商活跃用户提供了便捷通道.不过,负面影响也非常明显,一旦推送的消息不是用户希望的,会对用户造成骚扰,因此,精准用户画像变得至关重要. 实际上,目前做消息推送的服务商有很多,BAT都有相关的产品,也有第三方的独立服务商,友盟算是其中的佼佼者

IOS平台的几个推送服务的对比

IOS平台的几个推送服务的对比   2013-10-09 13:37:01|  分类: 云计算 |举报 |字号 订阅        最近研究了一下极光推送(JPush),百度云推送和个推在IOS平台的推送机制,做了一下对比.        首先, 介绍苹果推送通知服务的推送机制(APNS: Apple Push Notification Service):                                                   图1  APNS的推送流程 上图清晰地展