CN104639597B - 用于使用tcp/ip协议的低等待时间fifo消息收发中支持多发送器的系统和方法 - Google Patents
用于使用tcp/ip协议的低等待时间fifo消息收发中支持多发送器的系统和方法 Download PDFInfo
- Publication number
- CN104639597B CN104639597B CN201410035636.XA CN201410035636A CN104639597B CN 104639597 B CN104639597 B CN 104639597B CN 201410035636 A CN201410035636 A CN 201410035636A CN 104639597 B CN104639597 B CN 104639597B
- Authority
- CN
- China
- Prior art keywords
- message
- fifo
- node
- subqueues
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
公开一种用于使用TCP/IP协议的低等待时间FIFO消息收发中支持多发送器的系统和方法。描述了用于使用TCP/IP协议以低等待时间、高吞吐量为多个发送器传送和接收多个消息的系统和方法。该系统包括启用TCP/IP的网络接口卡、以无锁方式同时允许消息收发的消息库。传送系统将每个远程发送器进程映射到与宿主节点相关联的每个先进先出(FIFO)子队列,并将每个远程发送器进程和与接收节点相关联的相应远程接收器进程映射起来,将从用户接收的消息排列在专用于每个用户的FIFO子队列中,使用远程发送器进程将来自每个FIFO子队列的消息传送到远程接收器进程。接收系统将每个远程接收器进程映射到与接收节点相关联的每个FIFO子队列,并将每个远程接收器进程和与发送节点相关联的远程发送器进程映射起来,经由远程接收器进程接收从用户传送的消息,将消息排列在专用于每个用户的FIFO子队列中,使用循环技术从每个FIFO子队列读取消息。
Description
技术领域
本文描述的主题通常涉及消息收发系统,且尤其涉及用于在使用TCP/IP协议的低等待时间消息收发中支持多个发送器的系统。
背景技术
消息收发系统的重要方面是消息的等待时间和吞吐量。随着网络速度的稳步提升,现在期望消息收发系统在几微秒内在多发布器和订阅器之间传递数百万的消息。迄今为止所使用的各种消息收发系统都带有锁定机制,且忍受缓慢的处理速度。除此之外,它们仅仅支持从单个发送器到单个接收器的消息收发。
现有技术中的进程之一公开了,用于数据中心的消息收发应用中的消息总线提供通信机制,以便提供低等待时间的消息收发。然而,这种应用提供从单个发送器向单个接收器发送消息的机制。
现有技术的进程无法以无缝方式提供低等待时间的消息收发。现有技术方法中,消息被存储在队列中,多个写入器向队列写入,且当写入器中的一个正在向队列写入时,其它写入器被锁定,无法写入。一旦第一写入器完成其写入,在此之后另一写入器可以向队列写入。锁定机制和多次写入阻碍消息收发系统的速度和性能。因此不存在系统所获得的消息收发的必要的性能和速度。
发明内容
提供本发明内容以便介绍与用于在进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法相关的多个方面,这些方面在以下具体实施方式中进一步描述。本发明内容不旨在标识所要求保护的主题的必要特征,也不旨在用于确定或限制所要求保护的主题的范围。
在一种实现中,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的系统。该系统包括处理器、耦合到处理器的网络接口卡(NIC)、消 息库以及耦合到处理器的存储器,其中,NIC启用传输控制协议/因特网协议(TCP/IP)以便发送消息,消息库包括一个或多个消息发送和消息接收函数,这些消息发送和消息接收函数以无锁方式同时允许多个消息收发。处理器能够执行存储在存储器中的多个模块。多个模块包括映射模块、组织模块和传送模块。映射模块被配置为将远程发送器进程中的每一个映射到与宿主节点相关联的先进先出(FIFO)子队列中的每一个,并通过使用一个或多个存储器映射文件,将每个远程发送器进程和与接收节点相关联的相应远程接收进程映射起来。组织模块被配置为将从至少一个用户接收到的消息排列在与宿主节点相关联的一个或多个FIFO子队列中;其中,FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。传送模块被配置为使用相应远程发送器进程,将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应的每个远程接收进程。
在另一种实现中,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的系统。该系统包括处理器、耦合到处理器的网络接口卡(NIC),其中,NIC启用TCP/IP以便接收消息。该系统进一步包括消息收发库和耦合到处理器的存储器,该消息收发库包括一个或多个消息发送和消息接收函数,这些消息发送和消息接收函数以无锁方式同时允许多个消息收发。处理器能够执行存储在存储器中的多个数模块。多个模块包括映射模块、检索模块和读取模块。映射模块被配置为将远程接收进程中的每一个映射到与接收节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件,将每个远程接收进程和与发送节点相关联的相应远程发送器进程映射起来。检索模块被配置为经由专用于每个用户的远程接收进程,接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,这样接收的消息被排列在FIFO子队列中,其中,每个FIFO子队列是专用于每个用户的,且存储在存储器映射文件中。读取模块被配置为通过以FIFO模式使用循环技术从FIFO子队列中的每一个读取多个消息。
在一种实现中,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法。该方法包括执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数。该方法进一步包括使用TCP/IP协议来传送多个用户消息。传送进一步包括将远程发送器进程中的每一个映射到与宿主节点相关联的每个FIFO子队列,并通过使用一个或多个存储器映射文件,将每个远程发送器进程和与接收节点相关联的相应远程接收进程映射起来。传送进一步包括将从至少一个用户接收的消息排列在与宿主节点相关联的一个或多个FIFO子队列中;其中,FIFO子队列 是专用于每个用户的,且存储在存储器映射文件中。传送进一步包括使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应每个远程接收进程。借助于处理器,执行映射、排列和传送。
在另一种实现中,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法。该方法包括执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数,以及使用TCP/IP协议来接收多个用户消息。消息的接收进一步包括将远程接收进程中的每一个映射到与接收节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件,将每个远程接收进程和与发送节点相关联的相应远程发送器进程映射起来。消息的接收进一步包括经由专用于每个用户的远程接收进程,接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,这样接收的消息被排列在FIFO子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。消息的接收进一步包括通过在FIFO模式中使用循环技术从FIFO子队列中的每一个读取多个消息。借助于处理器,执行映射、接收、排列和读取。
附图说明
参考附图描述具体实施方式。附图中,附图标记最左边数字标识首次出现该附图标记的附图。贯穿附图,使用相同的数字来指示类似的特征和组件。
图1示出根据本主题的实施方式用于在所示出的进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的(多个)系统的网络实现。
图2示出根据本主题的实施方式用于传送主宿在至少一个宿主节点上的多个消息的系统。
图3示出根据本主题的实施方式用于接收主宿在至少一个宿主节点上的多个消息的系统。
图4示出根据本主题的示例性实施方式用于传送和接收主宿在至少一个宿主节点上的多个消息的本公开的实现的配置1。
图5示出根据本主题的示例性实施方式用于传送和接收主宿在至少一个宿主节点上的多个消息的本公开的实现的配置2。
图6示出本主题中所使用的队列和子队列的结构。
图7示出根据本主题的实施方式用于传送主宿在至少一个宿主节点上的多个消息的方法。
图8示出根据本主题的实施方式用于接收主宿在至少一个宿主节点上的多个消息的方法。
图9示出根据本主题的示例性实施方式用于多发布器吞吐量测试的测试设置。
图10示出根据本主题的示例性实施方式用于多发布器吞吐量测试结果的最大吞吐量统计。
图11示出根据本主题的示例性实施方式用于多发布器等待时间测试的测试设置。
图12示出根据本主题的示例性实施方式用于多发布器的平均往返等待时间统计的测试结果。
图13示出根据本主题的示例性实施方式在以太网上使用TCP/IP的多发布器的不同吞吐量率下的平均往返等待时间统计。
具体实施方式
公开了用于在进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法。本公开的系统和方法支持多个发布器同时向异步无锁消息队列进行写入,该消息队列的远程订阅器连接到发布器,且使用传输控制协议/因特网协议(TCP/IP)来传输消息。本公开促进多个发布流写入到消息收发系统,同时维持固有的无锁能力。借助于本公开,可以允许多个发布器同时向消息收发框架进行写入,且可以允许订阅器检索来自所有发布器的所有消息。可以对在相同的物理系统上的本地发布器和订阅器以及在不同的物理消息收发系统上的远程发布器和订阅器而实现本系统。本公开实现对向异步无锁消息队列的多个同时发布的支持。
本系统和方法实现通过多个发布器的无锁消息收发,其中,由消息收发系统以无缝方式内部地向每个发布器指派专用的子队列(无需手动干预),给予所有发布器他们正在同时向相同的消息队列进行写入的印象。具有多个发布器的队列的订阅器以循环方式从所有子队列读取,以便以接近FIFO方式获取消息。借助于这种实现,所有发布器向自身的子队列写入,从而避免了对锁定的需要,且订阅器按每个发布器插入自身的子队列的顺序接收消息。在发布器到达(使用该系统)时子队列的无缝指派和发布器离开(不使用该系统)的预订保持过程确保了消息收发系统不受侵犯。对于远程消息收发系统,产生多个专用的远程发送器和远程接收器进程以便确保远程系统上的子队列的精确共享。
根据一实施方式,在被授让给本申请人的印度专利申请1546/MUM/2010中公 开了用于使用通信控制协议或因特网协议在运行在至少两个远程节点上的至少两个进程之间的进程间通信中的远程消息收发的系统和方法。该申请具体地公开使用TCP/IP的远程节点上的单个发布器和单个订阅器的远程消息收发便利。申请1546/MUM/2010公开了用于运行在两个节点上的进程间通信中的消息收发的系统,这些节点具有在可由多个进程访问的共享存储器中的队列、运行在远程发送器节点上并将消息插入到队列中的写入进程、以及运行在远程发送器节点上并同步发送来自队列的消息的远程发送器进程。远程接收进程运行在远程接收节点上,同步地接收消息并将消息插入到被存储在远程接收节点的共享存储器中的队列中,以及读取进程从被存储在远程接收节点的共享存储器上的队列中取出消息。与进程相关联的自由指针元件适于指向队列中的自由存储缓冲器;以及与进程相关联的一个数据指针元件适于指向包含进程间消息的存储缓冲器。运行在远程节点处的进程经由适于促进在进程之间的连接的通信链路传送和接收消息,该通信链路来自包括TCP/IP连接、GPRS连接、WiFi连接、WiMax连接和EDGE连接的组。申请1546/MUM/2010的全部内容通过引用合并于此,且为简洁起见不再重复。
尽管可以在任何数量的不同计算系统、环境和/或配置中实现所描述的用于传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法的多个方面,但在下列示例性系统的上下文中描述实施方式。
现在参见图1,根据本主题的实施方式,示出用于传送主宿在至少一个宿主节点上的多个消息的系统102的网络实现100。在一个实施方式中,系统102在进程间通信中从多个用户接收多个消息,并排列这样接收的消息。进一步,系统102将消息传送给接收器。进一步,根据本主题的实施方式,示出用于接收主宿在至少一个宿主节点上的多个消息的系统103的网络实现100。在一个实施方式中,系统103接收从具有至少一个用户的一个或多个宿主节点传送的多个消息。在另一实施方式中,系统103读取这样从一个或多个宿主节点接收到的多个消息。
尽管基于充当宿主节点的一个或多个服务器上实现系统102和系统103的考虑而解释本主题,但应理解,也可以在各种计算系统中实现系统102和系统103,诸如膝上型计算机、台式计算机、笔记本、工作站、大型计算机、服务器、网络服务器等等。应理解,系统102和系统103可由多个用户通过在下文中被统称为用户104的一个或多个用户设备104-1、104-2…104-N或驻留在用户设备104上的应用来访问。用户设备104的示例可以包括但不限于便携式计算机、个人数字助理、手持式设备和工作站。用户设备104通过网络106通信地耦合到系统102和系统103。
在一个实现中,网络106可以是无线网络、有线网络或其组合。网络106可以被实现为不同类型的网络中的一种,例如内联网、局域网(LAN)、广域网(WAN)、因特网等等。网络106可以是专用网络或共享网络。共享网络表示使用各种协议来相互通信的不同类型的网络的关联,这些协议例如超文本传输协议(HTTP)、TCP/IP、无线应用协议(WAP)、无限带宽协议、以太网协议等等。进一步,网络106可以包括各种网络设备,包括路由器、桥接器、服务器、计算设备、存储设备等等。
现在参见图2,根据本主题的实施方式示出系统102。在一个实施方式中,系统102可以包括至少一个处理器202、输入/输出(I/O)接口204、耦合到处理器的网络接口卡(NIC)206和存储器208。NIC启用TCP/IP。进一步,NIC可以启用TCP/IP以便传送或接收消息。至少一个处理器202可以被实现为一个或多个微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。连同其他能力一起,至少一个处理器202被配置为取出和执行被存储在存储器208中的计算机可读指令。
I/O接口204可以包括各种软件和硬件接口,例如,web接口、图形用户界面等等。I/O接口204可以允许系统102直接地或通过客户机设备104与用户交互。进一步,I/O接口204可以允许系统102与其他计算设备通信,诸如web服务器和外部数据服务器(未示出)。I/O接口204可以促进在各种各样的网络和协议类型内的多种通信,这些网络和协议类型包括有线网络(例如,LAN、线缆等等)和无线网络(例如WLAN、蜂窝或卫星)。I/O接口204可以包括用于将多个设备相互连接起来或连接到另一服务器的一个或多个端口。
存储器208可以包括本领域中已知的任何计算机可读介质,包括例如易失性存储器和/或非易失性存储器,易失性存储器例如静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM),非易失性存储器例如只读存储器(ROM)、可擦除可编程ROM、闪存、硬盘、光盘和磁带。存储器208可以包括模块210和数据212。
模块210包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在一个实现中,模块210可以包括映射模块214、组织模块216、传送模块218和其他模块220。其他模块220可以包括补充系统102的应用和功能的程序或已编码指令。
其中,数据212充当由模块208中的一个或多个处理、接收和生成的数据的 储存库。数据212也可以包括系统数据库222、消息收发库224和其他数据226。其他数据226可以包括作为其他模块220中的一个或多个模块的执行结果而生成的数据。
现在参见图3,根据本主题的实施方式示出系统103。在一个实施方式中,系统103可以包括至少一个处理器302、输入/输出(I/O)接口304、耦合到处理器的NIC306和存储器308。至少一个处理器302可以被实现为一个或多个微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机器、逻辑电路和/或基于操作指令操纵信号的任何设备。连同其他能力一起,至少一个处理器302被配置为取出和执行被存储在存储器308中的计算机可读指令。
I/O接口304可以包括各种软件和硬件接口,例如,web接口、图形用户界面等等。I/O接口304可以允许系统103直接地或通过客户机设备104与用户交互。进一步,I/O接口304可以允许系统103与其他计算设备通信,诸如web服务器和外部数据服务器(未示出)。I/O接口304促进在各种各样的网络和协议类型内的多种通信,这些网络和协议类型包括有线网络(例如,LAN、线缆等等)和无线网络(例如WLAN、蜂窝或卫星)。I/O接口304可以包括用于将多个设备相互连接起来或连接到另一服务器的一个或多个端口。
存储器308可以包括本领域中已知的任何计算机可读介质,包括例如易失性存储器和/或非易失性存储器,易失性存储器例如静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM),非易失性存储器例如只读存储器(ROM)、可擦除可编程ROM、闪存、硬盘、光盘和磁带。存储器308可以包括模块310和数据312。
模块310包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在一个实现中,模块310可以包括映射模块(314)、检索模块(316)、读取模块(318)和其他模块320。其他模块320可以包括补充系统103的应用和功能的程序或已编码指令。
其中,数据312充当由模块310中的一个或多个处理、接收和生成的数据的储存库。数据312也可以包括系统数据库322、消息收发库324和其他数据132。其他数据132可以包括作为其他模块320中的一个或多个模块的执行结果而生成的数据。
在一个实现中,首先,用户可以使用客户机设备104经由I/O接口204来访问系统102。用户可以使用I/O接口204来注册他们以便使用系统102。可以在下面 解释的图2和图3中详细解释系统102的工作。系统102可以用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息。
根据一个实施方式,参见图2,系统102包括耦合到处理器的网络接口卡(NIC),以便启用TCP/IP协议。进一步,NIC可以启用TCP/IP以便传送或接收消息。NIC能够执行来自远程宿主的TCP/IP命令。在NIC上支持TCP/IP,使用以太网来将充当发送器的至少一个宿主节点连接到充当接收器的宿主节点。可以在诸如以太网(10/100/1000MBd)、Arcnet、ATM、FDDI、光纤信道、USB、HIPPI、火线(IEEE1394)、令牌环和串行线等的硬件联网技术上支持TCP/IP。可以借助于系统102服务器上的1GbE或10GbE端口支持网络接口卡(NIC)。
系统102进一步包括消息收发库(224)。消息收发库包括一个或多个消息发送和消息接收函数。进一步,消息发送和消息接收函数可以由消息传送和接收应用进程链接和调用。根据示例性的实施方式,在以太网架构上实现TCP/IP协议,以太网被用来传送消息并接收对消息传送的确认。
参见图2,系统102包括映射模块(214),其被配置为将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个。所述映射模块还被配置成将每个远程发送器进程和与接收节点相关联的相应远程接收进程映射起来。将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个以及将每个远程发送器进程和与接收节点相关联的相应远程接收器进程映射起来是通过使用一个或多个存储器映射文件来进行的。远程发送器进程运行在充当发射器或发送器的宿主节点上。系统102中远程发送器进程的数量可以比用户数量多一。主远程发送器进程为每个子队列创建远程发送器进程线程,并初始化它们的状态。因而,可以存在比用户数量多一的远程发送器进程的数量。远程发送器进程被配置用于批处理传入的消息,并经由TCP/IP协议更新接收宿主节点上的远程接收进程。远程发送器进程被配置为通过TCP/IP协议经由远程接收器进程将发射宿主节点的子队列更新为接收宿主节点的子队列。接收节点上的远程接收器进程的数量可以比用户数量多一。可以存在每个用户的专用远程接收器进程。用户可以是发送器。用户可以是发布器。
根据一个实施方式,参见图2,系统102包括组织模块(216),组织模块(216)被配置为将从至少一个用户接收的消息排列在与宿主节点相关联的一个或多个FIFO子队列中。进一步,一个或多个宿主节点上可以存在专用于每个用户的FIFO子队列。一个或多个FIFO子队列被存储在一个或多个存储器映射文件中。组织模 块被配置为将来自每个用户的这样接收的消息排列在专用于每个用户的FIFO子队列中。用户可以是发送器。用户可以是发布器。组织模块在接收到消息后,调用消息收发库。存储器映射文件被存储在存储器208中。所创建的存储器映射文件的数量比用户数量多一。一个存储器映射文件用于主队列,且每个存储器映射文件用于为每个用户创建的子队列。存储器映射文件包含用来发送和接收消息的FIFO子队列。
根据一个实施方式,参见图2,系统102包括传送模块,其被配置为使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应远程接收器进程。系统中可以存在一个或多个用户。可以存在专用于每个用户的子队列。一个或多个FIFO子队列与主队列相关联,其中,主队列的大小等于或大于与主队列相关联的所有子队列的大小之和。远程发送器进程可以使用TCP/IP协议传送消息数据。远程发送器进程可以使用TCP/IP协议在以太网上将消息数据从接收节点传送到远程接收器进程。可以存在宿主节点上每个用户的专用远程发送器进程,且可以存在接收节点上每个用户的专用远程接收器进程以便接收消息。
根据另一实施方式,系统102进一步包括一个或多个接收节点,其被配置为从一个或多个发送器宿主节点接收消息。系统102可以包括连接发射器/发送器宿主节点和接收器宿主节点的以太网。
在一个实现中,用户可以使用客户机设备104来经由I/O接口304访问系统103。用户可以使用I/O接口304来注册他们以便使用系统103。可以在下面解释的图4和图5中详细解释系统103的工作。系统103可以在进程间通信中用来接收主宿在至少一个宿主节点上的多个消息。
根据一个实施方式,参见图3,系统103包括耦合到处理器以便启用TCP/IP协议的NIC。进一步,NIC可以启用TCP/IP协议以便传送或接收消息。NIC能够执行来自本地宿主或远程宿主的TCP/IP命令。在NIC上支持TCP/IP,使用硬件联网技术(诸如以太网(10/100/1000MBd)、Arcnet、ATM、FDDI、光纤信道、USB、HIPPI、火线(IEEE1394)、令牌环和串行线)将充当发送器的至少一个宿主节点连接到充当接收器的宿主节点。可以借助于系统103服务器上的1GbE或10GbE端口来支持网络接口卡(NIC)。
系统103进一步包括消息收发库(324)。消息收发库包括一个或多个消息发送和消息接收函数。进一步,可以由消息传送和接收应用进程链接和调用消息发送 和消息接收函数。消息发送和消息接收函数被存储在TCP/IP套接字(socket)库中。可以通过使用TCP/IP套接字库来执行消息发送和消息接收。根据示例性的实施方式,在以太网架构上实现TCP/IP协议,以太网架构被用来接收消息并提供对消息接收的确认。通过使用TCP/IP套接字库来执行消息发送和消息接收。
参见图3,系统103包括映射模块314,映射模块314被配置为将远程接收器进程中的每一个映射到与接收节点相关联的FIFO子队列中的每一个。进一步,映射模块被配置为通过使用一个或多个存储器映射文件,将每个远程接收器进程和与发送节点相关联的相应远程发送器进程映射起来。所创建的存储器映射文件的数量比用户数量多一。所创建的远程接收器进程的数量比用户数量多一。所创建的远程发送进程的数量比用户数量多一。
参见图3,系统103进一步包括检索模块316,检索模块316被配置为经由专用于每个用户的远程接收器进程接收从具有至少一个用户的一个或多个宿主节点传送的多个消息。检索模块被配置为将这样接收的消息排列在FIFO子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。系统103包括与主队列相关联的一个或多个FIFO子队列,其中,主队列的大小等于或大于与主队列相关联的所有子队列的大小之和。检索模块在接收到消息后,调用消息收发库。消息的接收可以由远程接收器进程使用TCP/IP协议在以太网上执行。用户可以是发送器。用户可以是发布器。检索模块还被配置为在它接收消息时调用消息收发库。消息的接收由一个或多个远程接收器进程使用被存储在消息收发库314中的TCP/IP套接字库来执行。存储器映射文件被存储在存储器308中。所创建的存储器映射文件的数量比用户数量多一。一个存储器映射文件用于主队列,且每个存储器映射文件用于为每个用户创建的子队列。存储器映射文件包含用来发送和接收消息的一个或多个FIFO子队列。
参见图3,系统103进一步包括读取模块318,读取模块318被配置为通过在FIFO模式中使用循环技术从FIFO子队列中的每一个读取多个消息。读取模块318促进系统的用户读取由发送器发送的消息。发送器可以是发布器,且用户可以是接收器或者可以是订阅器。系统103进一步包括一个或多个传送节点,这些传送节点被配置为传送来自一个或多个宿主节点的消息。系统103还可以包括连接发送宿主节点或传送宿主节点和接收宿主节点的以太网交换机、无线路由器或底层硬件桥接器。
根据本公开的实施方式,参见图4和图5解释本公开的实现。传统上低等待 时间的消息收发系统支持单个发布器或发送器以及一个或多个订阅器或接收器。然而,在消息收发系统必须支持多个发送器或写入器时,本公开的框架以无缝和无锁方式实现这些。本公开的系统102包括主队列,主队列被分成与在系统配置时提供的最大用户/发送器数量同样多的子队列。子队列的大小之和不超过主队列的大小。子队列的所有其他特性都从主队列继承。
当每个用户连接到主队列时,将子队列指派给每个用户以便写入。将消息写入或发送到子队列无缝地发生,如同写入到主队列的用户/发送器体验一样。因而,用户/发送器接口保持不变。用于队列的读取器的接收节点上的系统对所有子队列执行循环读取并读取数据,且读取器的接口也保持不变。
参见图4,作为示例解释配置1中的本公开的实现。让我们考虑存在使用安装在相同的宿主节点上的系统102的多个发送器发送器1、发送器2和发送器3。发送器将消息发送给被安装在服务器1上的相同系统。在服务器1上创建向队列指定发送器的数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。可以在开发时按照要求配置发送器的最大数量。出于解释目的,取发送器的数量为3。通过指定消息的大小、队列的大小和接收器对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,考虑为300个消息的大小而创建队列。由于存在3个发送器,创建3个较小的子队列,每个大小为100消息。指定接收器节点的IP地址以及接收器等待发送器连接并接收消息的端口号。
进一步,解释本公开在接收节点上的实现。考虑其中安装了系统103的接收服务器2上的接收器。在服务器2上创建向队列指定发送器数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。如上面所解释的,取发送器的数量为3,与上面相同。通过指定消息的大小、队列的大小和接收器对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,与上面解释的相同,考虑为300个消息的大小而创建队列。由于存在3个发送器,创建3个较小的子队列,每个大小为100个消息。
参见图4,解释本公开在支持TCP/IP的网络上的实现。该实现可以涉及在TCP/IP上的消息传递的两个进程,即远程发送器进程(RS)和远程接收器进程(RR)。在队列设置过程中,远程发送器进程和远程接收器进程建立TCP/IP套接字连接。发送器进程(S)可以向本地存储器映射队列文件写入。远程发送器进程(RS)可以使用TCP/IP套接字库调用(send())来传递数据,且远程接收器进程(RR)可以使用TCP/IP套接字库调用(recv())来接收数据。
参见图5,存在使用安装在不同宿主节点(诸如服务器)上的系统102的多个发送器。参见图5,作为示例,存在使用安装在不同宿主节点(诸如服务器1、服务器2)上用于传送多个消息的系统的四个用户,其中发送器1和发送器2使用服务器1,发送器3和发送器4使用服务器2。远程发送器进程RS1、RS2、RS3和RS4可以分别直接设置与远程接收器进程RR1、RR2、RR3和RR4的TCP/IP连接。远程接收器进程可以设置与连接诸如RS1和RS2的相应远程发送器进程的TCP/IP套接字连接,如图5所示。
作为示例,参见图5,在配置2中,在服务器1和服务器2上创建向队列指定发送器的数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。通过指定消息的大小、队列的大小和接收器对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,考虑,如上面所解释的在每个服务器上存在2个发送器,因此在每个服务器上创建大小为200个消息的主队列,每个服务器具有两个子队列,每个的大小为100个消息。在服务器3上的接收器节点上创建保持子队列的主队列的相似结构,以便接收和排列消息。这是很重要的,因为为了维持均一性和平衡,任一端的两个子队列必须具有相同大小。作为队列创建进程的一部分,指定接收器的IP地址以及接收器等待发送器连接的端口号。进一步,应注意,IP地址必须属于支持TCP/IP传递的NIC卡。进一步,如上面所解释的,消息的传递发生在支持TCP/IP的网络上,如以上段落中所解释的。
参见图4和图5,根据示例性的实施方式,提供消息传输的实现的详尽解释。首先在接收器端处开始远程接收器进程,然后在发送器端上开始远程发送器进程。远程接收器进程知晓为了其队列而连接到它的远程发送器进程的数量(如上面段落中提到的)。在接收器节点,开始远程接收器进程,并通过提供存储器映射文件地址将其映射到相应的子队列。远程接收器进程初始化某种状态,并等待每个发送器的远程发送器进程与它连接。接收进程在队列创建时指定的端口上侦听。在发送器的系统上,为多个发送器队列开始远程发送器进程。远程发送器进程为了队列检查系统上的发送器的数量并产生多个远程发送器进程。
因此参见图4,对于配置1,远程接收器和远程发送器进程使用TCP/IP协议来连接。远程接收器进程使用socket()库调用来创建TCP/IP套接字,使用bind()库调用绑定在队列创建时给定的IP地址和端口号,并在套接字上侦听(listen()库调用)连接到它的远程发送器进程。远程发送器进程使用socket()库调用创建TCP/IP套接字,并使用connect()库调用来连接到其中远程接收器进程进行侦听的给定IP 地址和端口。在接收到来自远程发送器进程的连接请求时,远程接收器进程使用accept()库调用来接受请求,且建立连接。在队列创建时,指定端口号。使用指定的端口号开始第一远程接收器和远程发送器进程,下一对进程使用端口号+20,下一对进程使用端口号+40,等等。
因此参见图4,对于配置1,在发送器的服务器1上,开始远程发送器进程,这又开始三个远程发送器进程。向每个远程发送器进程指派子队列并与接收器系统上的相应远程接收器进程连接。在用户提供或系统提供的端口上建立TCP/IP套接字连接。参见图5,对于配置2,远程发送器进程开始每个服务器上的两个远程发送器进程,因此对于四个发送器,总共开始了四个远程发送器进程。
参见图4,发送器的进程S1和S2从它们想要发送或发布的队列的名称和消息的数量开始。当开始每个发送器时,向其指派子队列。发送器开始通过对应的发送器进程将消息插入到子队列中,例如对于发送器1是发送器进程S1,且对于发送器2是发送器进程S2。进一步,远程发送器进程读取对应的所指派子队列中的可用消息,并将其传递到接收器的系统上的相应接收器进程。当每次传递发生时,远程接收器进程在套接字上接收消息并将它们插入到接收器的系统上的其相应子队列。然后,接收器进程以循环方式从所有子队列读取,以便读取来自所有发送器的消息。如果比所配置的数量更多的发送器尝试对队列写入,则返回错误且额外的发送器退出。如果存在较少的发送器,那么,子队列的远程发送器进程继续等待发送器开始。接收器进程检查每个子队列,且如果在它里面不存在消息则转移。当每个远程发送器进程从相应的子队列读取消息并在TCP/IP套接字上传递消息时,相应远程发送器进程更新子队列的头部区域,以这种方式,发送器知道消息已经被读取,且它继续在其子队列中写入新的消息。一旦发送器退出,子队列就变得可用于指派给另一发送器。
仍然参见图4和图5,根据本公开的实施方式,解释用于在TCP/IP网络上在进程间通信中使用系统102和系统103的多个发送器发送消息的无锁机制。提供无锁机制以便允许多个发送器将消息写到它们的已指派子队列,而不需要知道彼此的存在。将消息写入或发送到子队列无缝地发生,如同写入到主队列的发送器体验一样。因而,发送器的接口保持不变。用于队列的接收器的接收节点上的系统103对所有子队列执行循环读取以便读取数据,且接收器的接口也保持不变。因而,通过本公开的系统和方法实现多个发送器的同时写入不需要向队列提供任何锁,以及接收器端上的消息的同时读取。
参见图6,描述主队列和子队列的概念。在队列创建时,检查配置文件以便标识队列是否是多发送器队列。配置文件也提及队列可以支持的发送器的最大数量。进一步,在创建队列时,也提及消息的最大大小、队列的长度、接收器的IP地址和端口以及其他参数。
借助于以上提到的参数创建主队列。从配置文件提取发送器的数量,且创建相同数量的子队列。子队列继承主队列的所有性质,但子队列的长度按下述计算:
子队列的长度=主队列的长度/发送器的数量
作为示例,在主队列的长度为300且存在3个发送器时,每个子队列的长度是100。作为示例,主队列被称为MULT_WRITE,且存在三个发送器,子队列被命名为MULT_WRITE_0、MULT_WRITE_1和MULT_WRITE_2。
进一步,主队列也维护结构数组,其中存储了每个子队列的名称及其状态(无论当前是被分配给发送器还是未经分配)。通过在主队列中维护上面提到的信息,维护子队列的踪迹,且可以在发送器加入系统和打开队列时将子队列分配给该发送器。进一步,在发送器完成插入消息且从队列断开时,适当的子队列被标记为未经分配。子队列也包含主队列的ID以方便访问。
在发送器想要使用队列时,它打开队列MULT_WRITE。系统102的组织模块查找可用的子队列,且如果可用,系统102的组织模块将其分配给发送器。举例来说,在上面的示例中,如果四个发送器尝试打开主队列,向发送器1分配MULT_WRITE_0,向发送器2分配MULT_WRITE_1,向发送器3分配MULT_WRITE_2,且第四个发送器得到错误消息,这是因为已经分配了全部三个子队列。发送器所写的所有消息被插入到其子队列中。因而,主队列不用于消息,而是主要用于预订保持。在发送器完成插入其消息之后,它从框架断开。此时,它所使用的子队列被标记为未经分配。
根据本公开的实施方式,参见图6,描述主队列和子队列的结构。主队列的结构包含头部。头部包含队列名称、队列ID、消息大小、队列大小和其他特性。头部还包含被称为RH的子结构,RH是读取器头部。读取器头部包含数据指针元件和删除计数器。数据指针元件指向要由读取器读取的下一消息。删除计数器是由读取器读取的元素或消息的数量。头部还包括被称为WH的子结构,WH是写入器头部。写入器头部包含自由指针元件和插入计数器。自由指针元件指向写入器可以插入消息的下一位置。插入计数器是由写入器写入的元素或消息的数量。进一步,SQ代表子队列。这是在主队列下创建的子队列的名称。O代表被占用。如果子队 列已经被指派给发布器,则其为真。NO代表未被占用。如果子队列还没有被分配给发布器,则其为假。
仍然参见图6,上面的段落提到的领域属于主队列和子队列的结构。队列包括结构数组。数组的大小等于要支持的发送器的最大数量。结构数组被填充在主队列中,且在子队列中保持为空。原因在于,主队列被用来跟踪子队列,且跟踪可以分配给发送器的子队列。
仍然参见图6,解释RH和WH结构的重要性。在发送器的系统中,每个发送器进程将消息插入到其子队列中,并更新其子队列的WH结构中的变量。子队列的远程发送器进程注意到这些值的改变,并从子队列读取插入的消息,在TCP/IP套接字上发送消息并更新其子队列的RH结构。这通知了发送器进程,消息被传递到读取器,且发送器进程继续将新的消息插入到子队列中。在接收器的系统上,每个远程接收器进程从TCP/IP套接字接收由相应远程发送器进程发送的消息,并将它们插入到其子队列中。它更新子队列的WH结构中的变量。接收器进程注意到这些值的改变,并读取被插入到子队列的消息且更新子队列的RH结构。RH的值的改变通知远程接收器进程,读取器进程已经使用了消息,且它可以继续在TCP/IP套接字上接收来自远程发送器进程的消息。
仍然参见图6,根据示例性的实施方式,作为示例,主队列被称为Q_TRANSFER。让我们假设存在主队列的三个发布器或发送器,因此创建三个子队列,且它们被称为Q_TRANSFER_0、Q_TRANSFER_1和Q_TRANSFER_2。用户发起命令以便按名称Q_TRANSFER创建队列。作为调用的一部分,创建主队列,且然后,创建子队列。每个子队列是主队列长度的三分之一。主队列的所有其他性质由子队列继承。
根据本公开的实施方式,与主队列(队列)的布局和工作、存储器映射文件、远程发送器进程以及在支持TCP/IP的网络上消息的传送和接收相关的细节信息可以参见申请1546/MUM/2010。子队列的布局和工作类似于主队列(队列)。
根据本公开的实施方式,系统102和系统103包括使用带有TCP/IP的框架的多个发送器和单个接收器。对于每个发送器进程,远程发送器进程被关联。作为示例,对于单个系统上的三个发送器可以存在十个活动进程,包括三个发送器的进程、三个远程发送器进程、三个远程接收器进程和一个接收器进程。进一步,系统也包括休眠的远程发送器进程以及休眠的远程接收器进程。根据本公开的系统102、103和方法700和800,首先开始远程接收器进程。让我们调用这一主远程接收器进程。 远程接收器进程开始每个发送器的远程接收器进程。因而,如果在服务器上支持的发送器的数量为三,则主远程接收器进程开始三个远程接收器进程。然后,主远程接收器进程变为休眠。向三个远程接收器进程都分配远程接收器进程接收消息的子队列。如上文中所提到的,远程接收器进程均初始化TCP/IP套接字,并等待相应远程发送器进程连接。进一步,在发送器的服务器上开始远程发送器进程。让我们将此作为主远程发送器进程而调用。主远程发送器进程为服务器上的每个发送器开始远程发送器进程。因而,如果在服务器上支持的发送器的数量为三,则主远程发送器进程开始三个远程发送器进程。然后,主远程发送器进程变为休眠。向三个远程发送器进程都分配子队列。然后,每个远程发送器进程联系相应远程接收器进程,并且如上文中所提到的创建TCP/IP套接字连接以便相互通信。因而,每个远程接收器进程由相应远程发送器进程联系,且建立了TCP/IP套接字通信信道。
进一步,系统102上的每个远程发送器进程通过检查子队列头部的WH结构中的自由指针变量的位置和插入计数器的值等待发送器进程开始将消息插入到其子队列中。在注意到改变时,远程发送器进程构造包含子队列中的所有可用消息的消息并在TCP/IP套接字上使用send()库调用发送。在专利申请1546/MUM/2010中详细描述了传送的进程。进一步,远程发送器进程更新子队列中的RH结构,以便通知发送器进程:消息已经被传递到接收器的系统。
根据示例性的实施方式,解释通过使用队列和子队列本公开在支持TCP/IP的网络上的工作。系统103上的远程接收器进程通过recv()库调用接收在TCP/IP套接字上发送消息。在专利申请1546/MUM/2010中详细描述接收消息的进程。远程接收器进程更新子队列中的WH结构以便通知接收器进程:消息已被插入到队列中。接收器进程以循环方式检查每个子队列头部的WH结构中的自由指针变量的状态和插入计数器的值。在注意到改变时,接收器进程从子队列读取消息并更新子队列的RH结构,向远程接收器进程告知消息已被使用,且可以从TCP/IP套接字接收进一步的消息并将其插入到子队列中。
现在参见图7,根据本主题的实施方式,示出在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法700。可以在计算机可执行指令的一般上下文中描述方法700。一般地,计算机可执行指令可以包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等等。方法700也可以在分布式计算环境中实践,分布式计算环境中,功能由通过通信网络链接的远程处理设备执行。在分布式计算环境中,计算机可执行指令可以位于包括存 储器存储设备的本地和远程计算机存储介质中。
描述方法700的次序不应被解释成限制,且任何数量的所描述的方法框可以以任何次序组合以便实现方法700或替代的方法。另外,可以在不偏离在此描述的本主题的精神和范围的前提下从方法700删除个别框。此外,可以以任何合适的硬件、软件、固件或其组合实现该方法。然而,为便于解释,下面描述的各实施方式中,可以考虑在上面所描述的系统102中实现方法700。
参见图7,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法(700)。方法700包括通过使用TCP/IP协议来传送多个用户消息而执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数。在一个实现中,消息发送和消息接收函数可以被存储在消息收发库224中,且可以由存储在存储器中的模块调用并由处理器执行。TCP/IP协议得到了NIC的支持。
在步骤702,可以将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个,且在步骤704,通过使用一个或多个存储器映射文件,可以将每个远程发送器进程映射到与接收节点相关联的相应远程接收器进程。在一个实现中,可以由映射模块214执行将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个并且通过使用一个或多个存储器映射文件将每个远程发送器进程和与接收节点相关联的相应对应远程接收器进程关联起来。
在步骤706,可以将从至少一个用户接收到的消息排列在与宿主节点相关联的一个或多个FIFO子队列中,其中,每个FIFO子队列可以是专用于每个用户的,且可以被存储在存储器映射文件中。在一个实现中,可以由组织模块216执行消息的接收并且将消息排列在与宿主节点相关联的FIFO子队列中。
在步骤708,通过使用相应远程发送器进程,可以将来自与宿主节点相关联的每个FIFO子队列的消息传送给与接收器节点相关联的相应远程接收器进程。在一个实现中,可以由传送模块218执行使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送给与接收器节点相关联的相应远程接收器进程。借助于处理器202执行包括映射、排列和传送的诸如702、704、706和708等的方法700步骤。所创建的存储器映射文件的数量可以比用户数量多一,且远程发送器进程的数量可以比用户数量多一。远程接收器进程的数量可以比用户数量多一。方法700通过使用至少一个网络接口卡(NIC)在支持TCP/IP的网络上执行该方法。
现在参见图8,根据本主题的一个实施方式,描述了用于在进程间通信中接收 主宿在至少一个宿主节点上的多个消息的方法800。可以在计算机可执行指令的一般上下文中描述方法800。一般地,计算机可执行指令可以包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等等。方法800也可以在分布式计算环境中实践,分布式计算环境中,功能由通过通信网络链接的远程处理设备执行。在分布式计算环境中,计算机可执行指令可以位于包括存储器存储设备的本地和远程计算机存储介质上。
描述方法800的次序不应被解释成限制,且任何数量的所描述的方法框可以以任何次序组合以便实现方法800或替代的方法。另外,可以在不偏离在此描述的本主题的精神和范围的前提下从方法800删除个别框。此外,可以以任何合适的硬件、软件、固件或其组合实现该方法。然而,为便于解释,下面描述的各实施方式中,可以考虑在上面所描述的系统103中实现方法800。
参见图8,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法(800)。方法800包括通过使用TCP/IP协议来接收多个用户消息而执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数。在一个实现中,消息发送和消息接收函数可以被存储在消息收发库324中,且可以由存储在存储器308中的模块310调用并由处理器302执行。TCP/IP协议可以由NIC支持。
在步骤802,接收节点的远程接收器进程中的每一个可以被映射到与接收节点相关联的每个FIFO子队列,且在步骤804,可以通过使用一个或多个存储器映射文件,将每个远程接收器进程和与发送节点相关联的相应远程发送器进程映射起来。在一个实现中,由映射模块314执行将接收节点的远程接收器进程中的每一个映射到与接收节点相关联的每个FIFO子队列并且通过使用一个或多个存储器映射文件将每个远程接收器进程和与发送节点相关联的相应远程发送器进程映射起来。
在步骤806,可以接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,且在步骤808可以将这样接收的消息排列在FIFO子队列中,其中,FIFO子队列可以是专用于每个用户的,且可以被存储在存储器映射文件中。在一个实现中,可以由检索模块316执行接收从具有至少一个用户的一个或多个宿主节点传送的多个消息并且将这样接收的消息排列在FIFO子队列中,其中,FIFO子队列可以是专用于每个用户的。
在步骤810,可以通过在FIFO模式中使用循环技术读取来自FIFO子队列中的每一个的多个消息。在一个实现中,通过在FIFO模式中使用循环技术读取来自FIFO子队列中的每一个的多个消息可以由读取模块316执行。借助于处理器执行 包括映射、接收、排列和读取的方法800步骤802、804、806、808、810。所创建的存储器映射文件的数量可以比用户数量多一。所创建的远程发送器进程的数量可以比用户数量多一。所创建的远程接收器进程的数量可以比用户数量多一。用户可以是发送器。用户可以是发布器。接收器可以是订阅器。方法800可以由至少一个NIC在支持TCP/IP协议的网络上执行。
根据示例性的实施方式,参见图10,提供了用于低等待时间FIFO消息收发中支持多发送器的系统102和系统103的性能结果。如图10中所示出,用于吞吐量测试的所测试的系统是在本地消息收发系统和TCP/IP协议上的进程间通信(IPC)上工作的系统102和103。该系统被称为定制队列(CBQ)。提供了吞吐量测试结果。吞吐量是在发布器和订阅器之间或发送器和接收机之间可以交换消息的最大速度。参见图9,示出了用于吞吐量测试的测试设置。作为示例,已经用C实现了定制队列(CBQ)。由于用Java实现了用于吞吐量测试的贸易应用,使用JNI(Java本地接口)来调用来自Java应用的本机C代码函数。参见图10,提供了对三个发布器使用Java和C应用程序的多发布器定制队列(CBQ)的最大吞吐量性能。发布器可以是发送器。订阅器可以是接收机。
根据本公开的示例性实施方式且作为示例,参见图10,在吞吐量测试中,在服务器1处的发布器将大小为512字节的消息插入到多发布器定制队列(CBQ)中。在同时消息之间不存在思考时间。在服务器2上订阅器端处的系统103计算接收一百万个消息的时间并计算每秒钟的消息吞吐量(msgs/sec)。定制队列(CBQ)的大小是30个消息。用Java实现的发布器使用了ByteArray消息,且用C实现的发布器使用字符串消息。如图9中所示出的,在相同的系统(IPC)上以所有进程(3个发布器+1个订阅器)实施测试,且在由1Gbps链路(TCP-1G)、10Gbps链路(TCP-10G)连接的不同服务器上以发布器和订阅器(3个发布器+1个订阅器)实施测试。参见图10,提供了吞吐量测试结果。
根据示例性的实施方式,参见图12,提供了用于低等待时间FIFO消息收发中支持多发送器的系统102和系统103中的等待时间测试结果。如图12所示,用于等待时间测试的所测试的系统是在本地消息收发系统和TCP/IP协议上的进程间通信(IPC)上工作的系统102和103。等待时间是消息行进到接收器且响应回到发送器所花费的时间。参见图11,示出了等待时间测试的测试设置。作为示例,在服务器1上的三个发布器将消息插入到多发布器定制队列(CBQ)。发布器可以是消息的发送器。就在插入消息之前将时间戳嵌入到消息中。在服务器2上的订 阅器从多发布器CBQ读取消息,且又在被连接到服务器1上的订阅器的点对点CBQ上发布它。这是回环。订阅器可以是消息的接收器。在服务器1上的订阅器读取消息,并计算在发送消息和接收消息之间的时差。这是消息的等待时间。参见图12,计算了所有三种部署的一百万个消息的往返等待时间的平均值并在图12中报告。以五万(50000)消息/秒的吞吐率发送消息。如先前说明的,CBQ大小是30。
根据另一示例性的实施方式,描述了各种TCP/IP吞吐量和相应的等待时间统计。描述了各种TCP/IP吞吐量和相应的等待时间统计。参见图13,示出了使用TCP/IP在TCP/IP套接字库上通过系统102和系统103的多发布器CBQ的平均往返等待时间统计。针对不同的发布器吞吐量率50,000msgs/sec、100,000msgs/sec和最大的吞吐量,实施了等待时间测试。参见图13,示出了使用TCP/IP在TCP/IP套接字库上通过系统102和系统103的多发布器CBQ的平均往返等待时间统计。最大吞吐量指示其中在相继的消息之间发布器具有零思考时间的测试。对于最大吞吐量测试,图中提到了个体发布器的吞吐量的平均值。对于1、3、6和9个发布器,已经进行了测量。在对于六个和九个发布器的测试中,发布器跨越两个服务器而分布。已经用Java实现发布器和订阅器。发布器可以是消息的发送器
根据本公开的另一实施方式,本公开提供对多发布器的支持,而无需使用锁定机制来调节对相同队列的写入访问。在商用服务器上所公开的系统和方法获得了高的消息收发性能。作为示例,所获得的高吞吐量消息收发多于由带有单个发布器的订阅器用户每秒提供650000消息,且每添加三个发布器存在小于10%的降级。进一步,参见图13和指示最大吞吐量的线条,可以解释小于10%的降级。对于1个发布器,订阅器以680,000msgs/sec提供消息,对于3个发布器则为633,000msgs/sec(这几乎是210,000*3=630,000msgs/sec),对于6个发布器则为662,000msgs/sec(这几乎是6*110,000=660,000msgs/sec),且对于9个发布器则为595,000msgs/sec(这几乎是70,000*9=630,000msgs/sec)。对于同时9个发布器,以低于1ms的等待时间跨网络递送低等待时间消息。进一步,本公开将多发布器特征延伸到本地和远程消息收发系统。
根据示例性的实施方式,下面的表1中提供用于吞吐量、等待时间和TCP/IP测试的网络接口卡信息。
表1
根据示例性的实施方式,下面的表2中提供用于吞吐量、等待时间和TCP/IP测试的系统102和系统103的服务器的硬件配置。
表2。
Claims (26)
1.一种用于在进程间通信中传送多个消息的系统,所述多个消息主宿在至少一个宿主节点上,所述系统包括:
处理器;
耦合到所述处理器的网络接口卡(NIC),其中所述网络接口卡启用TCP/IP以便发送消息;
包括一个或多个消息发送和消息接收函数的消息库,所述消息发送和消息接收函数以无锁方式同时允许多个消息收发;以及
耦合到所述处理器的存储器,其中所述处理器执行存储在所述存储器中的多个模块,所述多个模块包括:
映射模块,所述映射模块被配置为将远程发送器进程中的每一个映射到与所述宿主节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件将每个远程发送器进程和与接收节点相关联的相应远程接收器进程映射起来;
组织模块,所述组织模块被配置为将从至少一个用户接收到的消息排列在所述与所述宿主节点相关联的一个或多个FIFO子队列中;其中,所述FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
传送模块,所述传送模块被配置为使用所述相应远程发送器进程将来自与所述宿主节点相关联的每个FIFO子队列的消息传送到与所述接收节点相关联的所述相应远程接收器进程。
2.如权利要求1所述的系统,其特征在于,一个或多个FIFO子队列与主队列相关联,其中所述主队列的大小等于或大于出现在所述系统中的所有子队列的大小之和。
3.如权利要求1所述的系统,其特征在于,所述组织模块在接收所述消息后,调用消息收发库。
4.如权利要求1所述的系统,其特征在于,所述用户是发送器。
5.如权利要求1所述的系统,其特征在于,所述远程发送器进程使用TCP/IP套接字库传送所述消息数据。
6.如权利要求1所述的系统,其特征在于,所述存储器映射文件的数量比用户数量多一,且所述远程发送器进程的数量比用户数量多一。
7.如权利要求1所述的系统,其特征在于,在使用以太网、无线局域网、ARCnet的所述网络接口卡上支持所述TCP/IP,以便将充当发送器的至少一个宿主节点连接到充当接收器的宿主节点。
8.如权利要求1所述的系统,进一步包括一个或多个接收节点,所述一个或多个接收节点被配置为接收来自一个或多个发送器宿主节点的消息。
9.如权利要求1所述的系统,其特征在于,所述传送宿主节点和所述接收宿主节点由以太网交换机或无线路由器或硬件桥接器连接。
10.一种用于在进程间通信中接收多个消息的系统,所述多个消息主宿在至少一个宿主节点上,所述系统包括:
处理器;
耦合到所述处理器的网络接口卡(NIC),其中所述网络接口卡启用TCP/IP以便接收消息;
消息收发库,包括一个或多个消息发送和消息接收函数,所述一个或多个消息发送和消息接收函数以无锁方式同时允许多个消息收发;以及
耦合到所述处理器的存储器,其中所述处理器执行存储在所述存储器中的多个模块,所述多个模块包括:
映射模块,所述映射模块被配置为将远程接收器进程中的每一个映射到与所述接收节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件,将每个远程接收器进程和与发送节点相关联的相应远程发送器进程映射起来;
检索模块,所述检索模块被配置为经由专用于每个用户的远程接收器进程接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,这样接收的消息被排列在FIFO子队列中,其中每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
读取模块,所述读取模块被配置为通过在FIFO模式中使用循环技术从所述FIFO子队列中的每一个读取所述多个消息。
11.如权利要求10所述的系统,其特征在于,一个或多个FIFO子队列与主队列相关联,其中所述主队列的大小等于或大于出现在所述系统中的所有子队列的大小之和。
12.如权利要求10所述的系统,其特征在于,所述检索模块在接收消息之后调用消息收发库。
13.如权利要求10所述的系统,其特征在于,由所述远程接收器进程使用TCP/IP套接字库来执行消息的接收。
14.如权利要求10所述的系统,其特征在于,所述存储器映射文件的数量比用户数量多一。
15.如权利要求10所述的系统,其特征在于,所述远程接收器进程的数量比用户数量多一。
16.如权利要求10所述的系统,其特征在于,在使用以太网或无线局域网或ARCnet的所述网络接口卡上支持所述TCP/IP,以便将充当发送器的至少一个宿主节点连接到充当接收器的所述宿主节点。
17.如权利要求10所述的系统,进一步包括被配置成传送来自一个或多个宿主节点的消息的一个或多个传送节点。
18.如权利要求10所述的系统,其特征在于,所述传送宿主节点和所述接收宿主节点由以太网交换机或无线路由器或硬件桥接器连接。
19.一种用于在进程间通信中传送多个消息的方法,所述多个消息主宿在至少一个宿主节点上,所述方法包括:
执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数;
使用TCP/IP来传送多个用户消息;所述传送进一步包括:
将远程发送器进程中的每一个映射到与所述宿主节点相关联的FIFO子队列中的每一个,并使用一个或多个存储器映射文件将每个远程发送器进程和与接收节点相关联的相应远程接收器进程映射起来;以及
将从至少一个用户接收到的消息排列在与所述宿主节点相关联的一个或多个FIFO子队列中,其中所述FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中,以及
使用所述相应远程发送器进程,将来自与所述宿主节点相关联的每个FIFO子队列的消息传送到与所述接收节点相关联的相应每个远程接收器进程;
其中,借助于处理器执行所述映射、所述排列和所述传送。
20.如权利要求19所述的方法,其特征在于,所述存储器映射文件的数量比用户数量多一,且所述远程发送器进程的数量比用户数量多一。
21.如权利要求19所述的方法,其特征在于,在支持所述TCP/IP的网络上通过至少一个网络接口卡(NIC)执行所述方法。
22.一种用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法,所述方法包括:
执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数;
使用TCP/IP来接收多个用户消息;所述接收进一步包括:
将远程接收器进程中的每一个映射到与所述接收节点相关联的FIFO子队列中的每一个,并使用一个或多个存储器映射文件,将每个远程接收器进程和与发送节点相关联的相应远程发送器进程映射起来;
经由专用于每个用户的远程接收器进程接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,这样接收的所述消息被排列在FIFO子队列中,其中每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
在FIFO模式中使用循环技术读取来自所述FIFO子队列中的每一个的所述多个消息;
其中,借助于处理器执行所述映射、所述接收、所述排列和所述读取。
23.如权利要求22所述的方法,其特征在于,所述存储器映射文件的数量比用户数量多一。
24.如权利要求22所述的方法,其特征在于,所述远程接收器进程的数量和所述远程发送器进程的数量比用户数量多一。
25.如权利要求22所述的方法,其特征在于,所述用户是发送器。
26.如权利要求22所述的方法,其特征在于,通过至少一个网络接口卡(NIC)在支持TCP/IP的网络上执行所述方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN3528MU2013 IN2013MU03528A (zh) | 2013-11-08 | 2013-11-08 | |
IN3528/MUM/2013 | 2013-11-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104639597A CN104639597A (zh) | 2015-05-20 |
CN104639597B true CN104639597B (zh) | 2018-03-30 |
Family
ID=53217903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410035636.XA Active CN104639597B (zh) | 2013-11-08 | 2014-01-24 | 用于使用tcp/ip协议的低等待时间fifo消息收发中支持多发送器的系统和方法 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN104639597B (zh) |
AU (1) | AU2014200243B2 (zh) |
IN (1) | IN2013MU03528A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116260893B (zh) * | 2023-02-06 | 2023-09-12 | 中国西安卫星测控中心 | 一种数据处理系统消息订阅发布装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320360A (zh) * | 2007-05-10 | 2008-12-10 | 辉达公司 | 用于并行集成电路结构的消息排队系统和相关操作方法 |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8266290B2 (en) * | 2009-10-26 | 2012-09-11 | Microsoft Corporation | Scalable queues on a scalable structured storage system |
US9065778B2 (en) * | 2012-03-20 | 2015-06-23 | International Business Machines Corporation | Dynamic message retrieval by subdividing a message queue into sub-queues |
-
2013
- 2013-11-08 IN IN3528MU2013 patent/IN2013MU03528A/en unknown
-
2014
- 2014-01-15 AU AU2014200243A patent/AU2014200243B2/en active Active
- 2014-01-24 CN CN201410035636.XA patent/CN104639597B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320360A (zh) * | 2007-05-10 | 2008-12-10 | 辉达公司 | 用于并行集成电路结构的消息排队系统和相关操作方法 |
US7627744B2 (en) * | 2007-05-10 | 2009-12-01 | Nvidia Corporation | External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换系统 |
AU2011265444A1 (en) * | 2011-06-15 | 2013-01-10 | Tata Consultancy Services Limited | Low latency FIFO messaging system |
Also Published As
Publication number | Publication date |
---|---|
CN104639597A (zh) | 2015-05-20 |
AU2014200243A1 (en) | 2015-05-28 |
AU2014200243B2 (en) | 2015-06-18 |
IN2013MU03528A (zh) | 2015-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104639596B (zh) | 用于使用rdma的低等待时间fifo消息收发中支持多个发送器的系统和方法 | |
CN104426800B (zh) | 用于在对等通信网络中管理消息队列的系统和方法 | |
CN104954253B (zh) | 用于数据中心覆盖网络的基于PCIe的主机网络加速器(HNA) | |
US9013994B2 (en) | Distributed chassis architecture having integrated service appliances | |
CN100375469C (zh) | 在物理端口上模拟多个逻辑端口的方法和装置 | |
CN111769998B (zh) | 一种网络时延状态的探测方法及装置 | |
CN107710238A (zh) | 具有堆栈存储器的硬件加速器上的深度神经网络处理 | |
CN104954252B (zh) | 在高性能、可扩展和无掉话的数据中心交换结构内的流控制 | |
US20040024873A1 (en) | Load balancing the servicing of received packets | |
CN109388213A (zh) | 服务器系统、计算机实施方法及非暂态计算机可读介质 | |
CN106888218A (zh) | 消息处理方法、装置、客户端及服务端 | |
GB2414316A (en) | Centralized encapsulation and routing in a PCI Express Advanced Switching system | |
CN110138630A (zh) | 内置测试业务生成器 | |
CN109257320A (zh) | 消息存储方法和装置 | |
CN105554176B (zh) | 发送报文的方法、装置和通信系统 | |
US9137173B2 (en) | Devices and methods for interconnecting server nodes | |
CN108984327A (zh) | 报文转发方法、多核cpu及网络设备 | |
CN104639597B (zh) | 用于使用tcp/ip协议的低等待时间fifo消息收发中支持多发送器的系统和方法 | |
CN116074323B (zh) | 边缘计算节点的选择方法、装置、计算机设备及介质 | |
CN109299195A (zh) | 数据处理方法、装置及存储介质 | |
JP2017139567A (ja) | 端末、中継装置選択装置、通信方法、中継装置選択方法、及びプログラム | |
CN109739800A (zh) | 节点控制器的调度系统及fpga板卡 | |
US20140052771A1 (en) | Remote procedure call for a distributed system | |
CN107592340A (zh) | 远程操作管理服务器的方法和设备 | |
CN107920035A (zh) | 被设计用于确定性交换式以太网的处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |