CN116137611B - 流量分发方法、装置、设备和介质 - Google Patents
流量分发方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN116137611B CN116137611B CN202310425324.9A CN202310425324A CN116137611B CN 116137611 B CN116137611 B CN 116137611B CN 202310425324 A CN202310425324 A CN 202310425324A CN 116137611 B CN116137611 B CN 116137611B
- Authority
- CN
- China
- Prior art keywords
- node
- information
- traffic
- flow
- cluster
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/29—Flow control; Congestion control using a combination of thresholds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种流量分发方法、装置、设备和介质,属于信息安全技术领域,可用于金融科技领域,可以解决集群中流量分发时需要复杂部署的问题。该方法可以应用于集群中的第一节点,包括:获取集群中至少一个其他节点中每个其他节点的应用信息和实时的流量处理信息;获取第一节点的应用信息;实时采集第一节点的流量处理信息;当第一节点的流量处理信息达到阈值条件时,从至少一个其他节点中查找与第一节点具有相同应用信息且流量处理信息未达到阈值条件的第二节点;以及当查找到第二节点时,将到达第一节点的流量转发到第二节点。本发明可以通过集群中节点之间的信息的相互发现,在不借助外部额外的硬件部署的情况下,有效进行应用分流。
Description
技术领域
本发明涉及信息安全技术领域,可用于金融科技领域,更具体地涉及一种流量分发方法、装置、设备、介质和程序产品。
背景技术
随着互联网的飞速发展,互联网应用在生活中无处不在。随着用户数量日益庞大,在抢卷、抢购等高并发业务场景下,应用的访问量激增。大量请求流量导致应用严重负载,严重情况下应用服务器宕机无法对外提供服务,这对于用户体验以及公司声誉都带来了不少的影响。
在此背景下,分流技术应运而生。顾名思义分流技术是将流量分配给集群中其他的服务器。然而目前的软应用分流技术(如Nginx)需要提供一系列繁复的操作来部署Nginx软件;而硬分流技术(如F5)需要购买与部署硬件设备,也需要花费不少的代价。
发明内容
鉴于上述问题,本发明提供了一种借助于节点间的信息相互发现来实现有效分流的流量分流方法、装置、设备、介质和程序产品。
本发明实施例的第一方面,提供了一种流量分发方法。所述流量分发方法应用于集群中的第一节点。所述方法包括:获取所述集群中至少一个其他节点中每个其他节点的应用信息;获取所述至少一个其他节点中每个其他节点实时的流量处理信息;获取所述第一节点的应用信息;实时采集所述第一节点的流量处理信息;当所述第一节点的流量处理信息达到阈值条件时,从所述至少一个其他节点中查找与所述第一节点具有相同应用信息且流量处理信息未达到所述阈值条件的第二节点;以及当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点。
根据本发明的实施例,所述获取所述集群中至少一个其他节点中每个其他节点的应用信息包括:接收所述至少一个其他节点中每个其他节点发送的注册信息,其中,所述注册信息包括应用信息;以及在本地存储的每个其他节点的所述注册信息。
根据本发明的实施例,所述注册信息还包括网络连接信息;所述当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点包括:根据所述第二节点的所述注册信息中的网络连接信息,将到达所述第一节点的流量转发到所述第二节点。
根据本发明的实施例,所述获取所述至少一个其他节点中每个其他节点实时的流量处理信息包括:接收所述至少一个其他节点中每个其他节点定时发送的流量处理信息;以及根据接收到的每个其他节点最新发送的流量处理信息,更新并缓存每个其他节点的流量处理信息。
根据本发明的实施例,当查找到多个所述第二节点时,所述将到达所述第一节点的流量转发到所述第二节点包括:基于多个所述第二节点的流量处理信息,对多个所述第二节点的流量处理性能进行排序;按照排序结果,从多个所述第二节点中确定出流量处理性能最佳的第三节点;以及将到达所述第一节点的流量转发到所述第三节点。
根据本发明的实施例,所述实时采集所述第一节点的流量处理信息包括:利用对所述第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集所述第一节点的流量处理信息。
根据本发明的实施例,所述流量处理函数包括以下至少之一:http流量处理函数、Socket监听函数、或用户自定义的信息接收函数。
根据本发明的实施例,所述流量计数代码设置在所述流量处理函数的入口处和出口处;则利用所述流量计数代码实时采集所述第一节点的流量处理信息包括:当在所述流量处理函数的入口处接收到一个消息时,所述第一节点待处理的流量数加一;当所述流量处理函数的出口处外发一个消息时,所述第一节点待处理的流量数减一。
根据本发明的实施例,所述利用所述流量计数代码实时采集所述第一节点的流量处理信息还包括:基于预定时间间隔内所述流量处理函数的出口处外发的消息数量和/或所述流量处理函数的入口处接收到的消息数量,计算所述第一节点的流量平均处理时长。
根据本发明的实施例,所述获取所述第一节点的应用信息包括:利用插桩到所述第一节点的应用代码中的注册发现代码,扫描所述第一节点自身的信息,以得到所述第一节点的注册信息,其中,所述注册信息包括所述第一节点的应用信息。
根据本发明的实施例,所述第一节点为所述集群中的任意一个节点,所述方法还包括:在获取到所述第一节点的应用信息之后,将所述第一节点的应用信息发送给所述至少一个其他节点中的每个其他节点;以及定时将最新采集到的所述第一节点的流量处理信息,发送给所述至少一个其他节点中的每个其他节点。
根据本发明的实施例,所述第一节点为所述集群中的主节点。相应地,所述方法还包括:接收所述至少一个其他节点中第四节点的流量转发目的端询问请求;以及当所述第一节点与所述第四节点的应用信息相同,且所述第一节点的流量处理信息未达到所述阈值条件时,通知所述第四节点将流量转发到自己。
根据本发明的实施例,所述方法还包括:当所述第一节点与所述第四节点的应用信息不同,或者所述第一节点与所述第四节点的应用信息虽然相同,但所述第一节点的流量处理信息达到所述阈值条件时,从所述至少一个其他节点中寻找与所述第四节点的应用信息相同,且流量处理信息未达到所述阈值条件的第五节点作为目的端;以及通知所述第四节点将流量转发到所述第五节点。
本发明实施例的第二方面,提供了一种流量分发装置,设置于集群中的第一节点。其中,所述装置包括注册模块、采集模块和转发模块。所述注册模块包括第一获取单元和第二获取单元。第一获取单元用于获取所述集群中至少一个其他节点中每个其他节点的应用信息,以及获取所述至少一个其他节点中每个其他节点实时的流量处理信息。第二获取单元用于获取所述第一节点的应用信息。采集模块用于实时采集所述第一节点的流量处理信息。转发模块用于:当所述第一节点的流量处理信息达到阈值条件时,从所述至少一个其他节点中查找与所述第一节点具有相同应用信息且流量处理信息未达到所述阈值条件的第二节点;以及当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点。
本发明实施例的第三方面,提供了一种电子设备。所述电子设备包括一个或多个处理器和存储器。所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述方法。
本发明实施例的第四方面,还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述方法。
本发明实施例的第五方面,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述方法。
上述一个或多个实施例具有如下优点或有益效果:有效地实现集群中多个节点之间的相互发现,包括第一节点能够及时发现其他节点的应用信息以及实时的流量处理信息,便于在第一节点的流量超负荷的情况下,及时将流量转发到运行相同应用且具有流量处理能力的其他节点,从而在不借助外部额外的硬件部署的情况下,有效进行了应用分流,提高了集群的流量处理能力。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本发明实施例的流量分发方法和装置的系统架构;
图2示意性示出了根据本发明实施例的流量分发方法的流程图;
图3示意性示出了当第一节点为集群中的任意节点时在一实施例中获取其他节点的应用信息的交互流程图;
图4示意性示出了当第一节点为集群中的任意节点时在另一实施例中获取其他节点的实时的流量处理信息的交互流程图;
图5示意性示出了当第一节点为集群中的主节点时在一实施例中获取其他节点的应用信息的交互流程图;
图6示意性示出了当第一节点为集群中的主节点时在另一实施例中获取其他节点的实时的流量处理信息的交互流程图;
图7示意性示出了当第一节点为集群中的主节点时在一实施例中的流量分发方法的流程图;
图8示意性示出了在另一角度下根据本发明实施例的流量分发方法的流程图;
图9示意性示出了根据本发明实施例的流量分发装置的结构框图;
图10示意性示出了图9所示的装置中插桩模块的结构框图;以及
图11示意性示出了适于实现本发明实施例的流量分发方法的电子设备的结构框图。
具体实施方式
以下,将参照附图来描述本发明的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本发明实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本发明。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。本文中术语“第一”、“第二”等命名都仅用于区分,而不具有任何限制含义,以及附图中的任何元素数量均用于示例而非限制。
本发明实施例提供了一种可以使集群中的节点之间相互发现的流量分发方法、装置、设备、介质和程序产品。具体地,根据本发明的实施例,集群中的第一节点(可以是集群中的任意一个节点,或者也可以是集群中的主节点)不仅可以获取到自己节点上运行的应用信息以及自己的实时的流量处理信息,还可以获取到其他节点上运行的应用信息以及当前的流量处理信息。从而当第一节点的流量处理信息达到阈值条件需要分流时,第一节点可以快速地从集群中查找与自己具有相同应用信息且当前尚具备空余的流量处理能力的其他节点,进行流量的转发。以此方式,集群中的第一节点可以对超载的流量进行灵活地处理,提高了集群整体的流量处理性能。
在一个实施例中,集群中的节点对自己的信息(诸如,应用信息、网络连接信息或流量处理信息)的识别和提取的操作,和/或在集群中广播或发送节点自己的信息以实现节点间相互发现的操作,可以是借助于字节码增强技术,预先在节点的应用代码中插桩相应代码来实现的。这样无需额外部署硬件设备,仅通过轻部署的方式就可以有效实现集群中节点的相互发现和应用流量的有效分流。而且,通过插桩相应代码来实现节点中相应信息的自动提取,还可以避免通过人工手动配置来提取信息可能带来的人工错误。
需要说明的是,本发明实施例确定的流量分发方法、装置、设备、介质和程序产品可用于金融领域,也可用于除金融领域之外的任意领域,本发明对应用领域不做限定。
图1示意性示出了根据本发明实施例的流量分发方法和装置的系统架构。
如图1所示,该系统架构100包括三个节点,分别是节点101-1、节点101-2和节点101-3,其中,每个节点可以包括一台应用服务器。
节点101-1、节点101-2和节点101-3中的每个节点中分别安装有一个分流装置,即图中的分流装置102-1、分流装置102-2和分流装置102-3。每个节点中的分流装置可以对部署该分流装置的节点中的应用代码进行插桩。这样通过插桩后的代码的运行,使得节点101-1、节点101-2和节点101-3之间可以相互发现,进而可以进行有效地流量分发。分流装置102-1、分流装置102-2和分流装置102-3中的至少一个可以具体实现为下文介绍的流量分发装置900、电子设备1100、计算机可读存储介质或程序产品。
在一个实施例中,本发明实施例中的第一节点可以是节点101-1、节点101-2和节点101-3中的主节点。即,节点101-1、节点101-2和节点101-3中的主节点可以作为第一节点,执行本发明实施例的流量分发方法。
在另一个实施例中,本发明实施例中的第一节点可以是节点101-1、节点101-2和节点101-3任意一个。即,节点101-1、节点101-2和节点101-3可以不予区分主节点与否,均可以作为第一节点,执行本发明实施例的流量分发方法。
需要注意的是,图1所示仅为可以应用本发明实施例的系统架构的示例,以帮助本领域技术人员理解本发明的技术内容,但并不意味着本发明不可以用于其他设备、系统、环境或场景。
以下将基于图1描述的系统架构,通过图2~图8对本发明各个实施例的流量分发方法进行详细描述。本发明实施例的流量分发方法可以由集群中的第一节点执行。下文图2~图7将从集群中的第一节点的视角,对本发明实施例的流量分发方法的具体实现进行详细介绍。图8将从另一角度对本发明一实施例的流量分发方法进行介绍。
应注意,以下方法中各个操作的序号仅作为该操作的表示以便描述,而不应被看作表示该各个操作的执行顺序。除非明确指出,否则该方法不需要完全按照所示顺序来执行。
图2示意性示出了根据本发明实施例的流量分发方法的流程图。
如图2所示,根据该实施例的流量分发方法可以包括操作S201~操作S209。
在操作S201,获取集群中至少一个其他节点中每个其他节点的应用信息。
在操作S202,获取至少一个其他节点中每个其他节点实时的流量处理信息。
流量处理信息包括但不限于:当前待处理的流量数量、和/或当前流量平均处理时长。
在一个实施例中,可以在集群中设置注册中心,每个节点都把自己的信息填写到注册中心。然后每个节点可以从注册中心来读取其他节点的信息。
在另一个实施例中,也可以是每个节点向集群中广播自己的应用信息和流量处理信息等信息。从而每个节点都可以通过接收广播的方式获取到集群中其他节点的信息。
再在一个实施例中,还可以是集群中设置主节点,除了主节点以外的其他节点均向主节点上报自己的应用信息和流量处理信息等。
每个节点的应用信息的提取和相互发现的过程可以是,首先在每个节点的服务器启动时,利用插桩到每个节点的应用代码中的注册发现代码,对节点的应用服务器进行手动或自动扫描得到的,然后再由注册发现代码将扫描出的应用信息在集群中广播或上报。在一些实施例中,利用注册发现代码扫描应用信息,也可以是定时触发或按事件(诸如重启、故障恢复等事件)触发。
在一些实施例中,利用注册发现代码扫描应用信息的同时,还可以扫描得到每个节点的IP地址、端口开放情况等网络连接信息。然后可以将扫描得到的应用信息和网络连接信息等组合起来形成唯一标识该节点的注册信息。然后将该注册信息在集群中广播或上报。
当每个节点将自己的注册信息在集群中进行广播或上报时,在操作S201中第一节点就可以接收到除了自己以外的至少一个其他节点中每个其他节点发送的注册信息,然后第一节点可以在本地存储的每个其他节点的注册信息,以备后续需要进行流量转发时进行应用信息的比对。
与每个节点的应用信息或注册信息不同,节点的流量处理信息会随时发生变化。正因此,每个节点的应用信息或注册信息可以在每个节点启动时获取一次,或者也可以是低频率或仅出现特殊情况时再进行更新。而每个节点的流量处理信息,则需要每个节点实时地采集,然后以较高的频率在集群中广播或上报,才能便于集群中的节点之间及时发现彼此最新的流量处理信息。
相应地,每个节点的流量处理信息的采集和相互发现的过程可以是,首先由插桩到每个节点的应用代码中的流量计数代码实时监测和统计该节点的流量处理信息,然后以较高的频率定时在集群中广播或上报该节点的流量处理信息。
当每个节点将自己的流量处理信息在集群中进行广播或者上报时,在操作S202中第一节点就可以接收到至少一个其他节点中每个其他节点定时发送的流量处理信息,然后第一节点可以根据接收到的每个其他节点最新发送的流量处理信息,更新并缓存每个其他节点的流量处理信息,以备后续需要进行流量转发时判断其他节点的流量处理能力。
与上述操作S201和操作S202中获取集群中其他节点的信息并行地,可以通过操作S203和操作S204获取第一节点自身的信息。
具体地,在操作S203,获取第一节点的应用信息。具体地,可以是利用插桩到第一节点的应用代码中的注册发现代码,在第一节点的启动时、或者由事件触发、或者用户手动触发扫描第一节点自身的信息,以得到第一节点的应用信息。当然还可以得到网络连接信息等其他信息,形成第一节点的注册信息。
在操作S204,实时采集第一节点的流量处理信息。
具体地,可以利用对第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集第一节点的流量处理信息。其中,流量处理函数可以包括但不限于:http流量处理函数、Socket监听函数或用户自定义的信息接收函数。通过插桩的方式设置流量计数代码,使得流量计数代码可以定制监听的流量处理函数。并且,可以监听用户自定义的信息接收函数,大大增加了流量监控的种类与范围。
在一个实施例中,流量计数代码可以设置在第一节点的应用代码中的流量处理函数的入口处和出口处。当在流量处理函数的入口处接收到一个消息时,通过流量计数代码对第一节点待处理的流量数加一,当流量处理函数的出口处外发一个消息时,通过流量计数代码对第一节点待处理的流量数减一,以此方式可以实时的统计出第一节点当前待处理的流量数量。
在再一个实施例中,利用流量计数代码实时采集第一节点的流量处理信息还包括:基于预定时间间隔内流量处理函数的出口处外发的消息数量和/或流量处理函数的入口处接收到的消息数量,计算第一节点的流量平均处理时长。
在一个实施例中,可以对第一节点处理的新消息和返回消息对应记录,得到每个新消息的处理时长,然后再实时统计流量平均处理时长。例如,可以对流量处理函数入口的每个消息打个标签,根据出口处响应消息中的标签可以确定出处理完的消息对应为流量处理函数入口的哪个消息,这样得到一个消息从流量处理函数入口到出口之间的处理时长,然后对该预定时间间隔内的所有消息的处理时长进行统计,得到该预定时间间隔内的流量平均处理时长。
在另一个实施例中,也可以从某个时刻起,记录到当前时刻止,流量处理函数的出口外发了多少个消息,就得到截止当前处理完成的消息数量,然后总时长除以处理完成的消息数量,得到当前的流量平均处理时长。
再在一个实施例中,还可以将预定时间间隔内流量处理函数的入口处接收到的消息数量和流量处理函数的出口处外发的消息数量加总后再除以2,以此来估计该预定时间间隔内处理完成的消息数量。然后该预定时间间隔的总时长除以处理完成的消息数量,得到流量平均处理时长。
如果同时监控一个节点的多个流量处理函数时,可以分别针对每个流量处理函数监控流量处理信息,或者也可以将多个流量处理函数的流量处理信息对应累加起来。
接下来在操作S205,判断第一节点的流量处理信息是否达到阈值条件。如果否,则返回操作S204;如果是,则执行操作S206。其中,在一些实施例中,该阈值条件可以是预设的流量总量阈值,例如,设置流量总量阈值为第一节点所能处理的流量最大数量或最大数量的80%(仅为示例)。或者在另一些实施例中,该阈值条件也可以是流量平均处理时长阈值。再或者在再一些实施例中,该阈值条件也可以是流量数量和流量平均处理时长加权后的阈值。
在操作S206,当第一节点的流量处理信息达到阈值条件时,从至少一个其他节点中查找是否存在与第一节点具有相同应用信息的节点。如果不存在,则执行操作S209。如果存在,则执行操作S207。
在操作S207,从操作S206中查找到的与第一节点具有相同应用信息的节点中,判断是否存在有流量处理信息未达到阈值条件的第二节点。如果存在,则执行操作S208。如果不存在,则执行操作S209。
在操作S208,当查找到与第一节点具有相同应用信息且流量处理信息未达到阈值条件的第二节点时,将到达第一节点的流量转发到第二节点。
在一个实施例中,可以使用插桩到第一节点的应用代码中的流量转发代码,将到达第一节点的流量转发到第二节点。例如,当查找到第二节点时,可以触发流量转发代码的执行,从第一节点本地存储的第二节点的注册信息中,提取出第二节点的网络连接信息(例如,IP地址和端口信息),然后将到达第一节点的流量重新组包通信代码,诸如重组目的端IP地址和目的端口信息等,接下来将重新组包了通信代码的流量转发到第二节点。
当操作S207中查找到多个第二节点的情况下,在操作S208中可以从多个第二节点中选取当前流量处理性能最佳的节点来承接转发流量。具体地,可以基于多个第二节点的流量处理信息,对多个第二节点的流量处理性能进行排序。例如,可以对多个第二节点的流量处理信息从某一个维度或多个维度的综合进行排序。在一个实施例中,可以将每个第二节点的流量处理信息中的当前待处理的流量数量和流量平均处理时长进行加权,然后根据加权结果对多个第二节点进行排序,按照排序结果,从多个第二节点中确定出流量处理性能最佳的第三节点。例如,如果加权后取值越小意味着该节点的当前待处理的流量数量较小和/或流量平均处理时长较短,从而可以选取加权后取值最小的节点作为第三节点。从而可以将到达第一节点的流量转发到第三节点。以此方式,可以进行流量转发的最佳匹配,有效平衡整个集群中各个节点的流量处理负荷,提高集群整体的流量处理效率。
在操作S209,当不存在与第一节点具有相同应用信息且流量处理信息未达到阈值条件的第二节点时,对于到达第一节点的请求,返回暂不能响应的报错信息。
以此方式,本发明实施例可以使第一节点监控自己以及其他节点的流量实时出入状态,根据预设的阈值条件对自己节点的流量运行状态监控,当达到阈值条件需要分发流量时,对传入的流量进行有效的转发或阻断。
本发明实施例可以有效的实现集群中多个节点之间的相互发现。具体体现为,第一节点能够及时发现其他节点的应用信息以及实时的流量处理信息,便于在第一节点的流量超负荷的情况下,及时将流量转发到具有相同应用信息且尚有流量处理能力的其他节点,从而提高了集群的流量处理能力。
本发明实施例中,无论是第一节点发现其他节点的信息,还是第一节点获取自己的信息,都可以是利用在每个节点上插桩的代码(诸如,注册发现代码、流量计数代码或流量转发代码)来实现。这样不仅可以通过字节码插桩实现流量分发的轻部署,无需额外部署硬件设施,大大降低部署难度,而且还可以避免人工手动配置等方式中可能存在的配置信息出错而导致部分分流功能丧失的问题。
相关技术中,无论是部署软件分流设备Nginx,还是硬件分流设备,均难以做到协议定制化分流。与此不同,本发明实施例中利用插桩的流量计数代码来采集流量处理信息时,可以定制要监控的流量协议,尤其是在现有的网络协议多种多样,诸如从http/https到各种私有协议不断涌现的情况下,本发明实施例的方式可以便于更精准地流量监控和分发。
图3示意性示出了当第一节点为集群中的任意节点时在一实施例中获取其他节点的应用信息的交互流程图。
如图3所示,在该实施例中,第一节点为集群中的任意节点,其中,集群中的所有节点可以不区分主次,均可以执行相同或相类似的操作。其中,每个节点都可以通过插桩于其应用代码中的注册发现代码来扫描自身的注册信息,然后可以通过在集群中广播自己的注册信息的方式,让集群中除了自己以外的其他节点发现包含自己的应用信息的注册信息。
具体地,第一节点可以执行操作S311~操作S314。集群中第一节点以外的其他节点可以执行操作S321~操作S324。
首先,第一节点可以在操作S311,利用插桩到第一节点的应用代码中的注册发现代码,扫描节点自身的信息,以得到第一节点的注册信息。其中注册信息可以包括应用信息,从而实现上述操作S203中的第一节点的应用信息的获取。
与此同时,其他节点可以在操作S321,利用插桩到该其他节点的应用代码中的注册发现代码,扫描自身的信息,以得到该其他节点的注册信息。
以此方式,集群中的每个节点都可以通过插桩到自己的应用代码中的注册发现代码对自身信息的扫描,来获取到自己的注册信息。例如,集群中的每个节点可以在应用服务器启动时自动或用户手动触发扫描自身信息,也可以在应用服务器启动后定期(例如,每天)或由事件触发(例如,服务器重启、故障恢复等)扫描自身信息。
注册发现代码扫描的信息包括但不限于:扫描节点中运行的应用的唯一识别信息、IP地址与端口等。此过程可以自动完成,无需用户提前配置应用的部署信息,使用便捷,也防止了由于用户配置失误导致的信息遗漏问题。
接下来其他节点可以在操作S322,向集群中的节点广播本节点的注册信息。将扫描的注册信息在集群中广播,便于其他节点接收和存储。
此后,第一节点可以在操作S312中,接收其他节点广播的注册信息。并可以在操作S313中,在本地存储该其他节点的注册信息。由于注册信息中包括了应用信息,从而实现了上述操作S201中对其他节点的应用信息的获取。
同样,当其他节点通过操作S322向集群广播注册信息的同时,第一节点也可以在操作S314,向集群中至少一个其他节点广播第一节点的注册信息。
当第一节点广播了自己的注册信息之后,其他节点可以在操作S323,接收第一节点的注册信息。并在操作S324,在其他节点本地存储第一节点的注册信息。
上述操作S322和操作S314中,在集群中广播本节点的注册信息的过程指的是,将本节点的注册信息分别发送给集群中除了本节点以外的节点。这样可以实现节点之间的注册信息的相互发现。
图4示意性示出了当第一节点为集群中的任意节点时在另一实施例中获取其他节点的实时的流量处理信息的交互流程图。
如图4所示,在该实施例中,第一节点为集群中的任意节点,其中,集群中的所有节点可以不区分主次,均可以执行相同或相类似的操作。每个节点都可以通过插桩于其应用代码中的流量处理函数的入口处和出口处的流量计数代码来实时采集本节点的流量处理信息,然后可以通过在集群中定时广播自己的流量处理信息,让集群中除了自己以外的其他节点可以发现自己当前的流量处理信息。
具体地,第一节点可以执行操作S411~操作S414。集群中第一节点以外的其他节点可以执行操作S421~操作S424。
首先,第一节点可以在操作S411,利用对第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集第一节点的流量处理信息。从而实现上述操作S204中第一节点的流量处理信息的实时采集。
与此同时,其他节点可以在操作S421,利用对该其他节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集该其他节点的流量处理信息。
以此方式,集群中的每个节点都可以通过插桩到自己的应用代码中的流量计数代码实时采集自己的流量处理信息。
接下来其他节点可以在操作S422,定时向集群中的节点广播本节点当前的流量处理信息。
在此后,第一节点可以在操作S412,接收其他节点的流量处理信息。并可以在操作S413中,根据接收到的其他节点最新发送的流量处理信息,更新并缓存其他节点的流量处理信息。流量处理信息缓存入内存中,并可以根据定时接收到的信息随时更新,以此实现了上述操作S202中对其他节点实时的流量处理信息的获取。
在其他节点定时向集群广播自己当前的流量处理信息的同时,第一节点也可以在操作S414,定时向集群中至少一个其他节点广播第一节点当前的流量处理信息。
当第一节点广播了自己的流量处理信息之后,其他节点可以在操作S423,接收第一节点的流量处理信息。并在操作S424,根据接收到的第一节点最新发送的流量处理信息,在其他节点本地更新和缓存第一节点的流量处理信息。
上述操作S422和操作S414中,向集群中广播本节点当前的流量处理信息的过程指的是,每个节点将本节点当前的流量处理信息分别发送给集群中除了本节点以外的节点。这样可以实现节点之间的流量处理信息的相互监控。
图5示意性示出了当第一节点为集群中的主节点时在一实施例中获取其他节点的应用信息的交互流程图。
如图5所示,该实施例中第一节点为集群中的主节点,其中,主节点与集群中的其他节点地位不同。例如,主节点可以收集其他节点上报的注册信息,但可以不用向其他节点发送自己的注册信息。
具体地,在该实施例中,第一节点可以执行操作S511、操作S512和操作S513。集群中第一节点以外的其他节点可以执行操作S521~操作S522。
首先,第一节点可以在操作S511,利用插桩到第一节点的应用代码中的注册发现代码,扫描节点自身的信息,以得到第一节点的注册信息。其中注册信息可以包括应用信息,从而实现上述操作S203中的第一节点的应用信息的获取。
与此同时,其他节点可以在操作S521,利用插桩到该其他节点的应用代码中的注册发现代码,扫描自身的信息,以得到该其他节点的注册信息。
以此方式,集群中主节点和其他节点都可以通过插桩到自己的应用代码中的注册发现代码对自身信息的扫描,来获取到自己的注册信息。
接下来其他节点可以在操作S522,向第一节点(即集群中的主节点)上报本节点的注册信息。
然后,第一节点可以在操作S512,接收其他节点上报的注册信息。并可以在操作S513中,在本地存储该其他节点的注册信息。
主节点通常相比于集群的其他节点,具备更好的基础硬件设施。在该实施例中,主节点可以作为应用程序的访问入口,可以承载集群的主要流量。当主节点的流量处理信息达到阈值条件需要分流时,主节点可以根据本地存储的注册信息,选取与自己具有相同应用信息的其他节点进行分流。
图6示意性示出了当第一节点为集群中的主节点时在另一实施例中获取其他节点的实时的流量处理信息的交互流程。
如图6所示,该实施例中第一节点为集群中的主节点,其中,主节点与集群中的其他节点地位不同。其中,主节点和其他节点均可以利用插桩到应用代码中的流量计数代码来实时统计各节点的流量处理信息,然而其他节点还需要定时向主节点上报当前的流量处理信息,以便于主节点对集群中自己以及其他节点的流量处理信息进行监控。
具体地,在该实施例中,第一节点可以执行操作S611、操作S612和操作S613。集群中第一节点以外的其他节点可以执行操作S621~操作S622。
首先,第一节点可以在操作S611,利用对第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集第一节点的流量处理信息,从而实现上述操作S204中的第一节点的流量处理信息的实时采集。
与此同时,其他节点可以在操作S621,利用对该其他节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集该其他节点的流量处理信息。
接下来其他节点可以在操作S622,定时向第一节点(即集群中的主节点)上报本节点的流量处理信息。
然后,第一节点可以在操作S612中,接收其他节点上报的流量处理信息。并可以在操作S613中,根据接收到的其他节点最新发送的流量处理信息,更新并缓存其他节点的流量处理信息。以此方式实现上述操作S202中对其他节点实时的流量处理信息的获取。
在该实施例中,主节点可以监控集群中包括自己在内的几乎所有节点的流量处理情况。当主节点的流量处理信息达到阈值条件需要分流时,主节点可以通过上述操作S205~208从其他节点中选取第二节点进行流量分发。
图7示意性示出了当第一节点为集群中的主节点时在一实施例中的流量分发方法的流程图。
如图7所示,根据本发明实施例,当第一节点为集群的主节点时,主节点可以获取到集群中包括自己在内的几乎所有的节点的应用信息和实时的流量处理信息。在这种情况下,除了主节点可以将自己的流量进行分流外,主节点也可以接收其他节点的分流请求或分流咨询,协调集群中的流量分配不均的情况。具体地,当第一节点为集群的主节点时,在上述操作S201~操作S209以外,第一节点还可以执行操作S701~操作S708。
在操作S701,接收至少一个其他节点中第四节点的流量转发目的端询问请求。例如,当第四节点的流量处理信息达到阈值条件时,第四节点可以向第一节点发送目的端询问请求。
然后在操作S702,判断第一节点与第四节点的应用信息是否相同。如果是,则执行操作S703;如果否,则执行操作S705。
在操作S703,当第一节点与第四节点的应用信息相同时,判断第一节点的流量处理信息是否达到阈值条件。如果否,则执行操作S704;如果是,则执行操作S705。
在操作S704,当第一节点与第四节点的应用信息相同,且第一节点的流量处理信息未达到阈值条件时,通知第四节点将流量转发到第一节点。
在操作S705,当第一节点与第四节点的应用信息不同,或者第一节点与第四节点的应用信息虽然相同,但第一节点的流量处理信息达到阈值条件时,从至少一个其他节点中查询是否存在与第四节点的应用信息相同的其余节点。如果是,则执行操作S706;如果否,则执行操作S708。
在操作S706,当至少一个其他节点中存在与第四节点的应用信息相同的其余节点时,判断其余节点中是否存在流量处理信息未达到阈值条件的第五节点。如果是,则执行操作S707;如果否,则执行操作S708。
在操作S707,通知第四节点将流量转发到第五节点。
在操作S708,当第一节点与第四节点的应用信息不同,或者第一节点与第四节点的应用信息虽然相同,但第一节点的流量处理信息达到阈值条件,而且也不存在第五节点时,通知第四节点向请求用户返回暂不能响应的报错信息。
图8示意性示出了在另一角度下根据本发明实施例的流量分发方法的流程图。
如图8所示,该流程可以包括操作S1~操作S10。参考图1,对图8的流程说明如下。
首先在操作S1:部署分流装置,以通过分流装置对应用代码进行插桩。具体地,在每个节点的应用服务器上部署分流装置,即在节点101-1、节点101-2和节点101-3的应用服务器上对应部署分流装置102-1、部署分流装置102-2和部署分流装置102-3。从而可以通过分流装置102-1、分流装置102-2和分流装置102-3,对各自的应用服务器中的应用代码进行插桩。
在操作S2:节点之间相互注册发现。节点101-1、节点101-2和节点101-3中每个节点的应用服务器运行起来后,分流装置102-1、分流装置102-2和分流装置102-3可以借助于插桩的注册发现代码,以扫描本节点的应用信息、网络连接信息等注册信息,并在集群中广播或手工注册每个节点的注册信息。
接下来在操作S3:流量处理信息采集。具体地,分流装置102-1、分流装置102-2和分流装置102-3借助于插桩于应用代码中的流量计数代码,实时采集各自所在节点的流量处理信息。
接下来在操作S4:流量处理信息定时广播。节点101-1、节点101-2和节点101-3中每个节点定时将当前采集的流量处理信息在集群中广播。
接下来在操作S5:每个节点根据采集到的流量处理信息分析本节点当前流量处理状态。
接下来在操作S6:每个节点判断本节点的流量处理信息是否达到预设的阈值条件。
在操作S7:若操作S6判断为未达到阈值条件,则直接放行流量,让当前节点正常处理。
在操作S8:若操作S6判断为达到阈值条件,则从注册过来的具有相同应用信息的节点中挑选是否存在流量处理信息尚未达到阈值条件的其他节点。
在操作S9:若操作S8判断为存在,则重组流量包进行流量转发。
在操作S10:若操作S8判断为不存在,则流量阻断。从而,当集群中所有节点均超过处理能力,则返回暂不能响应的统一报错信息,并记录日志,便于后续问题排查。
以此方式,本发明实施例可以通过轻量化的部署方式来实现集群中的节点间的流量的有效分发,无需通过购置服务器或者硬件设备进行部署安装。通过以字节码插桩的方式将自动提取节点的应用信息及其流量处理信息,可以避免人工配置失误的问题。
基于上述各个实施例的流量分发方法,本发明实施例还提供了一种流量分发装置。以下将结合图9对该流量分发装置进行详细描述。
图9示意性示出了根据本发明实施例的流量分发装置900的结构框图。该流量分发装置900可以设置于集群中的第一节点上,其中,该第一节点可以是集群中的任意一个节点,或者集群中的主节点。
如图9所示,根据本发明的一些实施例,该流量分发装置900可以包括注册模块910、采集模块920和转发模块930。根据本发明的另一些实施例,该流量分发装置900还可以进一步包括插桩模块940。该流量分发装置900可以执行前述参考图2~图8所描述的流量分发方法。
具体地,注册模块910可以包括第一获取单元911和第二获取单元912。
第一获取单元911用于获取集群中至少一个其他节点中每个其他节点的应用信息,以及获取至少一个其他节点中每个其他节点实时的流量处理信息。在一个实施例中,第一获取单元911可以执行前述操作S201和操作S202。例如,在一实施例中,第一获取单元911可以具体用于:首先接收至少一个其他节点中每个其他节点发送的注册信息,其中,注册信息包括每个其他节点的应用信息,然后在本地存储的每个其他节点的注册信息。在另一实施例中,第一获取单元911还用于:首先接收至少一个其他节点中每个其他节点定时发送的流量处理信息,然后根据接收到的每个其他节点最新发送的流量处理信息,更新并缓存每个其他节点的流量处理信息。
第二获取单元912用于获取第一节点的应用信息。在一实施例中,第二获取单元912可以执行前述操作S203。例如,在一实施例中,第二获取单元912可以用于:利用插桩到第一节点的应用代码中的注册发现代码,扫描第一节点自身的信息,以得到第一节点的注册信息,其中,注册信息包括第一节点的应用信息。在另一实施例中,当第一节点为集群中的任意一个节点时,第二获取单元912还可以用于在获取到第一节点的应用信息之后,将第一节点的应用信息发送给至少一个其他节点中的每个其他节点。
采集模块920用于实时采集第一节点的流量处理信息。在一实施例中,采集模块920可以执行前述操作S204。在一些实施例中,采集模块920还可以用于:利用对第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集第一节点的流量处理信息。在另一些实施例中,当第一节点为集群中的任意一个节点时,采集模块920还以用于定时将最新采集到的第一节点的流量处理信息,发送给至少一个其他节点中的每个其他节点。
转发模块930用于当第一节点的流量处理信息达到阈值条件时,从至少一个其他节点中查找与第一节点具有相同应用信息且流量处理信息未达到阈值条件的第二节点,以及当查找到第二节点时,将到达第一节点的流量转发到第二节点。在一实施例中,转发模块930可以执行前述操作S205~操作S208。
在一个实施例中,第一节点接收到的其他节点的注册信息不仅包括每个其他节点的应用信息,还包括每个其他节点的网络连接信息。相应的,转发模块930可以用于根据第二节点的网络连接信息,将到达第一节点的流量转发到第二节点。例如,对到达第一节点的流量,按照第二节点的网络连接信息,重新组包通信代码,然后就可以转发到第二节点。
在再一些实施例中,转发模块930还可以用于:当查找到多个第二节点时,基于多个第二节点的流量处理信息,对多个第二节点的流量处理性能进行排序,然后按照排序结果,从多个第二节点中确定出流量处理性能最佳的第三节点,并将到达第一节点的流量转发到第三节点。
当第一节点为集群中的主节点时,在一个实施例中,转发模块930还用于:接收至少一个其他节点中第四节点的流量转发目的端询问请求,并且当第一节点与第四节点的应用信息相同,且第一节点的流量处理信息未达到阈值条件时,通知第四节点将流量转发到自己。根据本发明的另一实施例,转发模块930还用于:当第一节点与第四节点的应用信息不同,或者第一节点与第四节点的应用信息虽然相同,但第一节点的流量处理信息达到阈值条件时,从至少一个其他节点中寻找与第四节点的应用信息相同,且流量处理信息未达到阈值条件的第五节点作为目的端,并通知第四节点将流量转发到第五节点。
插桩模块940用于在第一节点启动之前,以插桩的方式在第一节点的应用代码中插入相应的代码,包括流量计数代码、注册发现代码和流量转发代码,使得第一节点启动后可以执行上述各个实施例描述的流量分发方法。具体地,流量计数代码可以设置在第一节点的应用代码中的流量处理函数的入口处和出口处,用于实时采集第一节点的流量处理信息。注册发现代码用于扫描第一节点自身的信息,以得到第一节点的应用信息。在一些实施例中,注册发现代码还可以扫描得到第一节点的网络连接信息等信息,具体可以配置。流量转发代码可以形成上述转发模块930,实现对第一节点的流量在集群中的有效转发。
图10示意性示出了图9所示的装置中插桩模块940的结构框图。
如图10所示,插桩模块940可以包括流量处理插桩单元941、服务注册发现单元942与流量转发插桩单元943。
流量处理插桩单元941可以对第一节点的应用代码中的流量处理函数进行插桩。在一实施例中,流量处理函数包括但不限于:http协议处理函数、socket监听函数和用户自定义的信息接收函数等。
具体地,流量处理插桩单元941可以在这些流量处理函数的入口处和出口处设置流量计数代码。该流量计数代码可以对第一节点当前要处理的流量进行统计。例如,当在流量处理函数的入口处检测到消息时计数加一,当在流量处理函数的出口处检测到消息时减一。在一些实施例中,该流量计数代码还可以计算流量平均处理时长。该流量计数代码被处理器读取执行后,可以成为上述的采集模块920。
服务注册发现单元942负责插入注册发现代码。注册发现代码可以在第一节点运行过程中提取第一节点中的应用服务器的IP地址、端口、应用信息(诸如应用名、应用版本信息等),得到第一节点的注册信息,以该注册信息来唯一标识第一节点。在一些实施例中,注册发现代码还可以以广播的方式,在集群中广播第一节点的注册信息,令其他节点可以发现并识别第一节点,便于后续流量转发时判别转发位置等。在另一些实施例中,注册发现代码也支持以模板的方式向主节点或注册中心上报自身的注册信息。注册发现代码被处理器读取执行后,可以成为上述的第二获取单元912。
流量转发插桩单元943负责插入流量转发代码。该流量转发代码用于当第一节点的流量处理线程超过预期,导致第一节点的流量处理信息达到阈值条件时,进行流量分流转发。当第一节点启动后,该流量转发代码被处理器读取执行后,可以成为上述的转发模块930。
本发明实施例可以通过字节码增强技术,在集群中各节点的应用代码中进行代码插桩,来实现应用分流,拥有部署难度低并避免手工提取信息难免引入人工错误的优点,而且可以适用多种协议的流量处理函数或自定义的信息接收函数,能够在一定程度上保障集群的应用有效分流,提高集群应用的运行稳定性。
根据本发明的实施例,注册模块910、采集模块920、转发模块930和插桩模块940中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,注册模块910、采集模块920、转发模块930和插桩模块940中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者注册模块910、采集模块920、转发模块930和插桩模块940中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图11示意性示出了适于实现本发明实施例的流量分发方法的电子设备的结构框图。
如图11所示,根据本发明实施例的电子设备1100包括处理器1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。处理器1101例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1101还可以包括用于缓存用途的板载存储器。处理器1101可以包括用于执行根据本发明实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1103中,存储有电子设备1100操作所需的各种程序和数据。处理器 1101、ROM 1102以及RAM 1103通过总线1104彼此相连。处理器1101通过执行ROM 1102和/或RAM1103中的程序来执行根据本发明实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1102和RAM 1103以外的一个或多个存储器中。处理器1101也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本发明实施例的方法流程的各种操作。
根据本发明的实施例,电子设备1100还可以包括输入/输出(I/O)接口1105,输入/输出(I/O)接口1105也连接至总线1104。电子设备1100还可以包括连接至I/O接口1105的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
本发明还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本发明实施例的方法。
根据本发明的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本发明的实施例,计算机可读存储介质可以包括上文描述的ROM 1102和/或RAM 1103和/或ROM 1102和RAM 1103以外的一个或多个存储器。
本发明的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本发明实施例所提供的方法。
在该计算机程序被处理器1101执行时执行本发明实施例的系统/装置中限定的上述功能。根据本发明的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1109被下载和安装,和/或从可拆卸介质1111被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被处理器1101执行时,执行本发明实施例的系统中限定的上述功能。根据本发明的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本发明的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本发明的各个实施例中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本发明中。特别地,在不脱离本发明精神和教导的情况下,本发明的各个实施例中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本发明的范围。
以上对本发明的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本发明的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。不脱离本发明的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本发明的范围之内。
Claims (13)
1.一种流量分发方法,应用于集群中的第一节点,所述第一节点为所述集群中的任意一个节点,其特征在于,所述方法包括:
接收所述集群中至少一个其他节点中每个其他节点在所述集群中广播的每个其他节点的应用信息;
接收所述至少一个其他节点中每个其他节点在所述集群中定时广播的每个其他节点实时的流量处理信息;所述流量处理信息包括当前待处理的流量数量和/或当前流量平均处理时长;
通过扫描所述第一节点的应用服务器来获取所述第一节点的应用信息,并在所述集群中广播所述第一节点的应用信息;
实时采集所述第一节点的所述流量处理信息,并在所述集群中定时广播最新采集到的所述第一节点的所述流量处理信息;
当所述第一节点的所述流量处理信息达到阈值条件时,从所述至少一个其他节点中查找与所述第一节点具有相同应用信息且流量处理信息未达到所述阈值条件的第二节点;其中,所述阈值条件包括预设的流量总量阈值、流量平均处理时长阈值、或流量数量和流量平均处理时长加权后的阈值;
当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点;以及
当不存在所述第二节点时,对于到达第一节点的请求,返回暂不能响应的报错信息。
2.根据权利要求1所述的方法,其特征在于,所述获取所述集群中至少一个其他节点中每个其他节点的应用信息包括:
接收所述至少一个其他节点中每个其他节点发送的注册信息,其中,所述注册信息包括应用信息;以及
在本地存储的每个其他节点的所述注册信息。
3.根据权利要求2所述的方法,其特征在于,所述注册信息还包括网络连接信息;所述当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点包括:
根据所述第二节点的所述注册信息中的网络连接信息,将到达所述第一节点的流量转发到所述第二节点。
4.根据权利要求1所述的方法,其特征在于,
根据接收到的每个其他节点最新发送的流量处理信息,更新并缓存每个其他节点的流量处理信息。
5.根据权利要求1所述的方法,其特征在于,当查找到多个所述第二节点时,所述将到达所述第一节点的流量转发到所述第二节点包括:
基于多个所述第二节点的流量处理信息,对多个所述第二节点的流量处理性能进行排序;
按照排序结果,从多个所述第二节点中确定出流量处理性能最佳的第三节点;以及
将到达所述第一节点的流量转发到所述第三节点。
6.根据权利要求1所述的方法,其特征在于,所述实时采集所述第一节点的流量处理信息包括:
利用对所述第一节点的应用代码中的流量处理函数进行插桩的流量计数代码,实时采集所述第一节点的流量处理信息。
7.根据权利要求6所述的方法,其特征在于,所述流量处理函数包括以下至少之一:http流量处理函数、Socket监听函数、或用户自定义的信息接收函数。
8.根据权利要求6所述的方法,其特征在于,所述流量计数代码设置在所述流量处理函数的入口处和出口处;则利用所述流量计数代码实时采集所述第一节点的流量处理信息包括:
当在所述流量处理函数的入口处接收到一个消息时,所述第一节点待处理的流量数加一;以及
当所述流量处理函数的出口处外发一个消息时,所述第一节点待处理的流量数减一。
9.根据权利要求8所述的方法,其特征在于,所述利用所述流量计数代码实时采集所述第一节点的流量处理信息还包括:
基于预定时间间隔内所述流量处理函数的出口处外发的消息数量和/或所述流量处理函数的入口处接收到的消息数量,计算所述第一节点的流量平均处理时长。
10.根据权利要求1所述的方法,其特征在于,所述获取所述第一节点的应用信息包括:
利用插桩到所述第一节点的应用代码中的注册发现代码,扫描所述第一节点自身的信息,以得到所述第一节点的注册信息,其中,所述注册信息包括所述第一节点的应用信息。
11.一种流量分发装置,设置于集群中的第一节点,所述第一节点为所述集群中的任意一个节点,其特征在于,所述装置包括:
注册模块,包括:
第一获取单元,用于接收所述集群中至少一个其他节点中每个其他节点在所述集群中广播的每个其他节点的应用信息,以及接收所述至少一个其他节点中每个其他节点在所述集群中定时广播的每个其他节点实时的流量处理信息;其中所述流量处理信息包括当前待处理的流量数量和/或当前流量平均处理时长;
第二获取单元,用于通过扫描所述第一节点的应用服务器来获取所述第一节点的应用信息,并在所述集群中广播所述第一节点的应用信息;
采集模块,用于实时采集所述第一节点的流量处理信息,并在所述集群中定时广播最新采集到的所述第一节点的所述流量处理信息;
转发模块,用于:
当所述第一节点的所述流量处理信息达到阈值条件时,从所述至少一个其他节点中查找与所述第一节点具有相同应用信息且流量处理信息未达到所述阈值条件的第二节点;其中,所述阈值条件包括预设的流量总量阈值、流量平均处理时长阈值、或流量数量和流量平均处理时长加权后的阈值;
当查找到所述第二节点时,将到达所述第一节点的流量转发到所述第二节点;以及
当不存在所述第二节点时,对于到达第一节点的请求,返回暂不能响应的报错信息。
12.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行权利要求1~10中任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现权利要求1~10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310425324.9A CN116137611B (zh) | 2023-04-20 | 2023-04-20 | 流量分发方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310425324.9A CN116137611B (zh) | 2023-04-20 | 2023-04-20 | 流量分发方法、装置、设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116137611A CN116137611A (zh) | 2023-05-19 |
CN116137611B true CN116137611B (zh) | 2023-07-25 |
Family
ID=86333750
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310425324.9A Active CN116137611B (zh) | 2023-04-20 | 2023-04-20 | 流量分发方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116137611B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
CN110933128A (zh) * | 2019-10-08 | 2020-03-27 | 网宿科技股份有限公司 | 节点流量调度方法、装置、电子设备及存储介质 |
CN115242718A (zh) * | 2022-06-21 | 2022-10-25 | 平安科技(深圳)有限公司 | 集群限流方法、装置、设备及介质 |
CN115834668A (zh) * | 2022-11-08 | 2023-03-21 | 中国工商银行股份有限公司 | 集群节点控制方法、装置、设备、存储介质和程序产品 |
CN115834483A (zh) * | 2022-11-15 | 2023-03-21 | 中国工商银行股份有限公司 | 基于集群的流量控制方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8886781B2 (en) * | 2011-12-13 | 2014-11-11 | Microsoft Corporation | Load balancing in cluster storage systems |
-
2023
- 2023-04-20 CN CN202310425324.9A patent/CN116137611B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
CN110933128A (zh) * | 2019-10-08 | 2020-03-27 | 网宿科技股份有限公司 | 节点流量调度方法、装置、电子设备及存储介质 |
CN115242718A (zh) * | 2022-06-21 | 2022-10-25 | 平安科技(深圳)有限公司 | 集群限流方法、装置、设备及介质 |
CN115834668A (zh) * | 2022-11-08 | 2023-03-21 | 中国工商银行股份有限公司 | 集群节点控制方法、装置、设备、存储介质和程序产品 |
CN115834483A (zh) * | 2022-11-15 | 2023-03-21 | 中国工商银行股份有限公司 | 基于集群的流量控制方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116137611A (zh) | 2023-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2260611B1 (en) | Automated power topology discovery | |
CN109194617B (zh) | Xml报文的自动解析、封装方法和装置 | |
EP3296975A1 (en) | Collection and provision method, device, system and server for vehicle image data | |
CN105141449A (zh) | 监控配置的添加方法及装置 | |
CN112583797B (zh) | 多协议数据处理方法、装置、设备及计算机可读存储介质 | |
CN113064661A (zh) | 批量任务的内存处理方法、装置、电子设备及存储介质 | |
EP3151124A1 (en) | On-board information system and information processing method therefor | |
CN115134236A (zh) | 一种智能网卡管理的方法、装置、设备及可读介质 | |
CN109388671A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112817814A (zh) | 异常监控方法、系统、存储介质及电子装置 | |
US11528184B2 (en) | Processing method, device and apparatus for mesh network, and storage medium | |
JP2013207324A (ja) | 複数の画像圧縮方式が存在する環境における映像選択方法 | |
CN116137611B (zh) | 流量分发方法、装置、设备和介质 | |
US9992664B2 (en) | Determining network connection structure of target area | |
CN106685708B (zh) | 一种服务关系的确定方法、装置及系统 | |
CN113839991A (zh) | 设备信息的确认方法、装置、存储介质及电子装置 | |
EP3101906A1 (en) | Communication system, common service control apparatus, data collection method, and non-transitory computer readable medium | |
JP5648011B2 (ja) | 機器同定装置、機器同定システム、機器同定方法及び機器同定プログラム | |
CN109905486B (zh) | 一种应用程序识别展示方法和装置 | |
CN111050356A (zh) | 数据传输的处理方法及装置、存储介质、电子装置 | |
WO2023248441A1 (ja) | 操作機器管理システム、操作機器管理装置、操作機器管理方法およびプログラム | |
CN112491596B (zh) | 一种基于云端的故障处理方法及装置 | |
CN112738803B (zh) | 一种终端设备入网方法、装置及网关设备 | |
JP6763895B2 (ja) | 通信システム及び通信方法 | |
CN110708208B (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 |