消息发送方法、装置、设备和存储介质与流程

文档序号:25992150发布日期:2021-07-23 21:04阅读:100来源:国知局
消息发送方法、装置、设备和存储介质与流程

本申请涉及计算机技术领域,特别涉及一种消息发送方法、装置、设备和存储介质。



背景技术:

网络节点中往往存在多个模块均需要进行网络通信。比如,区块链系统的区块链节点中的共识模块、区块数据同步模块、文件上传下载模块等模块均需要进行网络通信。这些模块共享系统资源,各个模块在进行网络通信时需要独占系统资源,因而不同模块之间存在资源竞争问题。

相关技术中,为了解决不同模块之间的资源竞争问题,在多个模块调用同一条网络连接上的数据发送接口的情况下,各个模块在发送消息时需要加锁独占这个数据发送接口。同时,各个模块独立抢占锁,哪个模块抢占到锁就具有了发送消息的权利。然而,这种抢占式的发送消息的方式,可能会导致某些模块长时间无法抢占到锁,从而会影响系统整体的可用性。



技术实现要素:

本申请提供了一种消息发送方法、装置、设备和存储介质,可以提高系统整体的可用性。

第一方面,提供了一种消息发送方法,所述方法包括:

根据网络节点中需要进行网络通信的n个模块中所有模块的服务优先级,为所述n个模块中的各个模块分配存储资源,每一个模块的服务优先级与分配给每一个模块的存储资源呈正相关关系,所述n为大于或等于2的整数;

对于所述n个模块中的每一个模块,创建带有分配给所述一个模块的存储资源的消息通道作为所述一个模块的消息通道,以得到n个消息通道;

将所述n个模块中的第i个模块生成的消息存储至所述第i个模块的消息通道,所述i是大于或等于1且小于或等于n的整数;

发送所述n个消息通道中的一个消息通道存储的消息。

在本申请中,根据网络节点中需要进行网络通信的n个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,通过各个模块的消息通道存储所生成的消息并发送。如此,对于不同模块,其在发送消息时所能使用的存储资源是按服务优先级进行规划的,从而可以优先保证服务优先级较高的模块的网络通信,进而可以保证系统整体的可用性。并且,由于不同模块的消息通过不同的消息通道进行隔离,所以可以在一定程度上降低各个模块由于处理能力差异而导致的相互干扰,提高了消息并行处理能力。同时,由于为每个模块均按照其服务优先级提供了一个消息通道来存储消息,所以可以应对突增流量,平滑消息的收发速率。

可选地,所述发送所述n个消息通道中的一个消息通道存储的消息,包括:

根据所述n个模块中所有模块的服务优先级,从所述n个消息通道中选择一个消息通道;

发送所选择的一个消息通道存储的消息。

在本申请中,在发送n个消息通道存储的消息时,可以参考n个模块的服务优先级来进行发送。如此,可以保证服务优先级越高的模块,其消息通道存储的消息越有可能被发送出去,从而可以进一步提高系统整体的可用性。

可选地,所述根据所述n个模块中所有模块的服务优先级,从所述n个消息通道中选择一个消息通道,包括:

根据所述n个模块中所有模块的权重,对指定区间进行划分,得到与所述n个模块一一对应的n个子区间,所述权重用于指示服务优先级;

生成处于所述指定区间内的一个随机数;

选择所述随机数所处的一个子区间对应的模块的消息通道。

可选地,所述存储资源包括存储空间大小和最大存储数量,所述消息通道包括写通道和读通道,所述将所述n个模块中的第i个模块生成的消息存储至所述第i个模块的消息通道,包括:

若所述第i个模块生成的消息的字节数小于所述第i个模块的写通道的空闲存储空间的容量,且所述第i个模块的写通道已存储的消息数量小于所述第i个模块的写通道的最大存储数量,则将所述第i个模块生成的消息存储至所述第i个模块的写通道;

所述发送所述n个消息通道中的一个消息通道存储的消息,包括:

发送所述n个消息通道中的一个消息通道中的写通道存储的消息。

在本申请中,是在第i个模块的写通道当前有足够的剩余存储资源来存储第i个模块生成的消息时,将该消息存储至第i个模块的写通道,从而可以有效避免系统负载过高而导致崩溃。

可选地,所述方法还包括:

接收发往所述第i个模块的消息;

