大厂面试真题-说一下推和拉的模式以及常见的使用

Pull(拉)模式和Push(推)模式是消息传递中的两种基本机制,它们在消息中间件和注册中心中的应用广泛而多样。

Pull(拉)模式

Pull模式是一种消息消费模式,其中客户端主动从服务端拉取数据。

  • 优点:客户端可以根据自己的消费能力来消费数据,不存在消息堆积的情况。
  • 缺点:消息处理可能不及时,可能存在大量无效请求,客户端需要考虑拉取频率逻辑。

在Pull模式下,客户端需要负责发起请求以从服务器获取消息。这种模式允许客户端根据自己的需求和能力来获取数据,但也需要客户端具备更多的逻辑来控制数据的拉取和处理。例如,在Apache Kafka中,Pull模式是Kafka新增的方式,使用该模式时,消费者可以自主选择从哪个分区开始拉取消息,并可以自主控制拉取消息的速度。

Push(推)模式

Push模式是一种消息传递模式,其中服务端主动将消息推送给客户端。

  • 优点:消息处理的及时性很高,一旦服务端收到消息后,就立刻将消息推送给消费者,消费者能立刻对收到的消息进行消费。
  • 缺点:当消息量比较大时,对消费者性能要求较高,由于消费者无法控制服务端消息的推送速度,因此一旦消息量大,那么消费者消费的压力就比较大。

在Push模式下,服务器会主动将消息推送到客户端,这通常是通过建立长连接或定期发送消息来实现的。这种模式提供了消息处理的及时性,但在处理大量消息时可能会对消费者造成压力。例如,在Kafka中,Push模式是Kafka最初实现的默认方式(不要被这个误导,如果有人问Kafka采用了什么方式,一定要回答pull)。在这种模式下,生产者将消息直接推送到Kafka集群中的分区中,分区会自动将消息存储在磁盘上,并异步地将消息传输到消费者。

常见的注册中心中的推和拉模式

在服务注册与发现领域,注册中心使用的推送(Push)和拉取(Pull)模式主要影响服务消费者如何获取服务注册信息。以下是一些常见的注册中心及其使用的推送或拉取模式的概述:

使用推送(Push)模式的注册中心

  1. Consul
    • Consul支持健康检查,并且当服务提供者状态发生变化时,能够主动推送更新后的服务清单给消费者。这在一定程度上模拟了推送模式的效果,尽管底层实现可能仍然涉及消费者定期轮询以获取最新信息(但这种方式通常比纯Pull模式更及时)。
  2. Nacos
    • Nacos是一个动态服务发现、配置管理和服务管理平台,它也支持Push模式。在Nacos中,服务消费者可以订阅服务,当服务提供者发生变化时,Nacos会主动推送更新信息给消费者。

使用拉取(Pull)模式的注册中心

  1. Eureka
    • Eureka是Spring Cloud生态系统中常用的服务注册与发现组件。在Eureka中,服务消费者通常通过Pull模式获取服务注册信息,即消费者主动从Eureka Server拉取可用的服务提供者清单。Eureka也支持客户端缓存机制,即使Eureka Server不可用,消费者仍然可以使用缓存中的信息找到服务提供者。
  2. ZooKeeper
    • ZooKeeper是一个开源的分布式协调服务,它主要用于维护配置信息、命名、提供分布式同步以及提供组服务等。在服务注册与发现方面,ZooKeeper通常被用作服务注册中心,但消费者需要通过Pull模式来获取服务信息。ZooKeeper支持watch机制,允许客户端在znode(ZooKeeper中的节点)上设置观察,当znode发生变化时,客户端会收到通知。然而,这仍然需要消费者主动发起请求来检查变化。

注意事项

  • 推送(Push)和拉取(Pull)模式并不是绝对的,有些注册中心可能结合了这两种模式。例如,Consul和Nacos虽然支持Push效果,但底层可能仍然涉及Pull机制的某些方面。
  • 在选择注册中心时,除了考虑推送或拉取模式外,还需要考虑其他因素,如一致性、可用性、分区容错性(CAP定理中的三个特性)、健康检查机制、负载均衡策略、雪崩保护等。
  • 随着技术的不断发展,注册中心的功能和特性也在不断变化和完善。因此,在选择和使用注册中心时,建议查阅最新的官方文档或权威来源以获取最准确的信息。

综上所述,不同的注册中心可能采用不同的推送或拉取模式来支持服务注册与发现。在选择注册中心时,需要根据具体的应用场景和需求进行权衡。

RocketMQ的推和拉模式有什么区别

RocketMQ的Pull模式和Push模式在消息消费机制上存在显著的区别,这些区别主要体现在消息传递的主动性、实时性、资源占用以及消费端的压力等方面。以下是这两种模式的详细对比:

一、消息传递的主动性

  • Pull模式

    • 在Pull模式下,消息的传递是由消费端主动发起的。消费端会根据自身的消费能力和需求,定期或按需从Broker(消息队列服务器)拉取消息。
    • 这种模式要求消费端具备更多的逻辑来控制数据的拉取和处理,包括决定何时拉取消息、拉取多少消息以及如何处理拉取到的消息等。
  • Push模式

    • 与Pull模式相反,Push模式是由Broker主动将消息推送给消费端的。一旦Broker收到新的消息,就会立即尝试将其推送给相应的消费端。
    • 在Push模式下,消费端通常不需要主动发起请求来获取消息,而是等待Broker的推送。

二、实时性

  • Pull模式

    • 由于Pull模式是由消费端主动拉取消息的,因此消息的实时性取决于消费端的拉取频率和Broker的响应速度。
    • 如果消费端设置的拉取频率较低,可能会导致消息处理的延迟。
  • Push模式

    • Push模式具有更高的实时性,因为消息一旦到达Broker,就会立即被推送给消费端。
    • 这种模式适用于对实时性要求较高的应用场景,如实时交易系统、在线聊天系统等。

三、资源占用

  • Pull模式

    • 在Pull模式下,消费端需要维护更多的状态信息,如每个消息队列的偏移量、拉取频率等。
    • 这可能会增加消费端的资源占用,特别是在处理大量消息队列时。
  • Push模式

    • Push模式通常对消费端的资源占用较少,因为消息是由Broker推送的,消费端只需要处理接收到的消息即可。
    • 然而,如果Broker推送消息的速度超过了消费端的处理能力,可能会导致消费端的缓冲区溢出或消息堆积。

四、消费端的压力

  • Pull模式

    • 在Pull模式下,消费端可以根据自身的处理能力来决定何时拉取消息,从而避免消息堆积和缓冲区溢出的问题。
    • 这使得Pull模式在处理大量消息或消息处理速度较慢的情况下更具优势。
  • Push模式

    • Push模式可能会对消费端造成较大的压力,特别是当Broker推送消息的速度较快且消费端的处理能力有限时。
    • 在这种情况下,消费端可能会出现消息堆积、缓冲区溢出甚至崩溃等问题。

五、适用场景

  • Pull模式

    • 适用于需要灵活控制消费速度或需要进行批量处理的消息应用。
    • 也适用于消费端处理能力较强且希望自主控制消息拉取逻辑的场景。
  • Push模式

    • 适用于对实时性要求较高且消费端处理能力较强的应用场景。
    • 也适用于希望简化消费端逻辑并依赖Broker进行消息推送的场景。

综上所述,RocketMQ的Pull模式和Push模式在消息传递的主动性、实时性、资源占用以及消费端的压力等方面存在显著差异。在选择使用哪种模式时,需要根据具体的应用场景和需求进行权衡。

ZK作为配置中心的推拉结合模式

结合ZooKeeper的Watch机制,我们可以更深入地理解其作为配置中心时如何实现推拉结合的模式。

ZooKeeper的Watch机制

ZooKeeper的Watch机制是一种类似于“观察者模式”的设计模式,它允许客户端在特定的ZNode(ZooKeeper中的节点)上注册Watcher。当这个ZNode的状态(包括数据内容或子节点列表)发生变化时,ZooKeeper服务端会主动通知那些注册了Watcher的客户端。这种机制使得客户端能够实时地感知到配置信息的变更。

推模式:服务端主动通知

在ZooKeeper的配置中心应用中,当配置信息发生变更时,服务端(ZooKeeper集群)会主动向那些注册了Watcher的客户端发送事件通知。这就是推模式的体现。具体来说,当某个客户端在特定的ZNode上注册了Watcher后,如果这个ZNode的数据内容或子节点列表发生变化,ZooKeeper服务端就会触发这个Watcher,并通过网络将事件通知发送给客户端。

拉模式:客户端主动获取数据

然而,仅仅依靠推模式是不够的。因为当客户端接收到Watcher事件通知时,它并不会直接获得最新的配置数据。相反,客户端需要主动向服务端发起请求来获取最新的数据。这就是拉模式的体现。客户端在接收到事件通知后,会根据通知中提供的信息(如ZNode的路径),向服务端发送一个获取数据的请求。服务端在收到请求后,会将最新的配置数据发送给客户端。

推拉结合的模式

因此,ZooKeeper的配置中心机制可以看作是推拉结合的模式。服务端通过推模式主动通知客户端配置已变更,但客户端需要通过拉模式主动获取最新的配置数据。这种方式既保证了配置的实时性(因为客户端能够立即收到变更通知),又给了客户端一定的控制权(因为客户端可以按需获取数据)。

Watch机制的具体实现

  1. 客户端注册Watcher:客户端在特定的ZNode上注册Watcher,以便在ZNode状态发生变化时收到通知。
  2. 服务端处理Watcher:当ZNode状态发生变化时,ZooKeeper服务端会触发注册的Watcher,并准备将事件通知发送给客户端。
  3. 客户端接收通知:客户端通过网络接收到服务端发送的事件通知。
  4. 客户端获取数据:客户端根据通知中提供的信息,向服务端发送获取最新数据的请求。
  5. 服务端发送数据:服务端在收到请求后,将最新的配置数据发送给客户端。

通过这种方式,ZooKeeper的配置中心机制能够高效地实现配置的实时变更和通知,同时保证客户端能够按需获取最新的配置数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之扫雷小游戏(完整代码版)

说起扫雷游戏,这应该是很多人童年的回忆吧,中小学电脑课最常玩的必有扫雷游戏,那么大家知道它是如何开发出来的吗,扫雷游戏背后的原理是什么呢?今天就让我们一探究竟! 扫雷游戏介绍 如下图,简…

【网络安全】漏洞案例:提升 Self-XSS 危害

未经许可,不得转载。 文章目录 Self-XSS-1Self-XSS-2Self-XSS-1 目标应用程序为某在线商店,在其注册页面的First Name字段中注入XSS Payload: 注册成功,但当我尝试登录我的帐户时,我得到了403 Forbidden,即无法登录我的帐户。 我很好奇为什么我无法登录我的帐户,所以我…

如何破解 AI 聊天机器人让它们吐露秘密!窥探 AI 系统指令的 10 种技巧

​ 有时,为了确保 AI 的安全性和透明性,用户需要自己动手,揭开系统指令的面纱。 如果人工智能现在已经成为生活中的事实,并影响着我们的福祉,人们理应知道它的运作原理。 对一些人来说,科幻电影中的经典…

新装ubuntu22.04必做两件事,不然可能没法用

一、换服务源 在全部里面找到软件和安装;打开后 在更多里面匹配一下最适合自己的软件源;这个过程比较漫长;要耐心等待 二、换软件安装中心 先执行: sudo apt upgrade 后执行: sudo apt install plasma-discover…

初级网络工程师之从入门到入狱(四)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、Wlan应用实战1.1、拓扑图详解1.2、LSW11.3、AC11.4、抓包1.5、Tunnel隧道模式解析1.6、AP、…

【AIF-C01认证】亚马逊云科技生成式 AI 认证正式上线啦

文章目录 一、AIF-C01简介二、考试概览三、考试知识点3.1 AI 和 ML 基础知识3.2 生成式人工智能基础3.3 基础模型的应用3.4 负责任 AI 准则3.5 AI 解决方案的安全性、合规性和监管 四、备考课程4.1 「备考训练营」 在线直播课4.2 「SkillBuilder」学习课程 五、常见问题六、参考…

Flutter技术学习

以下内容更适用于 不拘泥于教程学习,而是从简单项目入手的初学者。 在开始第一个项目之前,我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块,可以是任何 UI 元素。属性 是 widget 类中定义的变量,用于配…

【IEEE独立出版 | 厦门大学主办】第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

【IEEE独立出版 | 厦门大学主办】 第四届人工智能、机器人和通信国际会议(ICAIRC 2024) 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 2024年12月27-29日 | 中国厦门 >>往届均已成功见刊检索…

深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec

文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号…

Node.js管理工具NVM

nvm(Node Version Manager)是一个用于管理多个 Node.js 版本的工具。以下是 nvm 的使用方法和一些常见命令: 一、安装 nvm 下载 nvm: 地址:https://github.com/coreybutler/nvm-windows/releases访问 nvm 的 GitHub 仓…

稳字诀! 洞见 强者的社交格局:从不恋战——早读(逆天打工人爬取热门微信文章解读)

都是文字 引言Python 代码第一篇 洞见 强者的社交格局:从不恋战第二篇 稳字诀结尾 引言 今天很奇怪 一直都挺烦造的 好像有很多事情忙 但是就是忙着找不定 不能定下心来 主要还是在股市 其他方面应该没啥 计划表还是不够给力 没办法把心在约定住 稳字诀 勤燃香,奋…

GPT和BERT

GPT和BERT都是基于Trm的应用,可以理解为GPT是decoder的应用,BERT可以说是encoder的应用 GPT 如图,就是GPT的原理,GPT是做生成式的任务的,没有办法进行下游任务改造,训练也是针对生成式的任务进行训练 BE…

云开发 | 微信小程序云开发无法获取数据库数据

1.我在我的云数据库中创建了一个数据表(即collection数据集)userList,并且存入了两条用户信息数据 2. 想要通过按钮触发事件拿取数据库中数据并且打印在控制台时,获取数据失败,控制台无输出 3. 初始化 | 在开始使用数据库 API 进…

“医者仁术”再进化,AI让乳腺癌筛查迎难而上

世卫组织最新数据显示,我国肿瘤疾病仍然呈上升趋势,肿瘤防控形势依然比较严峻。尤其是像乳腺癌等发病率较高的疾病,早诊断和早治疗意义重大,能够有效降低病死率。 另一方面,中国地域广阔且发展不平衡,各地…

Qt-界面优化盒子模型(71)

目录 描述 相关属性 使用 描述 盒子模型 例如下面房子模型 • Content 矩形区域: 存放控件内容.⽐如包含的⽂本/图标等. • Border 矩形区域: 控件的边框. • Padding 矩形区域: 内边距. 边框和内容之间的距离. • Margin 矩形区域: 外边距. 边框到控件 geometry 返回的矩形…

Qt5.14.2 安装详细教程(图文版)

Qt 是一个跨平台的 C 应用程序开发框架,主要用于开发图形用户界面(GUI)程序,但也支持非 GUI 程序的开发。Qt 提供了丰富的功能库和工具,使开发者能够在不同平台上编写、编译和运行应用程序,而无需修改代码。…

【病毒分析】DevicData家族扩散:全球企业和机构成为勒索病毒头号攻击目标!

1.背景 本文聚焦于勒索病毒家族 DevicData 的最新变种,命名为 .DevicData-P a2a9e9c勒索病毒。自2023年1月首次被发现以来,DevicData 家族一直对多个高价值目标展开攻击,包括企业用户、医疗机构和教育机构。这些目标通常持有大量敏感数据&a…

初始爬虫13(js逆向)

为了解决网页端的动态加载,加密设置等,所以需要js逆向操作。 JavaScript逆向可以分为三大部分:寻找入口,调试分析和模拟执行。 1.chrome在爬虫中的作用 1.1preserve log的使用 默认情况下,页面发生跳转之后&#xf…

MySQL学习(五):数据类型与约束

MySQL学习(五):数据类型与约束 文章目录 MySQL学习(五):数据类型与约束1. 数据类型与属性1.1 所有的数据类型1.2 所有属性 2. 数据类型详解2.1 整型2.2 浮点类型2.3 定点数类型2.4 位类型2.5 日期与时间2.6…

Linux环境基础开发工具的使用

vim编辑器的基本操作: 在linux环境下输入vim 文件名就可以进入编辑模式. 上述四种模式必须退到命令模式才能进行下一个模式. 在编辑器中写完之后,输入ESC进入命令模式,然后再输入shift:进入低行模式并输入wq保存并退出. 在命令模式下的操作: 光标所在行:1.输入yy进行复制, 输…