精华内容
下载资源
问答
  • 2020-08-15 15:31:22

    直接消息传递系统 —— 利用OS所提供的发送命令(原语)

    1. 直接通信原语
      1)对称寻址方式 —— 要求发送进程和接收进程都必须以显式方式提供对方的标识符。
      系统提供以下两条通信命令:
      send(receiver,message);
      receive(sender,message);

      不足:一旦改变进程的名称,则可能需要检查所有其他进程的定义,有关对该进程旧名称的所有引用都必须查找到,以便将其修改为新名称,显然,这样的方式不利于实现进程定义的模块化。

      2)非对称寻址方式 —— 接收进程可能需要与多个发送进程通信,无法事先指定发送进程。因此,在接受进程的原语中,不需要命名发送进程,只填写表示源进程的参数,即完成通信后的返回值,而发送进程仍需要命名接收进程。
      send(receiver,message);
      receive(id,message); 接收来自任何进程的消息,id变量可设置为进行通信的发送方进程id或名字。

    2. 消息格式
      比较短的定长消息格式 —— 减少对消息的处理和存储开销
      变长的消息格式 —— 处理、存储方面付出更多的开销,方便用户

    3. 进程的同步方式
      在完成消息的发送或接收后,存在三种情况:
      1)发送进程阻塞,接收进程阻塞 —— 这种情况主要用于进程之间紧密同步,发送进程和接收进程之间无缓冲时。
      2)发送进程不阻塞,接收进程阻塞 —— 发送进程不阻塞,因而它可以尽快地把一个或多个消息发送给多个目标;而接收进程平时处于阻塞状态,直到发送进程发来消息时才被唤醒
      3)发送进程不阻塞,接收进程不阻塞 —— 发送进程和接收进程都在忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待

    4. 通信链路
      通信双方建立链路,两种方式:

      1)由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路,在链路使用完成后拆除链路 —— 主要用于计算机网络

      2)发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路 —— 主要用于单机系统中

      根据通信方式的不同,把链路分成两种:
      1)单向通信链路
      2)双向通信链路

    间接通信方式 —— 信箱通信
    进程之间的通信,需要通过某种中间实体来完成,该实体建立在随机存储器的公用缓冲区上,用来暂存发送进程发送给目标进程的消息;接收进程可以从该实体中取出发送进程发送给自己的消息,通常把这种中间实体称为邮箱,每个邮箱都有唯一的标识符。消息在邮箱中可以安全地保存,只允许核准的目标用户随时读取。既可实现实时通信,又可实现非实时通信。

    1. 信箱的结构 —— 一种数据结构,两个部分
      1)信箱头,用以存放有关信箱的描述信息 —— 信箱标识符、信箱的拥有者、信箱口令、信箱的空格数等
      2)信箱体 —— 由若干个可以存放消息的信箱格组成,信箱格的数目以及每格的大小是在创建信箱时确定的

    2. 信箱通信原语
      1)邮箱的创建和撤销
      进程可利用邮箱创建原语来建立一个新邮箱,创建者进程应给出邮箱名字、邮箱属性(公用、私用或共享);对于共享邮箱,还应给出共享者的名字,当进程不再需要读邮箱时,可用邮箱撤销原语将之撤销。
      2)消息的发送和接收。当进程之间要利用邮箱进行通信时,必须使用共享邮箱,并利用系统提供的通信原语进行通信。
      Send(mailbox,message);
      Receive(mailbox,message);

    3. 信箱的类型
      1)私用邮箱。用户进程可为自己建立一个新邮箱,并作为该进程的一部分。邮箱的拥有者有权从邮箱中读取消息,其他用户则只能将自己构成的消息发送到该邮箱中,可采用单向通信链路的邮箱来实现。当拥有该邮箱的进程结束时,邮箱也随之消失。

      2)公用邮箱。由操作系统创建,并提供给系统种的所有核准进程使用。核准用户既可把消息发到该邮箱,也可从邮箱读取给自己的消息,应采用双向通信链路的邮箱来实现。在系统运行期间始终存在。

      3)共享邮箱。由某进程创建,在创建时或创建后指明它是可共享的,同时须指出共享进程的名字。邮箱的拥有者和共享者都有权从邮箱中取走发送给自己的消息。

      发送进程和接收进程存在以下四种关系:
      1)一对一
      2)多对一
      3)一对多
      4)多对多

    更多相关内容
  • 操作系统----消息传递

    千次阅读 2016-09-28 20:37:15
    消息传递是以消息为单位进行进程之间一种通信的手段,消息是由一组消息组成的集合,包括了消息头和消息尾,消息传递实现需要两个原语分别是Send()和Seceive(),Send()负责发送消息,Receive()是负责接受消息的,当...

    消息传递是以消息为单位进行进程之间一种通信的手段,消息是由一组消息组成的集合,包括了消息头和消息尾,消息的传递实现需要两个原语分别是Send()Seceive(),Send()负责发送消息,Receive()是负责接受消息的,当没有接受到消息的时候,接受进程进入等待的状态,直到有消息到达为止。这样的话不仅起到交换信息的功能,还能使进程同步。

       消息传递的方式有两种:直接消息传递,采用信箱传递方式

      直接的消息的传递:只需要每个进程知道的消息发向哪和从哪里接受到消息。

      格式:

    Send(Target,Message);//将消息发送给目标的进程

    receive(Soure,&Message);//从源进程中接受一个消息

    直接消息传递下,由于没有缓冲机制,该方式假如发送进程先行发送,执行Send()原语,则发送的进程阻塞,直到接受进程执行Receive()原语进行接受,反之也是一样的。所以没有缓冲,所以发送进程和接受进程之间必须交替的进行。

    信箱的消息传递方式:

    采用消息信箱的方式是一种简介的通信的方式,接受方和发送方需要通过信箱进行交互信息,就像是以前通信一样。那么刚刚的target ,he Soure都是信箱了,就是mailbox.

    Send()

    Send(MailBox,Message);//

    其中MailBox就是信箱,是一种结构体,原语将信息发送到信箱,过程为:首先是检查指定的邮箱是否满,如果满了,则发送信件进程就会被堵塞,进入“等待发送信件”,状态,假如没有满的话,将信件Message存入信箱中,有进程等待取信件,那么将会唤醒正在等待取信件的进程。

    Receive():

    Receive(MailBox,&Message);

    执行的过程:首先还是检查信箱中的文件,如果信箱中有信的话,那么就会取出信件,放入Message,假如这时有进程在等待将信件存入信箱中,则等待的发送的进程将会被唤醒。如果没有信件,那么取信件的进程将会被阻塞。

    展开全文
  • 进程通信 进程通信的概念与方法 顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址...所以,为了保证进程间的安全通信,操作系统提供了一...

    进程通信


    进程通信的概念与方法

    顾名思义,进程通信就是指进程之间的信息交换。
    进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立,而且为了保证安全,一个进程不能直接访问另外一个进程的地址空间。
    在这里插入图片描述
    但是,在很多情况下,进程之间的信息交换又是必须的,如 某些APP的分享到微信朋友圈功能,在这些APP进程分享时,它们需要和微信进程进行进程通信。所以,为了实现进程间的安全通信,操作系统提供了一些方法,分别是共享存储、管道通信和消息传递。

    下面对这几种方法进行介绍。


    共享存储

    进程通信采用共享存储方式时,操作系统会在内存中开辟一块共享空间,允许通信进程对其互斥的访问。
    在这里插入图片描述
    注意:两个进程对共享空间的访问必须是互斥的,即 同一时间只允许一个进程访问该共享空间。(互斥访问可以通过操作系统提供的工具实现)

    进程用这种方式通信时,操作系统只负责提供共享空间和同步互斥工具。(如 P、V操作)

    其实,共享存储方式还分为了两种,分别是基于数据结构的共享、基于存储区的共享。

    • 基于数据结构的共享:共享空间的数据形式有所限制,如 共享空间只能放一个长度为10的数组。这种共享方式速度慢、限制多、是一种低级通信方式
    • 基于存储区的共享:数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式

    管道通信

    管道是指用于连接读写进程的一个共享文件,又名pipe文件。
    进程通信采用管道通信方式时,操作系统会在内存中开辟的一个大小固定的缓冲区,进程需要按照"管道的规则"进行通信。 ("管道的规则"在此部分的最后会提到)
    在这里插入图片描述
    注意:一条管道只能实现半双工通信,半双工通信即某一时间段内只能实现单向的数据传输。

    如果要实现双向同时通信,即某一时间段内实现双向的数据传输,则需要设置两条管道。
    在这里插入图片描述下面说说管道的规则。

    1. 一条管道只能实现半双工通信,即 某一时间段内只能实现单向的数据传输。
    2. 各个进程只能互斥的访问管道,即 当一个进程在写的时候,另外一个进程不能读,反之亦然。
    3. 数据会以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将会被阻塞,直到读进程将数据取走;当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
    4. 如果没写满,就不允许读;如果没读空,就不允许写。

    个人理解:管道就像一辆单向行驶的车,只有车上坐满人后,车才可以发动,而当车到达目的地,全体人员都要下车。


    消息传递

    进程通信采用消息传递方式时,进程间的数据交换会以格式化的信息 (Message) 为单位。进程通过操作系统提供的"发送消息/接受消息"两个原语进行数据交换。
    在这里插入图片描述
    拓展:计算机网络中发送的“报文”其实就是一种格式化的消息。

    其实,消息传递方式也分为两种,分别是直接通信方式和间接通信方式。下面对这两种方式进行介绍。

    直接通信方式

    进程通信采用消息传递的直接通信方式时,消息会直接挂到接收进程的消息缓冲队列上。
    举个例子:假如,进程1给进程2发送了两个消息。那进程2的消息缓冲队列如下。
    在这里插入图片描述
    这种方式类似于寄快递,你写明收件人后,快递公司会把快递送达收件人的手中。在这里,快递就是消息,收件人就是接收进程,快递公司就是操作系统。

    间接通信方式

    进程通信采用消息传递的直接通信方式时,发送进程会把消息发送到一个中间实体(信箱)中,而接收进程通过某些方法可以取得属于自己的消息,因此,这种方式也被称为"信箱通信方式"。
    在这里插入图片描述这种方式类似于电子邮件系统,用户A给用户B发送的邮件会暂存于服务器的信箱中,该邮件会等待用户B的取出。

    总结

    在这里插入图片描述


    感谢

    以上内容大部分来自王道操作系统系列视频教学。

    展开全文
  • 分布式系统的现代消息传递

    千次阅读 2019-06-13 15:29:27
    论文《分布式系统的现代消息传递》Modern Messaging for Distributed Sytems L Magnoni 通过IOP出版有限公司出版许可物理学学报:会议系列,608卷,第1会议 作者电子邮件 luca.magnoni@cern.ch 作者隶属...

    论文 《分布式系统的现代消息传递》Modern Messaging for Distributed Sytems

    L Magnoni 

    通过IOP出版有限公司出版许可物理学学报:会议系列 608 1会议

     

    作者电子邮件

    luca.magnoni@cern.ch

    作者隶属关系

    1欧洲核子研究中心,欧洲粒子物理实验室(CERN),瑞士日内瓦

    引文

    L Magnoni 2015 J. 物理学Conf。序列。608 012038

     

    抽象

    现代软件应用程序很少孤立存在,而现在通常的做法是依赖服务或使用远程实体提供的信息。

    在这种分布式架构中,集成是关键。

    十多年来,消息传递是解决分布式性质挑战的参考解决方案,例如网络不可靠性,

    生产者和消费者的强烈耦合以及应用的异质性。

     

    由于强大的社区以及对标准和整合的共同努力,消息代理如今已成为许多项目和服务的传输层构建块,

    无论是在物理界还是在外面。此外,近年来出现了新一代的消息服务,

    重点关注低延迟和高性能用例,突破了消息传递应用程序的界限。

    本文将介绍分布式应用程序的消息传递解决方案,概述主要概念,技术和服务。

    1.介绍

    本文概述了消息传递概念,功能和现代技术。

    首先介绍分布式通信和系统集成的消息传递。

    然后提供对主要消息传递功能的回顾,然后概述从代理到无代理系统的消息传递的主要技术。

    最后,介绍了有关使用消息传递解决分布式应用程序通信问题的成功案例列表。

     

    2.用于松散耦合通信的消息传递

    现代分布式系统可以包括数百个(如果不是数千个)应用程序以多层操作,并为彼此提供不同的服务和功能。

    在这样的分布式架构,存在诸如网络不可靠性,强耦合等诸多挑战,生产者和消费者以及需要的应用程序的异构性,致力于建立一个坚实可靠的系统。

     

    2.1 面向连接的通信

    面向连接的通信是在远程实体之间交换信息的简单解决方案。如图1所示,考虑通过面向连接的协议(如TCP / IP)打开套接字,并通过它传输原始数据流。这将是一种快速而廉价的信息交换方式,但与此同时,紧密耦合的通信将基于许多假设,这些假设需要满足才能进行通信:

    1:紧密耦合的通信。

    • 时间依赖:所有组件必须同时可用。
    • 位置:每个组件必须知道对方地址。
    • 数据结构和表示:在最简单的实现中,所有组件必须就数据格式和二进制表示达成一致。

     

    2.2 用于松散耦合通信的消息传递

    耦合可以通过各方在沟通时相互作出的假设数来衡量。

    消息传递是松耦合通信解决方案的一个示例,其中消息是信息构建块,其目的在于最小化这些假设。

    它不是直接向特定地址发送信息,而是发送到可寻址信道,以解决位置依赖性。

    为了消除时间依赖性,可以增强该信道以对信息进行排队,直到远程组件准备好接收它为止。

    这样,生产者现在可以将请求发送到通道并继续处理,而不必担心交付。

    消息传递不对数据表示做出任何假设,因此标准数据格式(例如,自描述和与JSONXML无关的平台)可用于消除在所有组件之间共享数据处理逻辑的需要。

     

    2.3消息传递方案

    典型的消息传递用例是:

    信息发布:实体发布易变信息而没有关于谁感兴趣的先验知识(例如传感器)

    信息存储:实体从多个来源(例如日志收集器)收集信息

    远程过程调用:实体向一个或多个远程实体发送请求并期望回复。

     

    2.4消息传递中间件

    消息传递是一种松散耦合的通信解决方案,可最大限度地减少生产者和消费者的依赖,删除这些依赖项使整个架构更灵活,更容忍变更,但它带来了额外的复杂性。

    因此,多年来已经开发了专用消息中间件以提供消息传递功能而无需处理内部复杂性。

    下一节将介绍消息传递系统的主要概念和原理。

     

    3.消息系统

    如图2所示,消息传递系统充当想要通信的实体之间的间接层。

    通常称为消息代理,它负责将数据作为消息从一个应用程序传输到另一个应用程序,

    这样生产者和消费者就可以专注于分享内容,而不是如何分享内容。

    与许多其他技术一样,消息传递基于一些基本概念和属性,这些概念和属性在所有不同的风格和实现之间共享。

    2:松散耦合通信的消息传递。

     

    3.1 信息

    消息是信息构建块。它由一个主体组成,它是不可变的,包含通信的结构化数据(例如JSONXML,序列化协议)对象,以及一组,通常是可由代理处理并用于路由的键值对。

     

    3.2 通信模型:主题和队列

    消息传递系统支持不同的通信模型,每个模型定义了生产者和消费者之间如何交换信息。
    最常见的通信模型是队列和主题。
    队列用于实现点对点通信,其中,如果在生成信息时不存在消费者,则消息将保留在通道中以供以后传递,
    如果有多个消费者,则消息仅传送一次。
    主题是针对经典发布/订阅方案,
    如果不存在消费者,则消息被丢弃,并且在多个消费者的情况下,消息系统将消息传递给每个消费者。
    来自队列和主题的部分被广泛支持,更复杂的传递语义存在于协议级别(例如来自AMQP的交换/节点)以及许多其他中间件特定的。

     

    3.3 协议

    多年来,缺乏与消息代理交互的独特标准方式已成为消息传递技术的已知问题。
    AMQP协议由主要的消息传递参与者,公司和软件生产者设计,以克服这一限制。
    然而,定义有线通信和传递语义的统一协议的内部复杂性要求消息传递系统的主要开发工作变得完全兼容。
    本节概述了主消息系统当前支持的最常见的标准协议。
    对于面向消息的体系结构,协议选择是一个关键的设计决策,就其在应用程序中的强耦合而言。

     

    3.3.1 AMQP(高级消息队列协议)[1]是标准化工作的结果消息传递领域的主要贡献者(例如思科,微软,红帽,银行)。
    它是旨在实现不同消息传递系统之间的互操作性。 
    它提供了定义二进制线协议和完整的传递语义,理论上允许AMQP消息传递客户端能够与不同的代理实现无缝交互符合AMQP标准。 
    如今,该协议的最新稳定版本(1.1)的奉献是尚未广泛,但鉴于它已经得到了主要消息代理的支持,预计未来几年将更广泛地实施。

     

    3.3.2 STOMP(流式文本定向消息传递协议)[2]是基于文本的协议意味着简单且可广泛互操作。 
    它主要是一种有线协议,它非常有用基本的消息传递语义内置(例如,不支持通信模型,目的地是只是一个字符串消息头),
    需要在消息系统级别进行适当的配置(例如,目的地必须适当地映射到队列或主题)。 多亏了它简单,有许多语言提供的广泛的客户端,它是由支持大多数经纪人。

     

    3.3.3 MQTTMessage Queue遥测传输)[3]是轻量级协议设计的最初来自IBM 
    它适用于低带宽,高延迟的网络。 
    它定义了一个紧凑的二进制格式,通信开销非常有限,几十字节,这使得它适用于简单的物联网风格应用(例如移动电话,传感器)生产 - 忘记的情景。

     

    3.4功能
    如第2节所述,消息传递系统可以被视为中间通道通过排队等附加功能进行增强,以改善通信远程实体的经验。
    多年来,虽然没有正式的协议,但不同消息传递系统融合在一组共同的功能上,这些功能已成为事实上的标准用于消息传递中间件。
    功能列表包括Persistence,即保存功能永久存储上的消息,例如文件系统或数据库;故障转移,允许客户端经纪人失败时自动重新连接;
    保证交付,定义政策用于消息传递(例如,至少一次或完全一次);
    订购,发送消息它们的生产顺序;
    交易,将多个请求视为一部分的能力分布式事务,具有回滚选项和聚类,这是创建的可能性消息代理网络,用于高可用性和负载平衡。
    尽管如此,每个消息系统可以为相同的功能提供不同的解释。许多其他独特的经纪人特定存在功能,但它们的使用意味着将应用程序与特定代理硬连接味道。

     

    4.消息传递技术

    面向消息的中间件已经发展了十多年,现在已经成为一个丰富而稳固的服务和库生态系统。

    消息代理作为为分布式应用程序提供消息传递功能的中间独立服务,是最常见的消息传递系统类型。

    多年来,消息代理已广泛用于在分布式系统中实现通信和集成[4],但数据密集型和高性能用例除外,

    中间实体的存在不适合的选择。

    近年来,出现了新一代消息传递系统,重点关注低延迟和高性能用例,突破了消息传递应用程序的界限。

    下一节将介绍主要消息传递技术的概述。

     

    4.1 消息代理

    消息代理是消息系统最常见的实现。

    消息代理是独立的中间实体,它通过标准或自定义协议提供消息传递功能。

    存在许多消息代理,不同的功能,协议,实现语言,平台支持。

    本评论的重点是开源解决方案,但许多也作为企业商业软件的一部分存在。

    消息代理是功能最丰富的消息传递系统类型,具有协议支持的功能,如第2节所述。

    经纪人可以是多语言,允许生产者和消费者使用不同的协议(例如AMQP上的发送者,STOMP上的接收者)

    并且它们可以支持消息转换(例如,将消息有效负载从XML转换为JSON)以进一步解耦应用程序。

     

    4.1.1 ActiveMQ是最广泛采用的开源消息代理之一。

    它是一个Apache项目,用Java编写,得到了Red Hat的商业支持。

    ActiveMQ具有广泛的协议支持(例如AMQPSTOMPMQTTOpenwireHTTP和许多其他),

    它提供了许多跨语言客户端,并且完全符合JMS标准。

    ActiveMQ提供了许多高级功能,例如:丰富的语义传递(例如虚拟队列,复合目标,通配符),

    JDBC消息存储(例如,用于在任何JDBC兼容数据库中保留消息)和高级群集配置(例如,主从,经纪人网络)。

    ActiveMQ是一种功能完备的消息传递解决方案,可用于实现许多通信和集成模式[4]

     

    4.1.2 RabbitMQ  是一个用Erlang编写的轻量级开源消息代理,它从下面语言的消息传递功能中获益。

    RabbitMQ架构是深度模块化的,它主要支持AMQPSTOMP,但是附加协议可以作为插件加载(例如MQTTHTTP)。

    它支持主要的消息传递功能,例如持久性,群集,高可用性和联合。

    RabbitMQ仍然是一种轻量级的消息传递解决方案,由于其简单性和可靠性,可以嵌入到多个项目(例如Logstash)中。

     

    4.1.3性能和可伸缩性 对于消息传递系统,没有详细的上下文化,每秒消息的量化度量(msg / s)几乎没有意义。

    使用的协议(例如二进制或文本)起着重要作用,但存在许多其他延迟因素:

    持久性消息可以慢几个数量级,放大因子(例如主题消费者的数量)可以通过多个内存中的消息副本影响系统,

    对于有效载荷大小也是如此。次优的客户端可能导致大量的开/关连接,行为不端的消费者可能导致低用户问题,

    消息传递基础结构最常见的问题之一。

     

    [5]中的比较,其中几个消息代理通过STOMP协议在几个通信模型中进行评估,显示了在实际情况下如何

    性能可能在100000 msg / s1000 msg / s之间变化。

     

    4.2 Apache Kafka

    Apache Kafka是一个最初来自LinkedIn的开源项目,现在是Apache基金会的一部分。

    它已经被开发用于实时活动流分析,以解决对从生产者向许多潜在消费者移动大量数据(例如,用户指标,计算机农场监控)的有效方式的需求。

    规模和数据大小(数十亿条消息和每天数百千兆字节)和时间限制使得用例不适合标准经纪人,如[6]中的比较。

     

    Kafka的创新理念是成为无国籍经纪人,因此不保留任何有关消费者的信息。

    消费者必须保留其自己的状态(例如关于最后读取的数据的信息)并在需要时向Kafka轮询新数据。

    这允许Kafka独立于消费者的数量来保留单个消息副本(例如,消费时不会删除消息,而是通过保留期或其他策略删除消息),

    从而实现读取和写入操作的高吞吐量。

    Kafka持久性是作为分布式提交日志实现的,如图3所示,设计为易于扩展的分布式系统(基于Zookeeper),允许自动平衡消费者/生产者/代理。

    (a)Kafka集群

    (b)Kafka主题分区

    3Kafka架构。

    与标准消息代理相比,Kafka提供有限的消息传递功能(例如主要是主题语义,文件系统作为唯一持久存储,严格保证排序)。

    尽管有许多客户端库可用,但它仅支持TCP上的自定义二进制格式。

    Kafka是数据移动的最佳解决方案,经常被用作不同处理系统(例如HadoopStorm)的管道。

     

    4.3 ZeroMQ

    尽管名称如此,ZeroMQ(也称为0MQZMQ[7]不是标准的消息代理,而是一个提供消息传递功能的轻量级消息传递库。

    分布式应用程序可以使用ZeroMQ进行高吞吐量和低延迟通信,

    利用其在生产者和消费者之间实现直接联系的能力,

    没有涉及中间实体。虽然这可能与消息传递的主要假设之一相矛盾,

    ZeroMQ通过创新方法实现松耦合通信,充当网络堆栈的新层。

    它使用类似的API扩展了socket的概念,但内置了消息传递模式:

    请求/回复,发布/订阅,流水线和独占对,如图4所示。

    a)请求/回复

    b)发布/订阅

    4ZeroMQ套接字的示例。

     

    与经典套接字相比,每个ZeroMQ套接字都带有一个内部队列,以允许异步通信。

    结果是,例如在用于点对点通信的请求/回复场景中,

    如果在消费者未运行时生成数据,

    ZeroMQ库将负责延迟交付,而生产者方无需额外负载。

     

    ZeroMQ背后的理念是强大的,它允许高性能和低延迟的通信,但在应用程序级别具有额外的复杂性。

    ZeroMQ主要支持自己的二进制协议,并提供有限的消息传递功能(例如,故障转移,1-N拓扑的多播支持)。

    虽然可以使用ZMQ API轻松实现多个功能(例如确认),

    实现高级消息传递功能(例如保证传递,持久性)可能需要相当大的努力,

    使其适用于需要简单消息语义的数据广告场景。

     

    5.用例

    本节介绍了几种成功采用基于消息传递通信的用例,以解决分布式系统中的交换信息问题。

    5.1 CERN Beam Control中间件

    CERN实验室的光束控制部门正在为大型强子对撞机(LHC)的高可靠性控制/监控/报警应用使用信息。

    2005年以来,一组ActiveMQ经纪人,在商店和正向配置中,

    用于收集安全系统生成的关键数据(例如30个生产者,2MB / s4.5K msg / s)并将其转发给许多消费者(例如监控工具,仪表板)。

    作为安全数据关键任务,存储和转发配置允许将数据生成与消耗完全分离,防止行为不端的客户端进行数据收集和归档[8]

    此外,LHC Control框架最近已从CORBA迁移到ZeroMQ作为通信层[9]

     

    5.2 DAQ在线监测

    消息传递还广泛用于数据采集(DAQ)系统的几个监控工具,

    负责从检测器(例如高能物理实验)过滤和收集数据到存储设施。

     

    5.2.1 ATLAS TDAQ移位器助手项目[10]依靠消息传递将业务警报从私有TDAQ网络分发到GPN到许多异构消费者。

    ActiveMQ群集用于主/从配置,以最大限度地减少对单个出站连接所需的防火墙配置的影响。

     

    5.2.2 STAR Online框架依赖于基于AMQP的系统,可灵活,松散地耦合检测器元数据,

    使用消息传递作为统一传输层进行处理,

    存储和监控。 此外,已经进行了调查以重新编写MQTT上的控制框架,从协议的灵活性和互操作性中获益[11]

     

    5.3 WLCG消息服务

    消息传递也已成功用于大规模地理分布式基础设施。

    WLCG(全球LHC计算网格)消息服务是用于监控全球WLCG站点和服务的骨干传输层,

    拥有超过50000个客户端,平均消息速率为100 KHz 监视基础结构基于具有JSON有效负载的STOMP

    由于STOMP协议在多种代理风格中的互操作性,

    异构消息代理群集(ActiveMQApolloRabbitMQ)用于客户端应用程序生成任何内容并消费给所有人[12]的场景。

     

    6.总结

    消息传递从根本上说是对分布式系统问题的实用反应[4]

    如第2节所述,它允许松散耦合的通信作为生产者和消费者之间的中间层。

    它为分布式应用程序的灵活性和可伸缩性带来了许多好处,并对应用程序和基础架构的复

    消息系统仍然是不断发展的技术,如第3节所示,AMQP标准化工作指向了良好的方向,

    但仍然部分采用。

    消息代理是在许多项目和服务中用作传输层构建块的可靠且可靠的技术,

    无论是在物理界还是在外面。近年来,

    新一代系统正在推动低延迟/高吞吐量/数据密集型通信的消息传递,

    如第5节所述,缩小用例和放松假设,但将消息传递应用程序的界限推向新的领域。

     

    参考

    [1] AMQP(高级消息队列协议)http://www.amqp.org

    [2] STOMP(简单文本导向消息传递协议)http//stomp.gith ub.io [3] MQTTMQ遥测传输)http://mqtt.org

    [4] G HohpeB Woolf 2003 企业集成模式 Addison-Wesley Professional [5] Chirino H STOMP基准http://hiramchirino.com/stomp-benchmark

    [6] Kreps JNarkhede NRao J Kafka:用于日志处理的分布式消息系统。NetDB研讨会(雅典,希腊)

    [7] Hintjens P ZeroMQ:指南http://zeromq.org

    [8] Ehm F CERN的控制系统运行可靠的消息传递基础设施。 ICALEPCS2011会议录(法国格勒诺布尔)

    [9] Dworak AEhm FSliwinski WSobczak M 2011 中间件趋势和市场领导者2011

    ICALEPCS2011会议录(法国格勒诺布尔)

    [10] Kazarov AMiotto GLMagnoni L 2012 AAL项目:ATLAS数据采集基础设施的自动监测和智能分析。物理学杂志:会议系列,第368

    [11] Arkhipkin DLauret JBetts W 2011 STARs在线监控和元数据收集的消息排队框架。物理学杂志:会议系列,第331

    [12] Cons LPaladin M 2011 WLCG消息服务及其未来。物理学杂志:会议系列,第396

    展开全文
  • 现代操作系统第三版高清

    千次下载 热门讨论 2015-06-16 22:20:01
    2.3.8消息传递 140 2.3.9 壁垒 144 2.4 调度 145 2.4.1调度 145 2.4.2 批处理系统的调度 152 2.4.3 调度互动系统 154 2.4.4 调度实时系统 160 2.4.5政策与机制 161 2.4.6 线程调度 162 ...
  • 这可能最全的操作系统面试题

    万次阅读 多人点赞 2021-04-13 09:30:37
    文章目录操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么 Linux 系统下的应用程序不能直接在 Windows 下运行操作系统...
  • 消息传递 0.思维导图 1.什么是进程通信? 图中我们可以知道什么是进程通信,以及进程通信的低级和高级方式; 我们还可以知道为什么要引入进程通信方式,以及它的意义 2.共享存储 共享一块大家都可以访问的空间...
  • 3、Akka传递消息

    千次阅读 2021-01-07 19:33:10
    1 消息传递 Akka 有 4 种核心的 Actor 消息模式: tell 、ask 、forward 和 pipe。 Ask:向 Actor 发送一条消息,返回一个 Future。当 Actor 返回响应时,会返回 Future。不会向消息发送者的邮箱返回任何消息。 ...
  • 请指出执行系统调用时向操作系统传递参数的三种常用方法分别是什么,并分别说明在哪些情况下适合采用哪种方法。 解答: 1、最简单的是通过寄存器来传递参数。一般是用于参数数量比较少的情况,例如中断的参数传递...
  • 消息传递,生产者消费者

    千次阅读 2018-05-01 21:38:00
    上面提到的其他的方法就是消息传递(message passing)。这种进程间通信的方法使用两条原语send和receive,它们像信号量而不像管程,是系统调用而不是语言成分。因此,可以很容易地将它们加入到库例程中去。例如:...
  • syscall是x64的系统调用。其调用号通过rax进行传递。查看具体的调用号,linux环境下在unistd.h中定义。如果是64位,则可以查看/usr/include/asm/unistd_64.h,如果是32位,则查看/usr/include/unistd_32.h。 参数...
  • windows消息传递机制详解

    万次阅读 多人点赞 2018-01-31 18:06:11
     Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。必须注意的是,消息...
  • 常见的操作系统有哪些?

    万次阅读 多人点赞 2019-12-26 19:33:42
    一、常见的操作系统有哪些? 1、Windows操作系统 应用比较广泛。 2、Linux操作系统 免费使用,类UNIX 3、Unix操作系统 无界面,使用命令操作,一般安装在服务器上面。 4、Mac操作系统 苹果公司开发的,一般...
  • 操作系统基础知识详解

    千次阅读 多人点赞 2021-10-24 23:20:42
    一、操作系统概述 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。 二、操作...
  • 操作系统(第四版)期末复习总结(上)

    万次阅读 多人点赞 2018-07-01 16:26:38
    马上要考操作系统了,第一章操作系统引论1、操作系统是什么?操作系统为用户完成所有“硬件相关,应用无关“的工作,以给用户方便、高效、安全的使用环境1.1、定义: 操作系统是一个大型的程序系统,它负责计算机的...
  • 微内核操作系统 微内核操作系统,即实现了一个可在其上构建通用 OS 的基础内核,该内核程序运行在核心态,开机常驻内存。 当前微内核操作系统结构仍没有一致公认的定义,但可从以下4方面进行描述: 足够小的内核:...
  • 操作系统结构

    万次阅读 2018-07-13 12:58:45
    操作系统的内部的六种不同的结构设计:单体系统、层次系统、微内核、客户机-服务器系统、虚拟机和exokernels。 一、单体系统 二、层次式系统 三、微内核 四、客户机-服务器模式 五、虚拟机 六、外核...
  • QNX操作系统

    万次阅读 2019-07-02 15:34:47
    作者:billy 版权声明:著作权归作者所有,...说到操作系统,先来列举一些 UNIX 和 类Unix 操作系统 UNIX System V家族 A/UX AIX HP-UX IRIX LynxOS SCO OpenServer Tru64 Xenix Solaris OS/2 ...
  • 操作系统学习笔记(一) ---操作系统简介

    万次阅读 多人点赞 2019-01-17 09:19:50
    Chapter1 操作系统简介 参考资料:操作系统概念(第9版&第7版) 例题 概念整理: Chapter2 操作系统结构 例题 概念整理 Chapter1 操作系统简介 参考资料:操作系统概念(第9版&第7版) 例题 1....
  • QNX操作系统简述

    千次阅读 2021-08-17 00:25:43
    文章目录QNX Neutrino实时操作系统的原理微内核架构真正的内核系统进程系统进程vs用户编写的进程设备驱动进程间通信消息传递 QNX Neutrino实时操作系统的原理   QNX Neutrino RTOS的主要目标是以一种健壮的、可...
  • 【连载】从单片机到操作系统③——走进FreeRTOS

    万次阅读 多人点赞 2018-05-14 12:32:38
    从前面的文章,我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统。因为这种情况下...
  • 操作系统基础知识复习总结

    万次阅读 多人点赞 2018-06-11 13:55:23
    操作系统 操作系统概述 操作系统作用 存储管理 处理机管理 设备管理 文件管理 用户接口 操作系统的定义 是管理和控制计算机系统中各种硬件和软件资源、合理地组织计算机工作流程的...
  • 操作系统 经典分布式操作系统 数据中心操作系统 问题和挑战 效率 安全 观察 新抽象的可行性 总结 前言 本文是Malte Schwarzkopf的博士论文《Operating system support for warehouse-scale computing》一...
  • 写给大忙人看的操作系统

    万次阅读 多人点赞 2020-02-28 12:34:12
    操作系统 现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。 然而,程序员不会直接和这些硬件打交道,而且每位程序员不可能会掌握所有计算机系统的细节,...
  • 杭州电子科技大学操作系统之简单文件系统 杭州电子科技大学操作系统课程设计:Linux内核编译、内核模块、进程管理、简单的文件系统实现
  • Android 消息通信之Activity间消息传递

    千次阅读 2018-03-02 12:21:40
    消息传递的作用不必多说,主要是在不同的组件之间传播消息或者共享某些状态等,以下是几种常用的消息传递机制: Intent 静态变量 全局变量 及Application Android系统剪切板 本地化存储方式 Andorid组件 EventBus ...
  • 计算机操作系统——进程间通信(Interprocess Communication)
  • 原计划要写kali的从零开始的教程,不过仔细想想其实那个并没有系统架构师的专注力大,因为这个是我的一个目前的目标。 你们知道的,我今年大二,下个学期会特别忙,有七八场ctf和awd,线上线下的都有,这就意味着我...
  • Golang和Erlang消息传递机制对比

    千次阅读 2015-12-11 15:25:22
    上一篇文章介绍了 Go 和 Erlang 在调度器的实现,本文将简要介绍这两种并发语言的消息传递机制简要对比Erlang和Go虽然在实现及功能上差异较大,但是都支持高并发的轻量级用户任务(Erlang的轻量进程,Go的Goroutine...
  • 什么是操作系统

    千次阅读 多人点赞 2019-05-07 11:19:37
    简单理解操作系统就是一个人与计算机硬件之间的中介。打个比喻,没有操作系统的机器就像是没有用的砖头一样,而有操作系统的机器就是可以玩的砖头。 操作系统,英文名称Operating System,简称OS,是计算机系统中必...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,090,687
精华内容 436,274
关键字:

操作系统消息传递