ZeroMQ

作者: _张鹏鹏_ | 来源:发表于2021-11-24 17:38 被阅读0次

    简介:

    ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。

    ZMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

    ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。

    提供进程内、进程间、机器间、广播等四种通信协议。通信协议配置简单,用类似于URL形式的字符串指定即可,格式分别为inproc://ipc://tcp://pgm://。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。如:

    zmq_bind(responder, "tcp://*:5555");             // server
    zmq_connect(requester, "tcp://localhost:5555");  // clinet
    

    模式:

    简单介绍ZeroMQ的常见模式,实际应用中可以多种模式组合使用。

    PAIR:

    也叫独占对模式。可以参考重头戏!ZeroMQ的独家对模式详解:ZMQ_PAIR

    PAIR.png

    REQ/REP:

    REQ/REP 是最基本的模式。客户端发送数据请求服务器的响应。

    REQ_REP.png

    Router/Dealer:

    用于扩展REQ/REP套接字的高级模式。

    DEALER_ROUTER.png

    在多对多的网络中, 掮客起到在网络的两端双方互不认识的情况下,促成双方的交易。超市就是一个典型的掮客。顾客不必和所有的供应商一一打交道,每个供应商也不需要认识所有的顾客来促成交易 —— 整个交易在超市的促成下完成,双方几乎都不知道对方的存在。

    多对多的网络中,Router/Dealer 模式很有用。假设我们有 N 个 Reply server,M 个 Request client,若要保证高可用性,正常而言,双方需要一个 M x N 的 full mesh 的网络才能保证任何一个 client 能够和任何一个 server 建立连接。通过在中间加一层 Router/Dealer,M x N 的连接被简化成 M + N。网络的复杂度大大降低。

    PUB/SUB:

    Pub/Sub 是消息传输非常常见也是非常有用的一种模式,将数据的发布者和订阅者解耦 —— 发布者者只管产生数据,而不必关心谁是订阅者,有多少订阅者。

    比如说你要建一个聊天室,每个人都是发布者,也都是订阅者。发布者不必关心订阅者的加入和离开,消息会以 1:N 的方式扩散到每个订阅者。

    PUB_SUB.png

    发布端单向分发数据,且不关心是否把全部信息发送给订阅端。<u>如果发布端开始发布信息时,订阅端尚未连接上来,则这些信息会被直接丢弃。</u>

    订阅端未连接导致信息丢失的问题,可以通过与请求回应模型组合来解决。

    订阅端只负责接收,而不能反馈,且在订阅端消费速度慢于发布端的情况下,会在订阅端堆积数据。

    该模型主要用于数据分发。天气预报、微博明星粉丝可以应用这种经典模型。

    PUSH/PULL:

    也称作管道模式、流水线模式。该模型主要用于多任务并行,提高任务处理效率。

    PUSH_PULL.png
    1. 图中工人向上连接到发生器,并且向下连接到接收器。
    2. 发生器的PUSH套接字将任务均匀地分配给工人。这就是所谓的负载均衡。
    3. 接收器的PULL套接字均匀地收集来自工人的结果。

    资料:

    1. ZeroMQ官网
    2. 源代码汇总
    3. ZeroMQ教程中文版

    扩展:

    nanomsg: ZeroMQ作者用C语言新写的消息队列库,解决了ZeroMQ存在的一些问题,改善了一些令人诟病的设计。

    参考文献:

    1. ZeroMQ云时代极速消息通信库学习笔记
    2. ZeroMQ及其模式
    3. 消息队列库——ZeroMQ
    4. zeromq用来怎么玩?
    5. RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点?

    相关文章

      网友评论

          本文标题:ZeroMQ

          本文链接:https://www.haomeiwen.com/subject/nktotrtx.html