若所述发往所述第i个模块的消息的字节数小于所述第i个模块的读通道的空闲存储空间的容量,且所述第i个模块的读通道已存储的消息数量小于所述第i个模块的读通道的最大存储数量,则将所述发往所述第i个模块的消息存储至所述第i个模块的读通道,所述第i个模块的读通道存储的消息供所述第i个模块读取。

在本申请中,是在第i个模块的读通道当前有足够的剩余存储资源来存储发往第i个模块的消息时,将该消息存储至第i个模块的读通道,从而可以有效避免系统负载过高而导致崩溃。

可选地,所述根据网络节点中需要进行网络通信的n个模块中所有模块的服务优先级,为所述n个模块中的各个模块分配存储资源,包括:

将所述n个模块中所有模块的权重累加,得到总权重,所述权重用于指示服务优先级;

将总存储资源除以所述总权重,得到目标存储资源;

将所述n个模块中的每一个模块的权重乘以所述目标存储资源,得到为每一个模块各自分配的存储资源。

可选地,所述网络节点是区块链系统中的区块链节点。

第二方面,提供了一种消息发送装置,所述装置包括:

分配模块,用于根据网络节点中需要进行网络通信的n个模块中所有模块的服务优先级,为所述n个模块中的各个模块分配存储资源,每一个模块的服务优先级与分配给每一个模块的存储资源呈正相关关系,所述n为大于或等于2的整数;

创建模块,用于对于所述n个模块中的每一个模块,创建带有分配给所述一个模块的存储资源的消息通道作为所述一个模块的消息通道,以得到n个消息通道;

存储模块,用于将所述n个模块中的第i个模块生成的消息存储至所述第i个模块的消息通道,所述i是大于或等于1且小于或等于n的整数;

发送模块,用于发送所述n个消息通道中的一个消息通道存储的消息。

可选地,所述发送模块用于:

根据所述n个模块中所有模块的服务优先级,从所述n个消息通道中选择一个消息通道;

发送所选择的一个消息通道存储的消息。

可选地,所述发送模块用于:

根据所述n个模块中所有模块的权重,对指定区间进行划分,得到与所述n个模块一一对应的n个子区间,所述权重用于指示服务优先级;

生成处于所述指定区间内的一个随机数;

选择所述随机数所处的一个子区间对应的模块的消息通道。

可选地,所述存储资源包括存储空间大小和最大存储数量,所述消息通道包括写通道和读通道,所述存储模块用于:

若所述第i个模块生成的消息的字节数小于所述第i个模块的写通道的空闲存储空间的容量,且所述第i个模块的写通道已存储的消息数量小于所述第i个模块的写通道的最大存储数量,则将所述第i个模块生成的消息存储至所述第i个模块的写通道;

所述发送模块用于:

发送所述n个消息通道中的一个消息通道中的写通道存储的消息。

可选地,所述装置还包括:

接收模块,用于接收发往所述第i个模块的消息;

所述存储模块,还用于若所述发往所述第i个模块的消息的字节数小于所述第i个模块的读通道的空闲存储空间的容量,且所述第i个模块的读通道已存储的消息数量小于所述第i个模块的读通道的最大存储数量,则将所述发往所述第i个模块的消息存储至所述第i个模块的读通道,所述第i个模块的读通道存储的消息供所述第i个模块读取。

可选地,所述分配模块用于:

将所述n个模块中所有模块的权重累加,得到总权重,所述权重用于指示服务优先级;

将总存储资源除以所述总权重,得到目标存储资源;

将所述n个模块中的每一个模块的权重乘以所述目标存储资源,得到为每一个模块各自分配的存储资源。

可选地,所述网络节点是区块链系统中的区块链节点。

第三方面,提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的消息发送方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的消息发送方法。

第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述的消息发送方法的步骤。

可以理解的是,上述第二方面、第三方面、第四方面、第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种消息发送系统的示意图。

图2是本申请实施例提供的一种消息发送方法的流程图。

图3是本申请实施例提供的一种消息收发过程的示意图。

图4是本申请实施例提供的一种消息发送装置的结构示意图。

图5是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

应当理解的是,本申请提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,比如,a/b可以表示a或b;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,比如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,为了便于清楚描述本申请的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。

在对本申请实施例进行详细地解释说明之前,先对本申请实施例的应用场景予以说明。

一个网络节点中往往存在多个模块均需要进行网络通信。这种情况下,这个网络节点中的不同模块之间存在资源竞争问题。比如,对于区块链系统中的任意一个区块链节点来说,这个区块链节点中的共识模块、区块数据同步模块、文件上传下载模块等模块均需要进行网络通信,包括但不限于需要与客户端进行网络通信或与其他区块链节点进行网络通信。这些模块共享系统资源,而为了保证网络通信的完整性,各个模块在进行网络通信时需要独占系统资源,所以不同模块会竞争系统资源。

一个网络节点中的多个模块可以被区分为关键模块和非关键模块。关键模块可以决定系统服务质量,是服务优先级较高的模块。非关键模块对系统服务质量的影响不大,是服务优先级较低的模块。因此,为了保证系统的高可用性,需要优先保证关键模块的网络通信,保证关键模块的消息能得到优先处理,也就需要保证关键模块能优先占有系统资源,避免非关键模块抢占所有系统资源。

为此,本申请实施例提供了一种消息发送方法,可以根据网络节点中多个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,通过各个模块的消息通道存储所生成的消息并发送。如此,对于不同模块,其在发送消息时所能使用的存储资源是按照服务优先级进行规划的,从而可以优先保证服务优先级较高的模块的网络通信,进而可以保证系统整体的可用性。

下面对本申请实施例涉及的系统架构进行说明。

图1是本申请实施例提供的一种消息发送系统的示意图。该消息发送系统可以通过网络节点实现,也即,该消息发送系统可以部署于网络节点中。参见图1,该消息发送系统可以包括:n个模块101、n个消息通道102、消息分发器103,n为大于或等于2的整数。

n个模块101中的每一个模块101具有一个消息通道102。对于n个模块101中的每一个模块101,这个模块101的消息通道102带有根据这个模块101的服务优先级分配给这个模块101的存储资源。这个模块101的消息通道102可以存储这个模块101生成的需要发送给客户端或其他网络节点的消息,也可以存储客户端或其他网络节点发往这个模块101的消息。具体地,这个模块101的消息通道102可以包括写通道和读通道,这个模块101的写通道用于存储这个模块101生成的需要发送给客户端或其他网络节点的消息,这个模块101的读通道用于存储客户端或其他网络节点发往这个模块101的消息。

消息分发器103用于创建并管理n个消息通道102。具体地,消息分发器103可以根据n个模块101的服务优先级为各个模块101分配存储资源,然后对于n个模块101中的每一个模块101,可以为这个模块101创建带有分配给这个模块101的存储资源的消息通道102。之后,消息分发器103可以将这个模块101生成的消息存储至这个模块101的消息通道,具体可以存储至这个模块101的写通道,然后可以将这个模块101的写通道存储的消息发送给客户端或其他网络节点。同时,消息分发器103可以将发往这个模块101的消息存储至这个模块101的消息通道,具体可以存储至这个模块101的读通道,然后可以将这个模块101的读通道存储的消息传输给这个模块101,以供这个模块101读取。

在一些实施例中,消息分发器103可以调用chanmgr方法、writemsg方法、send方法、receive方法等方法来实现其功能。其中,chanmgr方法用于创建n个消息通道102,writemsg方法用于将消息存储至对应的消息通道,send方法用于将消息通道中的消息发送到网络中,receive方法用于接收网络中的消息。

接下来对本申请实施例提供的消息发送方法进行详细地解释说明。

图2是本申请实施例提供的一种消息发送方法的流程图。该方法可以应用于网络节点,具体可以应用于该网络节点中的消息分发器,该消息分发器可以是上文图1实施例中所述的消息分发器103。参见图2,该方法包括以下步骤。

步骤201:网络节点根据n个模块中所有模块的服务优先级,为该n个模块中的各个模块分配存储资源,n为大于或等于2的整数。

该n个模块是该网络节点中需要进行网络通信的至少两个模块,该n个模块在进行网络通信时会竞争资源。比如,该网络节点可以为区块链系统(包括但不限于联盟链系统)中的一个区块链节点,这种情况下,该n个模块可以是这个区块链节点中的共识模块、区块数据同步模块、文件上传下载模块等需要进行网络通信的模块。

对于该n个模块中的每一个模块来说,这个模块具有消息标识,该消息标识用于标识这个模块生成的消息,以及用于标识需要发往这个模块的消息。也即,这个模块生成的消息会携带有该消息标识,发往这个模块的消息同样会携带有该消息标识。比如,该消息标识可以为消息编码或消息类型等。

对于该n个模块中的每一个模块来说,这个模块的服务优先级用于指示这个模块对系统服务质量的影响程度,即代表了这个模块的重要程度,体现的是这个模块在资源竞争时的优先级。也就是说,这个模块的服务优先级越高,这个模块对系统服务质量的影响程度越大,这个模块越重要,这个模块在资源竞争时的优先级越高,越需优先保证这个模块的网络通信。反之,这个模块的服务优先级越低,这个模块对系统服务质量的影响程度越小,这个模块越不重要,这个模块在资源竞争时的优先级越低,越不需优先保证这个模块的网络通信。这个模块的服务优先级可以用权重来指示。这个模块的权重可以预先进行设置,如可以由技术人员手动设置。这个模块的权重与这个模块的服务优先级是正相关关系。也即,这个模块的权重越大,所指示的这个模块的服务优先级越高。反之,这个模块的权重越小,所指示的这个模块的服务优先级越低。

存储资源是各个模块在进行网络通信时所需使用的资源。该存储资源可以包括存储空间大小,进一步还可以包括最大存储数量。该存储空间大小是指存储空间的容量,即该存储空间所能容纳数据的字节数,该存储空间大小可以包括内存大小和缓存大小。该最大存储数量是指存储空间最大所能存储的消息的数量。每一个模块的服务优先级与分配给每一个模块的存储资源呈正相关关系。也就是说,某个模块的服务优先级越高,分配给这个模块的存储资源就越多。某个模块的服务优先级越低,分配给这个模块的存储资源就越少。也即,对于不同模块,其在进行网络通信时所能使用的存储资源是按照服务优先级进行规划的。如此,在系统负载较高、网络带宽有限的情况下,可以根据各个模块的服务优先级保证各个模块的消息能及时收发,从而保证各个模块的正常网络通信,使得系统整体可用。

具体地,步骤201的操作可以为:该网络节点将该n个模块中所有模块的权重累加,得到总权重;将总存储资源除以该总权重,得到目标存储资源;对于该n个模块中的每一个模块,将这个模块的权重乘以目标存储资源,得到分配给这个模块的存储资源。

总存储资源是该网络节点中用于实现该n个模块的网络通信的所有存储资源。比如,总存储资源可以包括该网络节点中用于实现该n个模块的网络通信的所有存储空间的容量(可以称为总存储空间大小),进一步还可以包括这些存储空间最大所能存储的消息的数量(可以称为最大存储总量)。

将总存储资源除以该总权重后得到的目标存储资源,是为单位权重所应分配的存储资源。因此,将一个模块的权重乘以目标存储资源,就可以得到分配给这个模块的存储资源。如此,实现了根据各个模块的权重对各个模块的存储资源的分配,也就实现了根据各个模块的服务优先级对各个模块的存储资源的分配。

比如,总存储资源包括总存储空间大小,该网络节点可以将总存储空间大小除以该总权重,得到目标存储空间大小,再将一个模块的权重乘以目标存储空间大小,得到分配给这个模块的存储空间大小。再比如,总存储资源还包括最大存储总量,该网络节点可以将最大存储总量除以该总权重,得到目标存储数量,再将一个模块的权重乘以目标存储数量,得到分配给这个模块的最大存储数量。

在一些实施例中,对于该n个模块中的每一个模块来说,这个模块在进行网络通信之前,可以先在消息分发器中进行注册,注册的内容包括这个模块的权重和消息标识。消息分发器在初始化时,可以扫描已注册的n个模块中所有模块的权重,然后将总存储资源除以该n个模块的总权重,得到单位权重所需分配的目标存储资源,再根据各个模块的权重和目标存储资源为各个模块分配所需的存储资源。值得注意的是,若某个模块所注册的权重过小,消息分发器可以适当调整这个模块所注册的权重,如可以将这个模块的权重调整为最小默认权重,以保证这个模块可以正常进行网络通信。

步骤202:对于该n个模块中的每一个模块,该网络节点创建带有分配给这个模块的存储资源的消息通道作为这个模块的消息通道,以得到n个消息通道。

一个模块的消息通道用于存储这个模块生成的消息,以及用于存储需要发往这个模块的消息。这个模块的消息通道可以包括写通道和读通道,这个模块的写通道用于存储这个模块生成的消息,这个模块的读通道用于存储发往这个模块的消息。

这个模块的消息通道带有分配给这个模块的存储资源是指,这个模块的消息通道可以使用该存储资源。假设该存储资源包括存储空间大小和最大存储数量,则这个模块的消息通道所能使用的存储空间的容量为该存储空间大小,这个模块的消息通道最大所能存储的消息的数量为该最大存储数量。

对于这个模块的消息通道中的写通道和读通道,两者所能使用的存储资源可以是相等的,也即,这个模块的写通道和读通道所能使用的存储资源均是分配给这个模块的存储资源的二分之一;或者,两者所能使用的存储资源也可以是不等的,比如,这个模块的写通道所能使用的存储资源是分配给这个模块的存储资源的三分之二,这个模块的读通道所能使用的存储资源是分配给这个模块的存储资源的三分之一。本申请实施例对这个模块的写通道和读通道所能使用的存储资源在分配给这个模块的存储资源中的占比不作限定,只要保证这个模块的写通道和读通道均能使用分配给这个模块的存储资源中的一部分,且两者所能使用的存储资源的总和是分配给这个模块的存储资源即可。

该n个模块一一使用该n个消息通道来进行网络通信。一方面,不同模块的消息通过不同的消息通道进行隔离,一个模块在收发消息时出现故障不会对其他模块产生影响,从而在一定程度上降低了各个模块由于处理能力差异而导致的相互干扰,提高了消息并行处理能力。另一方面,由于为每个模块均按照其服务优先级提供了一个消息通道来存储消息,所以可以应对突增流量,平滑消息的收发速率。

步骤203:该网络节点将该n个模块中的第i个模块生成的消息存储至第i个模块的消息通道,i是大于或等于1且小于或等于n的整数。

该网络节点可以将第i个模块生成的消息存储至第i个模块的写通道。可选地,该网络节点在接收到某个模块生成的消息后,可以根据该消息携带的消息标识确定该消息是哪个模块生成的,然后将该消息存储至生成该消息的这个模块的消息通道。

在一些实施例中,该网络节点将第i个模块生成的消息存储至第i个模块的写通道之前还需要进行一些检查操作。具体地,该网络节点可以判断第i个模块生成的消息的字节数是否小于第i个模块的写通道的空闲存储空间的容量,且判断第i个模块的写通道已存储的消息数量是否小于第i个模块的写通道的最大存储数量;若第i个模块生成的消息的字节数小于第i个模块的写通道的空闲存储空间的容量,且第i个模块的写通道已存储的消息数量小于第i个模块的写通道的最大存储数量,则将第i个模块生成的消息存储至第i个模块的写通道;若第i个模块生成的消息的字节数大于或等于第i个模块的写通道的空闲存储空间的容量,和/或,第i个模块的写通道已存储的消息数量等于第i个模块的写通道的最大存储数量,则丢弃第i个模块生成的消息,并向第i个模块返回异常提醒信息。

在第i个模块生成的消息的字节数小于第i个模块的写通道的空闲存储空间的容量,且第i个模块的写通道已存储的消息数量小于第i个模块的写通道的最大存储数量的情况下,第i个模块的写通道当前有足够的剩余存储资源来存储该消息,因而可以将该消息存储至第i个模块的写通道。

而在第i个模块生成的消息的字节数大于或等于第i个模块的写通道的空闲存储空间的容量,和/或,第i个模块的写通道已存储的消息数量等于第i个模块的写通道的最大存储数量的情况下,第i个模块的写通道当前没有足够的剩余存储资源来存储该消息,即第i个模块的写通道当前的剩余存储资源不足,已经出现了消息积压,不能再继续存储消息,如果在这种情况下继续存储消息可能会导致系统异常,所以此时需要丢弃该消息,并向第i个模块告知此异常情况。

值得注意的是,对于某个模块来说,如果这个模块生成消息的速率大于该网络节点将这个模块生成的消息发送到网络中的速率,那么这个模块的写通道中就会出现消息积压。这种情况下,为了避免系统负载过高而崩溃,该网络节点需要丢弃这个模块后续生成的消息并向这个模块返回异常提醒信息。

步骤204:该网络节点发送该n个消息通道中的一个消息通道存储的消息。

一般情况下,一条网络连接同时只能发送一条消息,因而该网络节点需要从该n个消息通道中选择一个消息通道中存储的消息进行发送。该网络节点可以发送该n个消息通道中的一个消息通道中的写通道存储的消息,且可以根据需求将该消息发送给客户端或其他网络节点。

具体地,该网络节点可以根据该n个模块中所有模块的服务优先级,从该n个消息通道中选择一个消息通道,然后发送所选择的一个消息通道存储的消息,也即发送所选择的一个消息通道中的写通道存储的消息。

本申请实施例中,在发送n个消息通道存储的消息时,是参考n个模块的服务优先级来进行发送。如此,可以保证服务优先级越高的模块,其消息通道存储的消息越有可能被发送出去,从而可以进一步提高系统整体的可用性。

其中,该网络节点根据该n个模块中所有模块的服务优先级,从该n个消息通道中选择一个消息通道的操作可以为:该网络节点根据该n个模块中所有模块的权重,对指定区间进行划分,得到与该n个模块一一对应的n个子区间;生成处于指定区间内的一个随机数;选择这个随机数所处的一个子区间对应的模块的消息通道。

对于该n个模块中的每一个模块,这个模块对应的子区间在指定区间中的占比就是这个模块的权重在该n个模块的总权重中的占比。这种情况下,某个模块的权重越高,这个模块对应的子区间在指定区间中的占比就越高,则处于指定区间内的这个随机数落在这个模块对应的子区间内的概率就越大,从而选择这个模块的消息通道的概率就越大。这样,权重越高的模块,即服务优先级越高的模块,其消息通道被选择的概率越大,其消息通道存储的消息被发送出去的概率也就越大。

当然,该网络节点也可以根据该n个模块中所有模块的服务优先级,通过其他方式从该n个消息通道中选择一个消息通道,只要保证对消息通道的选择是参考该n个模块的服务优先级进行的即可。

进一步地,该网络节点不仅可以将第i个模块生成的消息存储至第i个模块的消息通道并发送出去,该网络节点还可以接收发往第i个模块的消息,并将发往第i个模块的消息存储至第i个模块的消息通道,具体可以存储至第i个模块的读通道,第i个模块的读通道存储的消息可供第i个模块读取。

可选地,该网络节点在接收到客户端或其他网络节点发送的消息后,可以根据该消息携带的消息标识确定该消息是发往哪个模块的,然后就可以将该消息存储至该消息需要发往的这个模块的消息通道。

该n个模块中的每个模块可以从各自的读通道中消费消息。比如,第i个模块需要消费消息时,可以采用轮询的方式查看第i个模块的读通道中是否存储有消息;如果第i个模块的读通道中有消息,则读取该消息;如果第i个模块的读通道中没有消息,则继续轮询等待至第i个模块的读通道从网络中接收到消息后再读取。

在一些实施例中,该网络节点将发往第i个模块的消息存储至第i个模块的读通道之前还需要进行一些检查操作。具体地,该网络节点可以判断发往第i个模块的消息的字节数是否小于第i个模块的读通道的空闲存储空间的容量,且判断第i个模块的读通道已存储的消息数量是否小于第i个模块的读通道的最大存储数量;若发往第i个模块的消息的字节数小于第i个模块的读通道的空闲存储空间的容量,且第i个模块的读通道已存储的消息数量小于第i个模块的读通道的最大存储数量,则将发往第i个模块的消息存储至第i个模块的读通道;若发往第i个模块的消息的字节数大于或等于第i个模块的读通道的空闲存储空间的容量,和/或,第i个模块的读通道已存储的消息数量等于第i个模块的读通道的最大存储数量,则丢弃发往第i个模块的消息。

在发往第i个模块的消息的字节数小于第i个模块的读通道的空闲存储空间的容量,且第i个模块的读通道已存储的消息数量小于第i个模块的读通道的最大存储数量的情况下,第i个模块的读通道当前有足够的剩余存储资源来存储该消息,因而可以将该消息存储至第i个模块的读通道。

而在发往第i个模块的消息的字节数大于或等于第i个模块的读通道的空闲存储空间的容量,和/或,第i个模块的读通道已存储的消息数量等于第i个模块的读通道的最大存储数量的情况下,第i个模块的读通道当前没有足够的剩余存储资源来存储该消息,即第i个模块的读通道当前的剩余存储资源不足,已经出现了消息积压,不能再继续存储消息,如果在这种情况下继续存储消息可能会导致系统异常,所以此时需要丢弃该消息。

值得注意的是,对于某个模块来说,如果该网络节点接收发往这个模块的消息的速率大于这个模块消费消息的速率,那么这个模块的读通道中就会出现消息积压,这种情况下,为了避免系统负载过高而崩溃,该网络节点需要丢弃后续从网络中接收到的消息。

为了便于理解,下面结合图3来对上述消息发送与接收过程进行举例说明。

参见图3,网络节点1中包括a1模块、b1模块、c1模块这三个需要进行网络通信的模块,网络节点1先根据这三个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,该消息通道中包括写通道。网络节点2中包括a2模块、b2模块、c2模块这三个需要进行网络通信的模块,网络节点2先根据这三个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,该消息通道中包括读通道。

对于网络节点1来说,a1模块生成的消息会存储至a1模块的写通道中,b1模块生成的消息会存储至b1模块的写通道中,c1模块生成的消息会存储至c1模块的写通道中。在向a1模块、b1模块、c1模块的写通道存储消息的过程中,若某个模块的写通道出现消息积压,则丢弃这个模块所生成的消息,并向这个模块返回异常提醒信息。之后,根据a1模块、b1模块和c1模块的服务优先级,从这三个模块的写通道中选择一个写通道,将所选择的一个写通道中的消息通过发送接口发送至网络。

对于网络节点2来说,网络节点2通过接收接口从网络中接收消息,将接收到的消息中需要发往a2模块的消息存储至a2模块的读通道中,将接收到的消息中需要发往b2模块的消息存储至b2模块的读通道中,将接收到的消息中需要发往c2模块的消息存储至c2模块的读通道中。在向a2模块、b2模块、c2模块的读通道存储消息的过程中,若某个模块的读通道出现消息积压,则丢弃接收到的消息中需要发往这个模块的消息。之后,a2模块从a2模块的读通道中读取消息,b2模块从b2模块的读通道中读取消息,c2模块从c2模块的读通道中读取消息。

在本申请实施例中,根据网络节点中需要进行网络通信的n个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,通过各个模块的消息通道存储所生成的消息并发送。如此,对于不同模块,其在发送消息时所能使用的存储资源是按服务优先级进行规划的,从而可以优先保证服务优先级较高的模块的网络通信,进而可以保证系统整体的可用性。并且,由于不同模块的消息通过不同的消息通道进行隔离,所以可以在一定程度上降低各个模块由于处理能力差异而导致的相互干扰,提高了消息并行处理能力。同时,由于为每个模块均按照其服务优先级提供了一个消息通道来存储消息,所以可以应对突增流量,平滑消息的收发速率。

另外,本申请实施例中,在发送n个消息通道存储的消息时,可以参考n个模块的服务优先级来进行发送。如此,可以保证服务优先级越高的模块,其消息通道存储的消息越有可能被发送出去,从而可以进一步提高系统整体的可用性。

图4是本申请实施例提供的一种消息发送装置的结构示意图,该装置可以由软件、硬件或者两者的结合实现成为网络节点的部分或者全部。参见图4,该装置包括:分配模块401、创建模块402、存储模块403和发送模块404。

分配模块401,用于根据网络节点中需要进行网络通信的n个模块中所有模块的服务优先级,每一个模块的服务优先级与分配给每一个模块的存储资源呈正相关关系,为n个模块中的各个模块分配存储资源,n为大于或等于2的整数;

创建模块402,用于对于n个模块中的每一个模块,创建带有分配给这一个模块的存储资源的消息通道作为这一个模块的消息通道,以得到n个消息通道;

存储模块403,用于将n个模块中的第i个模块生成的消息存储至第i个模块的消息通道,i是大于或等于1且小于或等于n的整数;

发送模块404,用于发送n个消息通道中的一个消息通道存储的消息。

可选地,发送模块404用于:

根据n个模块中所有模块的服务优先级,从n个消息通道中选择一个消息通道;

发送所选择的一个消息通道存储的消息。

可选地,发送模块404用于:

根据n个模块中所有模块的权重,对指定区间进行划分,得到与n个模块一一对应的n个子区间,权重用于指示服务优先级;

生成处于指定区间内的一个随机数;

选择该随机数所处的一个子区间对应的模块的消息通道。

可选地,存储资源包括存储空间大小和最大存储数量,消息通道包括写通道和读通道,存储模块403用于:

