CN116760510B - 一种消息发送方法、消息接收方法、装置和设备 - Google Patents
一种消息发送方法、消息接收方法、装置和设备 Download PDFInfo
- Publication number
- CN116760510B CN116760510B CN202311024680.6A CN202311024680A CN116760510B CN 116760510 B CN116760510 B CN 116760510B CN 202311024680 A CN202311024680 A CN 202311024680A CN 116760510 B CN116760510 B CN 116760510B
- Authority
- CN
- China
- Prior art keywords
- message
- sent
- channel
- node
- port
- 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
- 238000000034 method Methods 0.000 title claims abstract description 87
- 230000005540 biological transmission Effects 0.000 claims abstract description 26
- 230000015654 memory Effects 0.000 claims description 55
- 230000004044 response Effects 0.000 claims description 42
- 230000002159 abnormal effect Effects 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 16
- 238000004891 communication Methods 0.000 description 28
- 230000006870 function Effects 0.000 description 20
- 238000012545 processing Methods 0.000 description 9
- 230000009471 action Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 239000000284 extract Substances 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 238000012856 packing Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 102100020760 Ferritin heavy chain Human genes 0.000 description 2
- 101001002987 Homo sapiens Ferritin heavy chain Proteins 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 241000234282 Allium Species 0.000 description 1
- 235000002732 Allium cepa var. cepa Nutrition 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000011217 control strategy Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/1607—Details of the supervisory signal
- H04L1/1621—Group acknowledgement, i.e. the acknowledgement message defining a range of identifiers, e.g. of sequence numbers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/56—Queue scheduling implementing delay-aware scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/625—Queue scheduling characterised by scheduling criteria for service slots or service orders
- H04L47/626—Queue scheduling characterised by scheduling criteria for service slots or service orders channel conditions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种消息发送方法、消息接收方法、装置和设备,消息发送方法包括:当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源,在所述多个端口资源中查询是否有空闲的信道;如果有空闲信道,则建立空闲信道、可用端口资源和至少一个待发送消息之间的一个或多个匹配关系,以及为每个匹配关系中的消息分配一个序列号;将至少一个所述消息按照所述序列号的顺序发送给第二节点。当第二节点接收后,能够对接收的至少一个消息的序列号进行比对,从而保证消息传输的有序性,避免消息发生过程中发生丢失、乱序等错误,本方法提高了传输消息的安全性。
Description
技术领域
本发明涉及通信网络技术领域,尤其是涉及一种消息发送方法、消息接收方法、装置和设备。
背景技术
在存储***中,异于普通网络通信,比如音视频文件传输、实时对话等,存储***控制器作为集群节点相互通信传输需要具有高可靠性,比如包括:不丢数据、不错数据、通信时延低等。而且,随着客户业务的发展,集群通信量越来越大,既要保证数据通信可靠性,同时还要满足时效性、高性能,对现有集群通信架构及实现细节带来巨大挑战。
目前,集群通信架构是参考TCP/IP协议体系结构,另外,也设计了分层消息传输机制,如层层封包、层层隔离,从而达到架构的简洁性和健壮性,并且辅以流量控制策略、重复帧检测机制、快速应答和重传等技术手段,以满足中低端存储***的性能指标要求。为适配NVMe(non-volatile memory express,非易失性内存接口规范)协议的RDMA(RemoteDirect Memory Access,远程直接地址访问)链路,也曾探索式寻求多队列并发通信提高集群通信性能,但实践中发现该方式存在底层通信资源浪费。经过深入测试发现,当前存储***集群通信存在端口资源不足,并且在发送消息时还会导致消息丢失、重复以及乱序等错误。
发明内容
为解决上述消息发送时发生丢失、顺序错乱的问题,本申请实施例提供了一种消息发送方法、消息接收方法、装置和设备,具体地,公开了如下技术方案:
第一方面,本申请实施例提供了一种消息发送方法,方法应用于第一节点,第一节点上包括多个端口资源,方法包括:
当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源;
在所述多个端口资源中查询是否有空闲的信道;如果有空闲信道,则建立空闲信道、可用端口资源和至少一个待发送消息之间的一个或多个匹配关系,以及为每个匹配关系中的消息分配一个序列号;
将至少一个所述消息按照所述序列号的顺序发送给第二节点。
结合第一方面,在一种可能的实施方式中,所述在所述多个端口资源中查询是否有空闲的信道之前,所述方法还包括:
接收来自所述第二节点发送的一个或多个读请求消息,每个所述读请求消息中携带信道标识;解析所述一个或多个读请求消息,获得每个所述读请求消息中的信道标识;
在所述多个端口资源中查询是否有空闲的信道,包括:
根据所述信道标识查询是否有空闲的信道。
结合第一方面,在另一种可能的实施方式中,一个或多个匹配关系包括第一匹配关系,第一匹配关系包括第一信道、第一端口资源和第一待发送消息之间的关联关系;
建立第一信道、第一端口资源和第一待发送消息之间的匹配关系,包括:第一节点根据第一信道的标识和第一预设关系建立第一信道与第一端口资源之间的匹配关系;
按照第一端口资源的容量大小遍历消息队列中的至少一个待发送消息,在待发送消息的大小不超过第一端口资源的容量的条件下,确定第一待发送消息;
建立所述第一待发送消息、所述第一端口资源和所述第一信道之间的匹配关系。
结合第一方面,在又一种可能的实施方式中,第一待发送消息是一个消息,或者是由两个或两个以上消息组合的消息块;所述方法还包括:
在遍历消息队列中的至少一个待发送消息时,如果第二待发送消息和第三待发送消息的容量总和不超过第一端口资源的总容量,将第二待发送消息和第三待发送消息进行内存合并;
将合并后的消息块作为第一待发送消息,与所述第一信道和所述第一端口资源建立第一匹配关系。
结合第一方面,在又一种可能的实施方式中,所述将所述至少一个消息按照所述序列号的顺序发送给第二节点,包括:获取复用列表,将所述已分配序列号的至少一个消息存储在所述复用列表中。
结合第一方面,在又一种可能的实施方式中,所述复用列表的至少一个消息中包括第一消息,将所述第一消息按照序列号顺序发送给所述第二节点之后,还包括:
接收所述第二节点根据所述第一消息反馈的第一应答响应;
解析所述第一应答响应,并根据解析的内容确定所述第一消息是否正常发送。
如果解析内容指示所述第一消息发送正常,则在所述复用列表中回收所述第一消息对应的端口资源,以及释放与所述端口资源匹配的信道资源。
结合第一方面,在又一种可能的实施方式中,所述方法还包括:如果解析所述第一应答响应得到发送异常的信息,则将所述复用列表中的所述第一消息重新发送给所述第二节点。
结合第一方面,在又一种可能的实施方式中,所述第一节点上的多个端口资源的数量为144个。
结合第一方面,在又一种可能的实施方式中,方法还包括:当在所述多个端口资源中查询无空闲信道时,返回并释放第一节点的CPU资源。
第二方面,本申请实施例还提供一种消息接收方法,该方法应用于第二节点,第二节点上包括多个端口资源,所述方法包括:
接收第一节点发送的至少一个消息,每个消息中携带被分配的序列号,且每个所述消息与一空闲信道和以可用端口资源具有匹配关系;
解析每个消息得到每个消息中被分配的序列号,并将序列号与本地存储的序列号进行比较;如果序列号一致,则进入消息出队、解析和转发流程,以及生成至少一个应答响应;
将至少一个应答响应发送给第一节点。
结合第二方面,在一种可能的实施方式中,将序列号与本地存储的序列号进行比较,包括:比较每个消息中的序列号与当前接收消息队列中期待的序列号是否一致。
结合第二方面,在另一种可能的实施方式中,方法还包括:如果比较不一致,则判断当前消息中的序列号比期待的序列号更新或者更旧;
如果比期待的序列号更新,则确定消息提前到达,第二节点将信道重新放入队列中等待下次调度处理;
如果比期待的序列号更旧,则确定当前消息是重复消息,第二节点丢弃当前消息。
结合第二方面,在又一种可能的实施方式中,进入消息出队、解析和转发流程,以及生成至少一个应答响应,包括:
解析当前接收消息队列中的关键字段,在当前接收消息队列中增加消息的序列号,并触发业务模块提取函数;
在函数提取完成后,等待当前消息接收队列释放;
待当前消息接收队列释放后,将应答响应的序列号赋值到对应的信道中,并通过信道发送应答响应至第一节点。
第三方面,本申请实施例还提供一种消息发送装置,该装置包括:
第一获取单元,用于当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源;
第一查询单元,用于在所述多个端口资源中查询是否有空闲的信道;
第一建立单元,用于在第一查询单元查询到有空闲信道时,建立空闲信道、可用端口资源和至少一个待发送消息之间的一个或多个匹配关系,以及为每个所述匹配关系中的消息分配一个序列号;
第一发送单元,用于将至少一个所述消息按照所述序列号的顺序发送给第二节点。
此外,该消息发送装置中的各个功能单元还用于实现前述第一方面中其他实施方式的方法步骤。
第四方面,本申请实施例还提供一种消息接收装置,该装置包括:
接收单元,用于接收第一节点发送的至少一个消息,每个消息中携带被分配的序列号,且每个所述消息与一空闲信道和以可用端口资源具有匹配关系;
处理单元,用于解析每个消息得到每个消息中被分配的序列号,并将序列号与本地存储的序列号进行比较;比较序列号一致时,进入消息出队、解析和转发流程,以及生成至少一个应答响应;
第二发送单元,用于将至少一个应答响应发送给第一节点。
此外,该消息接收装置中的各个功能单元还用于实现前述第二方面中其他实施方式的方法步骤。
第五方面,本申请实施例还提供一种消息发送***,***包括第一节点和第二节点;其中,所述第一节点中包括前述第三方面所述的消息发送装置;所述第二节点中包括前述第四方面所述的消息接收装置。
第六方面,本申请实施例还提供一种电子设备,包括:存储器和处理器,存储器和处理器之间通过信道连接;存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行前述第一方面以及第一方面任一实施方式所述消息发送方法。
此外,该电子设备中,当所述处理器通过执行计算机指令,还执行前述第二方面以及第二方面任一实施方式所述消息接收方法。
第七方面,本申请实施例还提供一种计算机可读存储介质,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或第二方面及其对应的任一实施方式的消息发送方法和/或消息接收方法。
本发明提供的消息发送方法中,发送端节点通过建立可用端口资源、空闲信道和消息队列中的至少一个消息之间的匹配关系,并为这些匹配关系设置不同序列号,使得接收端节点在接收到发送端节点发送的消息时,能够对接收的消息的序列号进行比对,从而保证消息传输的有序性,避免发送端节点所发送的消息发生丢失、乱序等错误,本方法通过多队列多线程并发处理的方式,保证了传输消息的安全性,同时还提高传输性能。
另外,本方法中利用多个端口资源还实现集群通信低时延的目标,通过调整发送消息出队时的资源数,降低发送消息队列时延,提高IOPS和吞吐量,并能保证***稳定可靠。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种集群传输的场景示意图;
图2是本发明实施例提供的一种多控存储***的架构示意图;
图3是本发明实施例提供的一种消息发送方法的流程示意图;
图4是本发明实施例提供的另一种消息发送方法的流程示意图;
图5是本发明实施例提供的一种消息接收方法的流程示意图;
图6是本发明实施例提供的一种消息发送装置的结构框图;
图7是本发明实施例提供的一种消息接收装置的结构框图;
图8是本发明实施例提供的一种电子设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的技术方案针对高端存储***集群通信提出的性能优化方案。
具体地,根据测试模型反复测试的数据,各种端口类型性能情况,调整预分配的端口资源上限。从而对不同链路类型,扩大IO(输入输出)并发配置值,从而发挥出链路的最大传输功效。
参见图1,为本发明实施例提供的一种集群传输的场景示意图。该集群传输***中包括:第一节点100和第二节点200,其中,第一节点100和第二节点200之间通过传输信道(channel)通信连接。可选的,所述通信信道又可称为通信链路,如PCIe(PCI Express,高速串行计算机扩展总线标准,简称PCIe)链路。
应理解,上述集群***中还可以包括第三节点、第四节点等更多节点,本实施例对此不做限制,且两个节点之间的信道数可以是一个或多个,传输信道符合TCP/IP协议。
其中,所述第一节点100和第二节点200可以是网络设备,比如交换机、服务器等设备。
本实施例中,以第一节点100作为发送端设备,第二节点200作为接收端设备举例,首先对于发送端设备的第一节点,该第一节点中可以包括:至少一个通信链路,比如PCIe链路,且每个PCIe链路支持并发传输DMA数据的缓冲内存池个数为144个。
每个传输数据的缓冲内存池预分配大小为32K,即可以打包拼接形成32K的内存区,通过DMA方式传输到接收端的第二节点。对方接收端直接读取该缓冲内存区,通过解包读取报头的方式,解析出序列号(seqn)、模块id和地址、偏移等信息,进而转发传递。
随着内存硬件性能提升,客户业务IO压力增大,通过性能摸测分析得出,传输数据的缓冲内存池成为集群通信性能提升的瓶颈,因此在传输环节亟需适配和改造。
应理解,上述节点之间的连接除了PCIe链路进行缓冲内存池个数的扩增,其他链路类型,比如FC(Fibre Channel,光纤通道)链路、RDMA链路等也随之调整。原有程序框架应对的业务压力相对当前环境,大约差了若干个数量级。因为其他链路类型用于框间通信,业务压力小的多,但在极端情况下,比如:双活、非透明桥(Non-Transparent Bridge,NTB)链路故障、FC/RDMA链路临时支持框内通信,需要将FC、RDMA链路缓冲内存池个数扩增到原先的8倍,比如扩充至32个,从而提高消息并发量。
其中,每个节点中包括如图2所示的框架结构,图2为一种多控存储***的架构示意图。可选的,该存储***可以是一种MCS(Multiple Controller Storage,多控制器存储***)。
图2所示的***框架中包括应用层、内核层、框架层和硬件层。进一步地,应用层中包括至少一个应用模块,比如应用模块A、应用模块B等。
内核层又称为kernel层,包括一个或多个IO接口、视窗层(Window Layer,WL)层和交流层(Communication Layer,CL)层等。其中,WL层和CL层可以理解为是一种功能模块或功能单元。
框架层位于内核层和硬件层之间,该框架层中包括PLIF(platform interface)接口,用于连接PLIF驱动框架和内核层的WL层和CL层。
硬件层中包括驱动模块(device driver),比如FC driver(驱动)、PCIe driver、SAS driver和ISCSI driver等。
此外,上述各个层中还可以包括其他更多功能模块,本实施例对此不予限制。
下面对本实施例提供的消息发送方法进行详细说明。
参见图3,为本申请实施例提供的一种消息发送方法,该方法可应用于前述第一节点,该第一节点上包括多个端口资源(tportrsrc),所述方法包括:
步骤101:当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源。
其中,第一节点作为消息发送端,第一节点的视窗层(Window Layer,WL)层在消息omq(outbound message queue,发送消息队列)出队闸口之后,设计临时缓冲区,该临时缓存区用于存储至少一个待发送消息。当有消息要发送时,就会在消息队列中存储、排队准备发送给接收端第二节点。
当第一节点的CPU会实时监听,当CPU资源轮转到匹配执行函数时,启动并执行步骤101。
另外,在步骤101之前还包括:在第一节点上设置有多个端口资源(tportrsrc),用于存放打包完成的消息。
步骤102:在所述多个端口资源中查询是否有空闲的信道。
一种实施方式是,第一节点根据接收第二节点的消息(比如cmnd消息),解析该消息后得到空闲信道(channel),该空闲信道可以是由第二节点分配并指示。所述信道与协议命令一一对应,一个信道表示并发的1个IO输入输出数。
本实施例中,所述第一节点和第二节点中包括多个端口资源,通过这些端口资源可实现资源并发,提高IO吞吐量。
步骤103:如果有空闲信道,则建立所述空闲信道、所述可用端口资源和所述至少一个待发送消息之间的一个或多个匹配关系,以及为每个所述匹配关系中的消息分配一个序列号。
具体地,建立一个消息-端口资源-信道(msg-tportrsrc-channel)之间的匹配关系,如果有多个空闲信道和多个可用端口资源,则建立多个匹配关系。
并且为每个匹配关系分配一个序列号(sequence,seqn),或者为每个匹配关系中的消息打一个标签,send_seqn标签。序列号或标签可分为:发送序列号和接收序列号,两者在传输时需要保持同步对应。本步骤中设置的序列号seqn为发送序列号,在接收端第二节点会设置接收序列号。
步骤104:将至少一个所述消息按照所述序列号的顺序发送给第二节点。
将分配有序列号的消息组装协议命令包,并调用plif接***由驱动层发送。此处由于多链路(端口资源)存在,所以配置打包好的消息会轮询并行地在多链路上均衡传输,提高IOPS(Input/Output Per Second,每秒的输入输出量)和吞吐量,并能保证***稳定可靠。
可选的,在本实施例的一种具体的实施方式中,步骤102,第一节点查询是否有空闲的信道之前,方法还包括:
第一节点接收来自第二节点发送的一个或多个读请求消息,每个读请求消息中携带信道标识;解析一个或多个读请求消息,获得每个消息中的信道标识;根据信道标识查询是否有空闲的信道。如果消息中携带token标识,该token标识中包含可用的空闲channelID,即可确定有空闲的信道;如果接收的读请求消息中没有token标识,则确定没有空闲信道。
在一示例中,假设一个或多个匹配关系包括第一匹配关系,第一匹配关系包括:第一信道、第一端口资源和第一待发送消息之间的关联关系;则上述步骤103:建立第一信道、第一端口资源和第一待发送消息之间的匹配关系,包括:
第一节点根据第一信道的标识和第一预设关系建立第一信道与第一端口资源之间的匹配关系;按照第一端口资源的容量大小遍历消息队列中的至少一个待发送消息,在待发送消息的大小不超过第一端口资源的容量的条件下,确定第一待发送消息;第一节点建立第一待发送消息、第一端口资源和第一信道之间的匹配关系。所述第一预设关系为第一信道和第一端口资源之间的绑定关系。
具体地,在一示例中,第一信道(channel 1)和第一端口资源(tportrsrc 1)预先具有绑定关系,在第二节点侧被指示一个信道与一tportrsrc端口资源之间的关系,第二节点将该绑定关系通过token标识封装成cmnd消息,然后再将该cmnd消息发送至第一节点。
第一节点接收后,解析得到一个channel和一个tportrsrc,对omq中的消息进行遍历,所述tportrsrc端口资源的大小为32K,将不超过该容量的待发送消息添加到上述绑定关系中,生成具有channel-tportrsrc-msg的匹配关系。
在本实施例中,第一待发送消息可以是一个消息,或者是由两个或两个以上消息组合;如果是两个或两个以上消息组合,则上述方法还包括:第一节点在遍历消息队列中的至少一个待发送消息时,如果第二待发送消息和第三待发送消息的容量总和不超过第一端口资源的容量,将第二待发送消息和第三待发送消息进行内存合并;第一节点将合并后的消息块作为第一待发送消息,与第一信道和第一端口资源建立第一匹配关系。
例如,消息1(msg 1)的大小为10K,消息2(msg 2)的大小为20K,则可以将消息1和消息2合并成一个消息块,大小为30K<32K,并将该消息块存储在32K大小的tportrsrc中,等待发送。应理解,在做消息合并时,还可以合并更多消息,只要保证合并后消息不超过端口资源tportrsrc的总容量即可。
进一步地,上述方法还包括:获取复用(reuse)列表,将所述已分配序列号的至少一个消息存储在所述复用列表中;所述复用列表用于备份存储待发送的消息(消息体),用于在后续传输错误时重传。
在一些实施方式中,所述复用列表的至少一个消息中包括第一消息,第一节点将第一消息按照序列号顺序发送给所述第二节点之后,还包括:第一节点接收第二节点根据第一消息反馈的第一应答响应,第一应答响应中包括cmnd字段;第一节点解析第一应答响应中的cmnd字段,得到正常接收的序列号recv_seqn,或者是,是否存在错误的flag字段;第一节点根据解析的内容确定第一消息是否正常发送,即第二节点是否正确接收该第一消息。
如果解析内容指示所述第一消息发送正常,则在所述复用列表中回收第一消息对应的端口资源,以及释放与端口资源匹配的信道资源,以使被释放的端口资源tportrsrc可以再次被使用。
如果解析所述第一应答响应得到发送异常的信息,则将所述复用列表中的所述第一消息重新发送给所述第二节点,从而保证第二节点能够正确接收该消息。
可选的,上述第一设备上的多个端口资源的数量为144个,相比于原端口资源数量64个而言,提高传输量和吞吐量,可最大化满足发送消息出队所需条件。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
如图4所示,为本方法提供的另一种消息发送方法的流程图,其中,该方法应用于前述第一节点node1和第二节点node2,在node1中包括应用模块A、视窗层(Window Layer,WL)和交流层(Communication Layer,CL),在CL层中可以视作集群通信的消息发送端(Target)。对应地,在node2侧包括:CL层、WL层和应用模块B,其中CL层可以视作集群通信的消息接收端(Initiator)。
在消息发送端第一节点侧,工作线程fast_fibre的调度执行时,执行如下方法步骤:
步骤1,应用模块A建立消息资源池,该消息资源池中存放有至少一个待发送消息。
步骤2,CPU资源轮转到匹配执行函数分配消息msg,将分配的一个或多个消息msg入队,生成omq(outbound message queue,发送消息队列),该omq队列位于WL层。
步骤3,发送消息队列omq至CL层。
步骤4,CL层在调度时同步发起msg、channel和tportrsrc之间的匹配关系,使得omq消息队列中的消息都与信道、端口资源绑定。步骤5,CL层待匹配成功建立后,则消息出队,给omq队列中的每个匹配关系或消息分配一个序列号(seqn),即对每个消息打一个序列号标签,如果有多个消息,则序列号顺次增加1,例如omq_seqn序列号递增。
可选的,步骤6,如果对tportrsrc-channel-msgs匹配关系有两个或两个以上消息组合,则组织消息内存拼接,将多个消息拼接成一个消息块,对拼接后的消息块进行打包,最后存入复用(reuse)列表中。
成功组织成tportrsrc-channel-msgs组合的过程,就是从omq队列中一个个消息走出闸口。
如果没有可以组合发送的消息,则不进行消息拼接组合操作。
本方法中,在出队闸口匹配好的tportrsrc-channel-msgs组合作为整体进入工作线程任务队列,分散在各个CPU内核的响应函数被调度时,做内存拼接,消息打包处理,并存放在tportrsrc内存池。相当于把原有的跨线程异步调度环节前提,并分散到各个内核。由此可发挥底层链路多并发高性能的优势,当链路充分冗余时,消耗在物理链路的耗时几乎可以忽略不计。
步骤7,第一节点的CL层发送携带消息的信道给第二节点。
具体地,通过驱动层发送上述复用列表中的信道给第二节点。
在接收端第二节点node2一侧,包括如下步骤:
步骤8,第二节点的CL层接收来自第一节点驱动层发送的信道后,存储在接收消息队列(inbound message queue,Imq)中,该Imq中存放带有消息的channel,包含接收的序列号。并将携带有序列号的信道发送至WL层。
步骤9,WL层接收后,对该信道进行解析,得到序列号seqn值,与本地存储的序列号进行对比,如果二者一致,传输成功,则准备消息出队。
消息出队时增加新的序列号,比如在原序列号seqn值上增加1。
步骤10,WL层将信道发送至应用模块B,应用模块B接收后执行内容解析、校验、业务逻辑处理等操作流程,得到消息内容。
步骤11,WL层向CL层发送应答消息,该应答消息中包括新增加的序列号,并将应答消息存储在imq消息队列中做发送准备。
步骤12,CL层通过驱动层将imq消息队列中的应答消息发送给第一节点的CL层。
步骤13,CL层接收之后,将新的序列号赋值到对应的信道上,并通知第一节点的WL层。
步骤14,WL层接收后解析信道,得到消息内容,并根据消息内容做出应答或重传判断。
步骤15,如果确认消息应答成功,则将应答确认消息反馈给应用模块A。
步骤16,应用模块A接收消息应答成功的反馈后,回收消息资源,将原匹配关系的端口资源、信道资源释放回消息资源池,以便端口资源和信道资源可以重复被利用。
本实施例提供的方法,既遵循SCSI协议命令结构,又利用了DMA快速内存拷贝的技术特性,实现了集群通信应答确认的功能。其中Tportrsrc用于存储发送消息的数据部分data,用于DMA传输。信道Channel本身(调整的IO并发量就是channel个数)是与SCSI协议的cmnd结构体一一对应,通信应答反馈的seqn信息携带在cmnd其中字段。Msgs则是业务模块在传输具体数据data的时候封装的报头,具体包括内容:模块id和地址、偏移等信息,每个数据data对应一个msg。
在工作线程fast_fibre的调度执行,即CPU资源轮转到匹配执行函数。所述匹配函数执行流程中:
消息发送端的第一节点node1,视窗层WL层在消息omq出队闸口之后,设计临时缓冲区,存储匹配成功的msg-tportrsrc-channel组合对。因为所有消息已经被打上send_seqn标签,相当于已经有了号码牌。多线程并发处理临时缓冲区的消息链表对,消息携带的内存作拼接,消息体打包,设置反馈seqn值,组装协议命令包,调用plif接***由驱动层发送。此处由于多链路存在,打包好的消息还会轮询并行地在多链路上均衡传输。
消息接收端的第二节点node2,WL层在imq消息队列出队闸口之后,每个业务模块预留合适大小的缓存池,存储出队imq的消息,待异步调用业务模块提取消息接口时,从缓冲池中拉出该消息,进行内存解析,字段校验,逻辑流转等动作。与omq出队闸口后类似,消息从imq出队,进入缓冲池,此时代表消息已被正常接收,可以进行seqn应答反馈了,通知发送端回收资源。由于模块缓冲池是从属于模块,从中解析消息可分散于不同内核。
两个节点间通信采用全局的唯一的发送消息队列omq、接收消息队列imq、消息序列号seqn(omq的send_seqn、imq的recv_seqn、消息携带的sequence、在信道应答反馈的seqn)。在原有消息收发流程中,两次闸口动作只保留了seqn处理,实现消息不丢失、不重复、不乱序,进而达成存储***高可靠的目标。
另外,全局唯一的omq、imq消息队列可以循环利用端口资源、信道等,实现所有消息与端口资源、信道的任意结对,减省匹配时的额外开销和资源闲置浪费。
需要说明的是,上述信道发送过程中,还涉及信道channel的生命周期。每个信道channel贯穿集群通信的两个节点。由接收端主动分配一个channel,发起一个携带读请求cmnd(与channel对应)。发送端接收到读请求的cmnd时,分配一个对应的channel,进入空闲等待状态(等待匹配时发送消息)。经上述匹配完成后,发送端以channel对应的cmnd方式(携带拼包完成的内存块)发送数据。以发送端而言,发送完成则触发回调函数,释放本端channel(是否再分配由接收端决定)。以接收端而言,收到发送过来的数据,触发对应的回调函数,进入解析、转发环节,待业务模块提取完数据后,释放接收端channel。为保持并发量,接收端可再分配一个channel,发起读请求。
此外,还包括端口资源(Tportrsrc)生命周期。在发送端,自匹配开始从144个缓冲内存池中提取一个tportrsrc,经发送出数据,至发送完成触发回调,则释放该tportrsrc。相对channel全周期、消息发送全周期,tportrsrc的生命周期要短的多。
传输消息的生命周期:业务模块从消息资源池提取一个消息msg,与要发送的数据data进行结合,调用WL层接口对omq入队,匹配过程中消息出队,并暂存于reuse复用列表,经底层传输,到达对端,对方接收、解析、提取,通过发往发送端的SCSI cmnd携带回seqn,发送端收到seqn值进行应答确认。通过应答的消息,reuse列表出队,通知业务模块回收释放。
在另一实施例中,如图5所示,本实施例还提供了一种消息接收方法,所述方法应用于前述第二节点node2,第二节点作为接收端节点,第二节点node2上包括多个端口资源,该方法包括:
步骤201:接收第一节点发送的至少一个消息,每个消息中携带被分配的序列号,且每个所述消息与一空闲信道和以可用端口资源具有匹配关系。该步骤对应于前述实施例的步骤104,参见前述步骤104的描述。
步骤202:解析每个消息得到每个消息中所述被分配的序列号,并将序列号与本地存储的序列号进行比较。
具体地,第二节点调出imq中定额的信道(一般是内核数的2倍),从信道上解出最外层的消息(对应发送端的打包操作,类似剥洋葱一层一层从信道提取消息),提取消息的seqn值,然后将该消息的seqn值与imq队列中被分配的序列号进行比较,判断二者是否一致。
步骤203:如果序列号一致,则进入消息出队、解析和转发流程,以及生成至少一个应答响应;
步骤204:将至少一个应答响应发送给第一节点。
其中,步骤202,将序列号与本地存储的序列号进行比较,包括:第二节点比较每个消息中的序列号与当前接收消息队列中期待的序列号是否一致。
如果比较不一致,则判断当前消息中的序列号比期待的序列号更新或者更旧。
如果比期待的序列号更新,则确定消息提前到达,第二节点将信道重新放入队列中等待下次调度处理。
如果比期待的序列号更旧,则确定当前消息是重复消息,第二节点丢弃当前消息。
进一步地,步骤203,进入消息出队、解析和转发流程,以及生成至少一个应答响应,包括:第二节点解析当前接收消息队列中的关键字段,在当前接收消息队列中增加消息的序列号,并触发业务模块提取函数;第二节点在函数提取完成后,等待当前消息接收队列释放;第二节点待当前消息接收队列释放后,将应答响应的序列号赋值到对应的信道中,并通过信道发送应答响应至第一节点。
具体地,消息出队解析是指解析具体关键字段,imq->recv_seqn自增,触发业务模块提取函数。经过提取函数及后续一系列动作后,该消息才正式被接收成功,待imq_lock(发送消息队列锁)释放后,第二节点的CL层生成应答反馈seqn赋值到channel,返送给第一节点。
本实施例中,将原有的消息打包处理在出队闸口里一部分动作,打包完成后,出队的消息及数据都存放在tportrsrc的内存池,经跨线程异步调度,该内存地址赋值到协议命令的buffer字段。在消息及数据经底层驱动模块成功转发出去后,触发回调函数,释放tportrsrc的内存池,使得该tportrsrc端口资源可重复利用。
本实施中,在第一节点和第二节点两端设备上,增设调整发送消息资源数,最大化利用硬件资源;发送消息出队闸口的动作简化处理,部分动作转移到跨线程异步执行;接收消息由串行改为业务模块提取阶段异步执行;***中对消息发送、接收、反馈流程的其他环节尽可能用多队列多线程实现,降低发送消息队列时延,提高IOPS和吞吐量。
此外,在接收端的第二节点上,通过解析消息后得到的序列号与本地缓存队列期望序列号之间的比较,可以确定传输消息的顺序,从而解决在发送消息时产生的消息丢失、重复以及乱序等问题,本方法保证消息传输的可靠性。
在本实施例中还提供了一种消息发送装置,该装置用于实现上述实施例中的消息发送方法,已经进行过说明的不再赘述。如以下所使用的,术语“模块或单元”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种消息发送装置,如图6所示,该装置包括:第一获取单元610、第一查询单元620、第一建立单元630和第一发送单元640,此外,该装置还包括其他更多或更少单元,本实施例对此不做限制。
其中,第一获取单元610,用于当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源。
第一查询单元620,用于在所述多个端口资源中查询是否有空闲的信道。
第一建立单元630,用于在所述第一查询单元查询到有空闲信道时,建立所述空闲信道、所述可用端口资源和所述至少一个待发送消息之间的一个或多个匹配关系,以及为每个所述匹配关系中的消息分配一个序列号。
第一发送单元640,用于至少一个所述消息按照所述序列号的顺序发送给第二节点。
在一些可选的实施方式中,上述装置还包括第一接收单元和解析单元,图6中未示出,该第一接收单元用于接收来自所述第二节点发送的一个或多个读请求消息,每个所述读请求消息中携带信道标识;所述解析单元用于解析所述一个或多个读请求消息,获得每个所述读请求消息中的信道标识。
第一查询单元620,还用于根据解析单元解析的所述信道标识查询是否有空闲的信道。
其中,所述一个或多个匹配关系包括第一匹配关系,所述第一匹配关系包括第一信道、第一端口资源和第一待发送消息之间的关联关系。
在另一些可选的实施方式中,第一建立单元630,具体用于根据所述第一信道的标识和第一预设关系建立所述第一信道与所述第一端口资源之间的匹配关系;按照所述第一端口资源的容量大小遍历所述消息队列中的至少一个待发送消息,在待发送消息的大小不超过所述第一端口资源的容量的条件下,确定所述第一待发送消息;以及建立所述第一待发送消息、所述第一端口资源和所述第一信道之间的匹配关系。
在又一些可选的实施方式中,所述第一待发送消息可以是一个消息,或者是由两个或两个以上消息组合的消息块。第一建立单元630,具体还用于在遍历所述消息队列中的至少一个待发送消息时,如果第二待发送消息和第三待发送消息的容量总和不超过所述第一端口资源,将所述第二待发送消息和所述第三待发送消息进行内存合并;将合并后的消息作为所述第一待发送消息,与所述第一信道和所述第一端口资源建立第一匹配关系。
在又一些可选的实施方式中,第一获取单元610,还用于获取复用列表,将所述已分配序列号的至少一个消息存储在所述复用列表中。其中,所述复用列表的至少一个消息中包括第一消息。
在又一些可选的实施方式中,所述第一接收单元,还用于接收所述第二节点根据所述第一消息反馈的第一应答响应。
所述解析单元还用于解析所述第一应答响应,并根据解析的内容确定所述第一消息是否正常发送;如果解析内容指示所述第一消息发送正常,则利用回收单元在所述复用列表中回收所述第一消息对应的端口资源,以及释放与所述端口资源匹配的信道资源。
如果解析所述第一应答响应得到发送异常的信息,则利用所述第一发送单元640将所述复用列表中的第一消息重新发送给所述第二节点。
此外,该装置还用于实现前述第一节点的其他功能,本实施例此处不再赘述。
对应地,本实施例提供一种消息接收装置,该装置对应于前述实施例中的第二节点,即接收端节点,如图7所示,该装置包括:
接收单元710,用于接收第一节点发送的至少一个消息,每个所述消息中携带被分配的序列号,且每个所述消息与一空闲信道和以可用端口资源具有匹配关系。
处理单元720,用于解析每个所述消息得到每个消息中被分配的所述序列号,并将所述序列号与本地存储的序列号进行比较;比较序列号一致时,进入消息出队、解析和转发流程,以及生成至少一个应答响应。
第二发送单元730,用于将所述至少一个应答响应发送给所述第一节点。
可选的,在另一些可选的实施方式中,所述处理单元720,具体用于比较每个消息中的序列号与当前接收消息队列中期待的序列号是否一致。
如果比较不一致,则判断当前消息中的序列号比所述期待的序列号更新或者更旧;
如果比所述期待的序列号更新,则处理单元720确定所述消息提前到达,所述第二节点将信道重新放入队列中等待下次调度处理;
如果比所述期待的序列号更旧,则处理单元720确定所述当前消息是重复消息,所述第二节点丢弃所述当前消息。
可选的,在又一些可选的实施方式中,处理单元720,具体还用于解析所述当前接收消息队列中的关键字段,在所述当前接收消息队列中增加消息的序列号,并触发业务模块提取函数;在函数提取完成后,等待所述当前消息接收队列释放;以及待所述当前消息接收队列释放后,将应答响应的序列号赋值到对应的信道中,并通过第二发送单元740发送所述应答响应至所述第一节点。
本实施例中的消息发送装置和消息接收装置是以功能单元的形式来呈现,这里的单元是指ASIC电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
另外,本实施例中还提供一种消息发送***,所述***包括第一节点和第二节点;其中,第一节点中包括图6所示的消息发送装置;所述第二节点中包括前述如图7所示的消息发送装置,用于实现前述图3至图5所述的方法步骤。具体地实施过程参见前述实施例描述,此处不再赘述。
本发明实施例还提供一种电子设备,具有上述图6所示的消息发送装置和图7所示的消息接收装置。
请参阅图8,图8是本发明可选实施例提供的一种电子设备的结构示意图,如图8所示,该电子设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器***)。图8中以一个处理器10为例。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据一种小程序落地页的展现的电子设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该电子设备还包括输入装置和输出装置(图8中未示出)。处理器10、存储器20、输入装置和输出装置可以通过总线或者其他方式连接。所述输入装置可接收输入的数字或字符信息,以及产生与该电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等。所述输出装置可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。上述显示设备包括但不限于液晶显示器,发光二极管,显示器和等离子体显示器。在一些可选的实施方式中,显示设备可以是触摸屏。
该电子设备还包括通信接口30,用于该电子设备与其他设备或通信网络通信。本示例中通信接口可以是信道接口,或传输接口。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的消息接收方法、消息发送方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (10)
1.一种消息发送方法,其特征在于,所述方法应用于第一节点,所述第一节点上包括多个端口资源,所述方法包括:
接收来自第二节点发送的一个或多个读请求消息,并解析所述一个或多个读请求消息,获得每个所述读请求消息中携带的信道标识;
当检测到消息队列中包括至少一个待发送消息时,获取所述多个端口资源中的可用端口资源;
根据所述信道标识在所述多个端口资源中查询是否有空闲的信道;
如果有空闲信道,则建立所述空闲信道、所述可用端口资源和所述至少一个待发送消息之间的一个或多个匹配关系,以及为每个所述匹配关系中的消息分配一个序列号;
将至少一个所述消息按照所述序列号的顺序发送给第二节点;
其中,所述一个或多个匹配关系包括第一匹配关系,所述第一匹配关系包括第一信道、第一端口资源和第一待发送消息之间的关联关系;
建立所述第一信道、所述第一端口资源和所述第一待发送消息之间的匹配关系,包括:
根据所述第一信道的标识和第一预设关系建立所述第一信道与所述第一端口资源之间的匹配关系;
按照所述第一端口资源的容量大小遍历所述消息队列中的至少一个待发送消息,在待发送消息的大小不超过所述第一端口资源的容量的条件下,确定所述第一待发送消息;
建立所述第一待发送消息、所述第一端口资源和所述第一信道之间的匹配关系。
2.根据权利要求1所述的方法,其特征在于,所述第一待发送消息是一个消息,或者是由两个或两个以上消息组合的消息块;所述方法还包括:
在遍历所述消息队列中的至少一个待发送消息时,如果第二待发送消息和第三待发送消息的容量总和不超过所述第一端口资源的总容量,将所述第二待发送消息和所述第三待发送消息进行合并;
将合并后的消息块作为所述第一待发送消息,与所述第一信道和所述第一端口资源建立第一匹配关系。
3.根据权利要求1所述的方法,其特征在于,所述将至少一个所述消息按照所述序列号的顺序发送给第二节点,包括:
获取复用列表,将已分配所述序列号的至少一个消息存储在所述复用列表中。
4.根据权利要求3所述的方法,其特征在于,所述复用列表的至少一个消息中包括第一消息;
将所述第一消息按照序列号顺序发送给所述第二节点之后,还包括:
接收所述第二节点根据所述第一消息反馈的第一应答响应;
解析所述第一应答响应,并根据解析的内容确定所述第一消息是否正常发送;
如果解析内容指示所述第一消息发送正常,则在所述复用列表中回收所述第一消息对应的端口资源,以及释放与所述端口资源匹配的信道资源。
5.根据权利要求4所述的方法,其特征在于,还包括:
如果解析所述第一应答响应得到发送异常的信息,则将所述复用列表中的所述第一消息重新发送给所述第二节点。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述第一节点上的多个端口资源的数量为144个。
7.根据权利要求1-5任一项所述的方法,其特征在于,还包括:
当在所述多个端口资源中查询无空闲信道时,返回并释放所述第一节点的CPU资源。
8.一种消息发送装置,其特征在于,所述装置包括:
第一获取单元,用于当检测到消息队列中包括至少一个待发送消息时,获取多个端口资源中的可用端口资源;
所述第一获取单元,还用于解析第二节点发送的一个或多个读请求消息,获得每个所述读请求消息中携带的信道标识;
第一查询单元,用于根据所述信道标识在所述多个端口资源中查询是否有空闲的信道;
第一建立单元,用于在所述第一查询单元查询到有空闲信道时,建立所述空闲信道、所述可用端口资源和所述至少一个待发送消息之间的一个或多个匹配关系,以及为每个所述匹配关系中的消息分配一个序列号;
第一发送单元,用于将至少一个所述消息按照所述序列号的顺序发送给第二节点;
其中,所述一个或多个匹配关系包括第一匹配关系,所述第一匹配关系包括第一信道、第一端口资源和第一待发送消息之间的关联关系;
所述第一建立单元,具体用于根据所述第一信道的标识和第一预设关系建立所述第一信道与所述第一端口资源之间的匹配关系;按照所述第一端口资源的容量大小遍历所述消息队列中的至少一个待发送消息,在待发送消息的大小不超过所述第一端口资源的容量的条件下,确定所述第一待发送消息;建立所述第一待发送消息、所述第一端口资源和所述第一信道之间的匹配关系。
9.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间通过信道连接;
所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至7中任一项所述的消息发送方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至7中任一项所述的消息发送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311024680.6A CN116760510B (zh) | 2023-08-15 | 2023-08-15 | 一种消息发送方法、消息接收方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311024680.6A CN116760510B (zh) | 2023-08-15 | 2023-08-15 | 一种消息发送方法、消息接收方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116760510A CN116760510A (zh) | 2023-09-15 |
CN116760510B true CN116760510B (zh) | 2023-11-03 |
Family
ID=87948121
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311024680.6A Active CN116760510B (zh) | 2023-08-15 | 2023-08-15 | 一种消息发送方法、消息接收方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116760510B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111404842A (zh) * | 2019-12-11 | 2020-07-10 | 杭州海康威视***技术有限公司 | 数据传输方法、装置及计算机存储介质 |
CN111429091A (zh) * | 2020-03-19 | 2020-07-17 | 北京字节跳动网络技术有限公司 | 一种资源分配方法、装置、电子设备及存储介质 |
CN112586052A (zh) * | 2018-08-09 | 2021-03-30 | 中兴通讯股份有限公司 | 用于空闲模式传输的预配置专用资源 |
CN114363269A (zh) * | 2021-09-12 | 2022-04-15 | 苏州浪潮智能科技有限公司 | 一种消息传输方法、***、设备以及介质 |
CN115964319A (zh) * | 2023-01-30 | 2023-04-14 | 珠海星云智联科技有限公司 | 远程直接内存访问的数据处理方法及相关产品 |
-
2023
- 2023-08-15 CN CN202311024680.6A patent/CN116760510B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112586052A (zh) * | 2018-08-09 | 2021-03-30 | 中兴通讯股份有限公司 | 用于空闲模式传输的预配置专用资源 |
CN111404842A (zh) * | 2019-12-11 | 2020-07-10 | 杭州海康威视***技术有限公司 | 数据传输方法、装置及计算机存储介质 |
CN111429091A (zh) * | 2020-03-19 | 2020-07-17 | 北京字节跳动网络技术有限公司 | 一种资源分配方法、装置、电子设备及存储介质 |
CN114363269A (zh) * | 2021-09-12 | 2022-04-15 | 苏州浪潮智能科技有限公司 | 一种消息传输方法、***、设备以及介质 |
CN115964319A (zh) * | 2023-01-30 | 2023-04-14 | 珠海星云智联科技有限公司 | 远程直接内存访问的数据处理方法及相关产品 |
Also Published As
Publication number | Publication date |
---|---|
CN116760510A (zh) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10868767B2 (en) | Data transmission method and apparatus in optoelectronic hybrid network | |
US7249192B1 (en) | Protocol for insuring exactly once semantics of transactions across an unordered, unreliable network | |
US8238350B2 (en) | Message batching with checkpoints systems and methods | |
US7274706B1 (en) | Methods and systems for processing network data | |
US9049218B2 (en) | Stateless fibre channel sequence acceleration for fibre channel traffic over Ethernet | |
US9019978B2 (en) | Port mirroring at a network interface device | |
EP3454215A1 (en) | Method for calling remote procedure in network device, and network device | |
WO2021042840A1 (zh) | 数据处理方法、装置、服务器和计算机可读存储介质 | |
CN114253740A (zh) | 基于Linux内核的协议栈数据传输方法及装置 | |
CN108494817A (zh) | 数据传输方法、相关装置及*** | |
CN105580334B (zh) | 一种数据传输方法、终端和服务器 | |
CN112039722B (zh) | 一种mqtt协议仿真方法及仿真设备 | |
US8352619B2 (en) | Method and system for data processing | |
WO2017028399A1 (zh) | 通信数据传输方法及*** | |
CN111800354A (zh) | 消息处理方法及装置、消息处理设备及存储介质 | |
CN108566390B (zh) | 一种卫星消息监听与分发服务*** | |
CN114363269B (zh) | 一种消息传输方法、***、设备以及介质 | |
CN116760510B (zh) | 一种消息发送方法、消息接收方法、装置和设备 | |
KR20160022327A (ko) | 소프트웨어 정의 네트워킹 네트워크에서 트랜잭션 관리 방법 | |
JP4415391B2 (ja) | データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置 | |
US20160261719A1 (en) | Information processing system, control program, and control method | |
CN110445666B (zh) | 一种网络质量检测方法、装置及服务器 | |
CN107181657B (zh) | 一种wtb链路层接口适配器及其实现方法 | |
CN115580667A (zh) | 数据传输方法、装置、设备及存储介质 | |
CN110928828B (zh) | 处理器间业务处理*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |