2024年最全一文带你入门了解“零之禅“消息队列ZeroMQ,2024年最新分享复习经验和后台开发面经

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

构建可复用的消息传递系统是十分困难的
  • **但是,我们如何才能做一个可复用的消息传递层呢?**为什么有那么多的项目都需要这项技术,人们都还在通过在他们的代码中驱动TCP套接字费力地做它,并重复解决一长串清单中的问题呢?(见下图)。

  • **实证明,构建可复用的消息传递系统是非常困难的,**这就是为什么很少有自由和开放源码(FOSS)项目尝试做这项工作的原因,它也是商业通信产品复杂、昂贵、灵活性差,而且脆弱的原因。2006 年,iMatix 设计了高级消息队列协议,或AMQPhttp://www.amqp.org/),开始给FOSS 开发者提供也许是首个可复用的消息传递系统方法。AMQP 工作得比许多其他设计更好,但仍然相对复杂、昂贵,而且脆弱(http://www.imatix.com/articles:whats-wrong-with-amqp)。学会如何使用它需要几个星期,而要用它来建立在事情变得很麻烦时也不会崩溃的稳定架构则需要几个月。
  • 大多数消息传递项目(如AMQP)都在尝试以可重用的方式解决上面这个冗长的清单上的问题,它们通过发明一种负责寻址、路由和排队的新概念——代理,来做到这一点。这将导致一个客户端/服务器协议或一些未在文档中记录的协议之上的一组API,它允许应用程序与这个代理交流。在降低大型网络的复杂性方面,代理是一个很好的东西。但把以代理为基础的消息传递添加到像ZooKeeper 这样的产品会使情况变得更糟,而不是更好。这将意味着增加一台额外的大电脑和一个新的单点故障。代理迅速成为一个瓶颈和一个要管理的新风险。如果软件支持的话,我们可以添加第二个、第三个和第四个代理,并提出一些故障切换方案。人们这么做了。然而,它产生了更多的变动部件,变得更复杂,有更多的东西会被破坏。
  • **此外,以代理为中心的设置都需要自己的运营团队。**你真的需要日夜注意代理,并在它们开始“行为不端”时,用棍子敲打它们。你需要电脑,你需要备份的电脑,你需要人来管理那些电脑。只有那些由多个团队在数年内建成的,带有许多变动部件的大型应用程序,才值得这样做
  • 因此,中小型应用程序开发人员陷入了困境。他们要么避免网络编程,制作不可扩展的单一应用程序,要么跳进网络编程,制作脆弱、复杂、很难维护的应用程序。他们还可以把赌注压在消息传递产品上,并最终获得依赖于昂贵且易破坏的技术的可扩展的应用程序。目前还没有非常好的选择,这也许可以解释为什么消息传递主要还停留在上个世纪,并激起强烈的情绪——对用户是消极的,而对那些销售技术支持和许可的厂商则是欢乐的、喜悦(如下图所示)。

ZeroMQ的优点
  • 我们需要的是做消息传递工作的东西,但需要它以下面这种简单和廉价的方式完成工作:
    • 它可以在任何应用程序中以接近零的消耗开展工作。
    • 它应该是不需要任何其他依赖就可以链接的库。
    • 无须额外的变动部件,所以没有额外的风险。
    • 它应该能运行在任何操作系统上,并能用任何编程语言开展工作。
  • 而这就是ZeroMQ :**一个高效的可嵌入库,它解决了大部分应用程序需要解决的问题,**变得在网络上有良好的可伸缩性,而没有多少成本。
  • 具体做法:
    • 它在后台线程异步处理I/O,这些线程使用无锁数据结构与应用程序进行通信,所以并发ZeroMQ应用程序不需要锁、信号量、或者其他等待状态。
    • 组件可以动态地来去自如,而ZeroMQ会自动重新连接,这意味着你可以以任何顺序启动组件,你可以创建“面向服务的架构”(SOA),其中的服务可以在任何时间加入和离开网络。
    • 它根据需要自动对消息排队。为此,它会智能地在对消息排队之前,将消息尽可能地推进到接收者。它有一个处理过满队列(称为“高水位标志”)的方法。当队列满时,ZeroMQ会自动阻止发件人,或丢弃消息,这取决于你正在做的是哪种消息传递(即所谓的“模式”)。
    • **它可以让你的应用程序通过任意传输协议来互相交流,**这些协议可以是:TCP、多播、进程内、进程间。你不需要更改代码以使用不同的传输工具。
    • 它使用依赖于消息传递模式的不同策略,安全地处理速度慢/阻塞的读取者。
    • **它可以让你采用多种模式,**如请求-应答和发布-订阅来将消息路由。这些模式是指你如何创建拓扑结构和网络结构。
    • 它可以让你创建代理(proxy)来排队、转发,或通过一个调用来捕获消息。代理可以降低网络互联的复杂性。
    • **它使用在线路上的简单组帧原封不动地传递整个消息。**如果你写了一个10KB 的消息,那么你将收到一个10KB 的消息。
    • 它不对消息强加任何格式。它们是零字节到千兆字节的二进制大对象。当你想表示你的数据时,可以选择其上的其他一些产品,如谷歌的协议缓冲区、XDR 等。
    • 它能智能地处理网络错误。有时候它会重试,有时它会告诉你某个操作失败。
    • 它可以减少你的能源消耗。少花CPU多办事意味着使用电脑更少的能源,你可以让你的旧电脑使用更长的时间。
  • 实际上,ZeroMQ做的比这更多。它对你如何开发网络功能的应用程序有颠覆性的影响:
    • **从表面上看,**这是一个在其上做zmq_msg_recv()和zmq_msg_send()的套接字风格的API。
    • **但该消息处理循环迅速成为中心循环,**而你的应用程序很快就会分解成一组消息处理任务。它是优雅和自然的。
    • **而且,它可扩展:**每个任务对应一个节点,节点通过任意传输方式互相交谈。在一个进程中的两个节点(节点是一个线程),在一台电脑中的两个节点(节点是一个进程),或一个网络上的两台电脑(节点是一台电脑),所有的处理方式都是相同的,不需要更改应用程序代码。

四、ZeroMQ模型

REQ/REP请求响应模型

PUB/SUB发布订阅模型

PUSH/PULL推拉模型

Router/Dealer模型

五、可供选择的消息队列的对比

六、ZeroMQ架构背后的历史

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值