若第i个模块生成的消息的字节数小于第i个模块的写通道的空闲存储空间的容量,且第i个模块的写通道已存储的消息数量小于第i个模块的写通道的最大存储数量,则将第i个模块生成的消息存储至第i个模块的写通道;

发送模块404用于:

发送n个消息通道中的一个消息通道中的写通道存储的消息。

可选地,该装置还包括:

接收模块,用于接收发往第i个模块的消息;

存储模块403,还用于若发往第i个模块的消息的字节数小于第i个模块的读通道的空闲存储空间的容量,且第i个模块的读通道已存储的消息数量小于第i个模块的读通道的最大存储数量,则将发往第i个模块的消息存储至第i个模块的读通道,第i个模块的读通道存储的消息供第i个模块读取。

可选地,分配模块401用于:

将n个模块中所有模块的权重累加,得到总权重,权重用于指示服务优先级;

将总存储资源除以总权重,得到目标存储资源;

将所述n个模块中的每一个模块的权重乘以所述目标存储资源,得到为每一个模块各自分配的存储资源。

可选地,网络节点是区块链系统中的区块链节点。

在本申请实施例中,根据网络节点中需要进行网络通信的n个模块的服务优先级为各个模块分配存储资源,再为各个模块创建带有所分配的存储资源的消息通道,通过各个模块的消息通道存储所生成的消息并发送。如此,对于不同模块,其在发送消息时所能使用的存储资源是按服务优先级进行规划的,从而可以优先保证服务优先级较高的模块的网络通信,进而可以保证系统整体的可用性。并且,由于不同模块的消息通过不同的消息通道进行隔离,所以可以在一定程度上降低各个模块由于处理能力差异而导致的相互干扰,提高了消息并行处理能力。同时,由于为每个模块均按照其服务优先级提供了一个消息通道来存储消息,所以可以应对突增流量,平滑消息的收发速率。

另外,本申请实施例中,在发送n个消息通道存储的消息时,可以参考n个模块的服务优先级来进行发送。如此,可以保证服务优先级越高的模块,其消息通道存储的消息越有可能被发送出去,从而可以进一步提高系统整体的可用性。

需要说明的是:上述实施例提供的消息发送装置在消息发送时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

上述实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请实施例的保护范围。

上述实施例提供的消息发送装置与消息发送方法实施例属于同一构思,上述实施例中单元、模块的具体工作过程及带来的技术效果,可参见方法实施例部分,此处不再赘述。

图5为本申请实施例提供的一种计算机设备的结构示意图,该计算机设备可以是上文实施例所述的网络节点。如图5所示,计算机设备5包括:处理器50、存储器51以及存储在存储器51中并可在处理器50上运行的计算机程序52,处理器50执行计算机程序52时实现上述实施例中的消息发送方法中的步骤。

计算机设备5可以是一个通用计算机设备或一个专用计算机设备。在具体实现中,计算机设备5可以是台式机、便携式电脑、网络服务器、掌上电脑、移动手机、平板电脑、无线终端设备、通信设备或嵌入式设备,本申请实施例不限定计算机设备5的类型。本领域技术人员可以理解,图5仅仅是计算机设备5的举例,并不构成对计算机设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,比如还可以包括输入输出设备、网络接入设备等。

处理器50可以是中央处理单元(centralprocessingunit,cpu),处理器50还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器。

存储器51在一些实施例中可以是计算机设备5的内部存储单元,比如计算机设备5的硬盘或内存。存储器51在另一些实施例中也可以是计算机设备5的外部存储设备,比如计算机设备5上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器51还可以既包括计算机设备5的内部存储单元也包括外部存储设备。存储器51用于存储操作系统、应用程序、引导装载程序(bootloader)、数据以及其他程序等,比如计算机程序的程序代码等。存储器51还可以用于暂时地存储已经输出或者将要输出的数据。

本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个处理器、存储器以及存储在该存储器中并可在该至少一个处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述任意各个方法实施例中的步骤。

本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时可实现上述各个方法实施例中的步骤。

本申请实施例提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例中的步骤。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述方法实施例中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,该计算机程序包括计算机程序代码,该计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。该计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、cd-rom(compactdiscread-onlymemory,只读光盘)、磁带、软盘和光数据存储设备等。本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。

应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。该计算机指令可以存储在上述计算机可读存储介质中。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1