访问数据节点的方法及系统与流程

文档序号:12829330阅读:298来源:国知局
访问数据节点的方法及系统与流程

本发明涉及计算机技术领域,更具体地,涉及一种访问数据节点的方法及系统。



背景技术:

目前数据层基本以异地多点部署,本机房服务优先访问本机房或最近的数据节点,当访问中的数据节点所对应的节点网络异常或系统异常的情况下,能快速切换到健康可用且最近的数据节点。如果遇到网络抖动的情况下立马切换至其它数据节点或跨机房的数据节点后,由于时延增长,反而容易导致任务堆积。

因此,业内亟需一种能解决上述问题的技术方案。



技术实现要素:

为解决上述技术问题,本发明提出了一种访问数据节点的方法及系统,解决抖动马上切换数据节点的问题。

为了实现本发明的目的,采取了如下技术方案:

本发明提供了一种访问数据节点的方法,其包括:

读取可用节点队列中的权重最大的数据节点;

访问所述数据节点;

判断访问是否成功,若否,减少可用节点队列中所述数据节点的权重;若是,判断连接所述数据节点的时延是否小于阈值,若是,增加可用节点队列中所述数据节点的权重,否则,可用节点队列中所述数据节点的权重不变。

具体地,所述读取可用节点队列中权重最大的数据节点之前,还包括:

预设可用节点队列中的数据节点的初始权重。

具体地,所述预设可用节点队列中的数据节点的初始权重,包括:

预设可用节点队列中的本地机房的数据节点的初始权重最大,按地域与线路质量预设可用节点队列中的远程机房的数据节点的初始权重。

具体地,所述读取可用节点队列中的权重最大的数据节点之前,还包括:

接收访问数据节点的请求。

具体地,所述判断访问是否成功,若否,减少可用节点队列中所述数据节点的权重;若是,判断连接所述数据节点的时延是否小于阈值,若是,增加可用节点队列中所述数据节点的权重,否则,可用节点队列中所述数据节点的权重不变,包括:

判断访问是否成功,若否,把可用节点队列中所述数据节点的权重减少2;若是,判断连接所述数据节点的时延是否小于1s,若是,确定所述数据节点的权重不大于初始权重的2倍,把可用节点队列中所述数据节点的权重增加1;否则,可用节点队列中所述数据节点的权重不变。

具体地,所述减少可用节点队列中所述数据节点的权重之后,还包括:

根据所述权重确定出所述数据节点为不可用节点;

把所述数据节点从所述可用节点队列中删除,放入不可用节点队列中。

具体地,所述根据所述权重确定出所述数据节点为不可用节点,包括:

检测当前可用节点队列当中的数据节点的权重是否低于所述数据节点的初始权重的1/2;

若是,则确定所述数据节点为不可用节点。

具体地,还包括:

建立独立线程对不可用节点队列中的数据节点进行有效性检测。

具体地,所述建立独立线程对不可用节点队列中的数据节点进行有效性检测之后,还包括:

确定所述不可用节点队列中的数据节点满足预设的有效性的时延要求;

将所述数据节点从不可用节点队列中删除,放入可用节点队列中。

此外,本发明还相应地提供了一种访问数据节点的系统,其包括:

读取模块,用于读取可用节点队列中的权重最大的数据节点;

访问模块,用于访问所述数据节点;

判断模块,用于判断访问是否成功,若否,减少可用节点队列中所述数据节点的权重;若是,判断连接所述数据节点的时延是否小于阈值,若是,增加可用节点队列中所述数据节点的权重,否则,可用节点队列中所述数据节点的权重不变

具体地,所述读取可用节点队列中权重最大的数据节点之前,还包括:

预设模块,用于预设可用节点队列中的数据节点的初始权重。

具体地,所述预设模块,包括:

预设单元,用于预设可用节点队列中的本地机房的数据节点的初始权重最大,按地域与线路质量预设可用节点队列中的远程机房的数据节点的初始权重。

具体地,所述读取可用节点队列中的权重最大的数据节点之前,还包括:

接收模块,用于接收访问数据节点的请求。

具体地,所述判断模块被配置为:

判断访问是否成功,若否,把可用节点队列中所述数据节点的权重减少2;若是,判断连接所述数据节点的时延是否小于1s,若是,确定所述数据节点的权重不大于初始权重的2倍,把可用节点队列中所述数据节点的权重增加1;否则,可用节点队列中所述数据节点的权重不变。

具体地,所述减少可用节点队列中所述数据节点的权重之后,还包括:

第一确定模块,用于根据所述权重确定出所述数据节点为不可用节点;

第一删除模块,用于把所述数据节点从所述可用节点队列中删除,放入不可用节点队列中。

具体地,所述第一确定模块,包括:

检测单元,用于检测当前可用节点队列当中的数据节点的权重是否低于所述数据节点的初始权重的1/2;

确定单元,用于若是,则确定所述数据节点为不可用节点。

具体地,还包括:

建立模块,用于建立独立线程对不可用节点队列中的数据节点进行有效性检测。

具体地,所述建立独立线程对不可用节点队列中的数据节点进行有效性检测之后,还包括:

第二确定模块,用于确定所述不可用节点队列中的数据节点满足预设的有效性的时延要求;

第二删除模块,用于则将所述数据节点从不可用节点队列中删除,放入可用节点队列中。

相比现有技术,本发明的方案具有以下优点:

1.本发明所述访问数据节点的方法中,访问当前可用节点队列中权重最大的数据节点,根据访问是否成功与时延是否小于阈值,动态调整该数据节点的权重,该调整为缓和进行,若发生网络抖动,导致当前一次或几次访问不成功,权重逐步变小,该数据节点的权重仍是最大值,不至于马上切换数据节点;除非发生相对较长时间的网络故障,导致该数据节点的权重多次减小后,从而小于其他的数据节点权重;当网络恢复正常,在时延小于阈值情况下,权重逐步变大,为下次抖动提供冗余。本方案解决了传统的网络抖动的情况下立马切换数据节点甚至跨机房的数据节点后,时延增长所导致的任务堆积的问题。此外,根据访问数据节点是否成功以及访问数据节点的时延,实时调整该数据节点的权重,权衡了系统的负载,自选最优数据节点进行服务访问,自主缓冲切换健康的数据节点,提供了一个更准确、性能更优的切换运算决策。

2.本发明所述访问数据节点的方法中,建立独立线程对不可用节点队列中的数据节点进行有效性检测,保证了检测的同时不会影响正常的业务请求。此外,将满足条件的不可用节点队列中的数据节点重新放入可用节点队列,提高了线路资源的利用率,有效地保证了来自客户端的请求能够得到及时的响应。

3.本发明所述访问数据节点的方法中,当前可用节点队列当中的数据节点的权重低于该数据节点的初始权重的1/2时,会将所述数据节点从可用节点队列中删除,并添加到不可用节点队列进行检测,这种情况下,在网络突然波动时,不会立刻将权重减少到低优先级的数据节点,其会存在一个缓冲期。若网络的波动时间较短,不会立即切换至低优先级的数据节点,这样能保证业务能访问更低时延更高优先级的数据节点,避免任务的拥塞。

本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

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

图1示出了本发明中一种访问数据节点的方法的一种实施例的结构示意图;

图2示出了本发明中一种访问数据节点的方法的另一种实施例的结构示意图;

图3示出了本发明中一种访问数据节点的方法的又一实施例的结构示意图;

图4示出了本发明中一种访问数据节点的系统的一种实施例的结构示意图;

图5示出了本发明中一种访问数据节点的系统的另一种实施例的结构示意图;

图6示出了本发明中一种访问数据节点的系统的又一种实施例的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1,示出了本发明中一种访问数据节点的方法的实施例的结构。

本发明提供了一种访问数据节点的方法,其包括步骤s11、步骤s12和步骤s13。

其中,步骤s11:读取可用节点队列中的权重最大的数据节点。

在本发明的一种实施例中,数据层以异地多点进行部署,其对应的数据节点分布在不同的地方。当服务器需要进行数据访问时,其会从与其建立连接关系的数据节点中,读取可用节点队列中的权重最大的数据节点进行数据访问,以获取所需的数据信息。

读取可用节点队列中的权重最大的数据节点进行访问,即选择当前可用的数据节点中最优的数据节点进行服务访问,其有利于避免更多的访问请求的堆积,降低服务负载。

其中,优选地,本发明的实施例是基于数据连接池的基础上实现的。服务器在启动时,其会与数据层之间建立一定数量的池连接,并一直维持不少于此数目的池连接。也就是说,服务器会与数据层所对应的多个数据节点建立连接关系,所述基于连接关系与数据层所建立的连接的数量可根据实际的需要而进行实时动态的调整。客户端程序需要连接时,池程序会返回一个未使用的池连接并标记为忙。如果当前没有空闲连接,池驱动程序会新建一定数量的连接,新建连接的数据由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

同时,如图2,示出了本发明中一种访问数据节点的方法的另一种实施例。在这一实施例中,所述读取可用节点队列中的权重最大的数据节点之前,还包括步骤s10。其中,步骤s10:接收访问数据节点的请求。

在本发明中,用户在通过相关的客户端进行相关的数据访问请求的操作时,这些来自客户端的访问请求在服务器中汇集,服务器根据客户端的访问请求,访问数据层所对应的数据节点,并优先选择当前可用队列节点中的权重最大的数据节点进行数据访问,以更有效、更快速地获取相应的数据信息,并减少系统的负载及系统任务的拥塞。

此外,参见图3,其列出了本发明的又一种实施例。该实施例中,所述读取可用节点队列中权重最大的数据节点之前,还包括步骤s14。其中,步骤s14:预设可用节点队列中的数据节点的初始权重。

例如,当前的数据层其对应的可用节点队列中存在3个数据节点,分别位于广州、上海以及北京。相对于广州的服务器而言,其会优先访问本机房所在地域的数据节点,因此广州、上海及北京的数据节点的初始权重有所不同,分别预设为150、70、30。同理,相对于上海的服务器而言,广州、上海及北京的数据节点的初始权重可分别预设为100、210、80。可以理解的是,上述的举例,只是为了说明,针对不同地域的服务器访问数据节点的情形,不同的数据节点之间的权重的初始值是可以根据不同地域的服务器的实际需求进行配置,其并不能构成对本发明的限制。

所述数据节点的初始权重可根据实际的情况进行配置,一方面,有利于根据后期的运维工作、数据节点的放置以及服务器与数据节点之间的线路配置的动态调整;另一方面,也有利于根据当前的用户的请求的数据来源进行动态调整,从而提供性能更优、成本开销更低的数据节点及数据节点的切换方案。

所述数据节点的初始权重,在某种意义上,是权衡了服务器访问数据节点时的相对保留时间及整个系统负载而进行预设的。其是为了让服务器选择当前最优的数据节点进行访问或自主缓冲切换至健康的数据节点进行数据访问,以保证用户在进行业务访问的时候,能提供更低时延、更优性能的数据节点,避免任务拥塞。

因此,在本发明的更具体的方案中,所述预设可用节点队列中的数据节点的初始权重,包括:

预设可用节点队列中的本地机房的数据节点的初始权重最大,按地域与线路质量预设可用节点队列中的远程机房的数据节点的初始权重。

例如,对于广州的服务器而言,其对应的数据层的可用节点队列当中存在4个数据节点,其中,包括位于广州的两个数据节点a和b,位于上海的数据节点c以及位于北京的数据节点d。在广州的服务器与广州、北京、上海的数据节点之间的线路质量大体一致的时候,不同地域之间的距离对数据访问的速度跟质量存在较大的影响。因此,相对于广州的服务器而言,广州的数据节点a和b的优先级会高于上海的数据节点c跟北京的数据节点d,从而广州的数据节点a和b的权重比上海的数据节点c跟北京的数据节点d高。而在服务器和数据节点处于同一地域时,线路的质量对数据访问的速度跟质量存在的影响更为明显。因此,相对于广州的服务器而言,广州的数据节点a和b的线路质量越好,越有利于广州的服务器进行访问。这种情形下,相对于广州的服务器而言,其所对应的可用节点队列中的数据节点a、b、c、d的初始权重可预设为200、150、110、65。

根据地域与线路质量,权衡了数据节点对于不同地域的服务器的优先级,有利于针对不同的客户端服务器,确定不同的数据节点之间的初始权重的优先级及相应的数值。使得不同的客户端服务器选择相对于自身而言的可用节点队列中的权重最大的数据节点进行访问,能时刻保证业务能访问更低时延、更高优先级的数据节点。

步骤s12:访问所述数据节点。

在服务器接收到来自客户端的访问请求之后,服务器会根据所述访问请求去访问数据节点获取相关的数据信息。首先,服务器会读取当前的可用节点队列当中权重最大的数据节点进行访问。可以理解的是,由于线路、网络质量等原因,服务器对数据节点的访问并不必然成功。例如,在当前的网络存在波动或网络异常的情况下,服务器也存在访问不成功的情形。在网络存在波动或网络异常等情形之下,服务器是否有必要切换其连接至当前的可用节点队列当中的其它数据节点,可以根据当前可用节点队列的数据节点的实时动态的权重进行决定,以获取更好的切换方案,避免系统任务的堆积。

步骤s13:判断访问是否成功,若否,减少可用节点队列中所述数据节点的权重;若是,判断连接所述数据节点的时延是否小于阈值,若是,增加可用节点队列中所述数据节点的权重,否则,可用节点队列中所述数据节点的权重不变。

在本发明的具体实施例中,对可用节点队列当中的数据节点的权重进行动态的调整,是根据服务器访问数据节点是否成功及服务器访问成功时的时延等综合判断,对当前可用节点队列当中的数据节点的权重进行实时的调整。

在服务器访问数据节点时,首先会判断服务器对数据节点的访问是否成功,进而判断成功后的连接时延是否满足预设的阈值,从而实现对所述数据节点的权重进行调整。

例如,相对于广州的服务器而言,可用节点队列中的数据节点a的初始权重是100。广州的服务器访问广州的数据节点a,访问不成功的话,可减少该数据节点a在可用节点队列中的权重为98;若广州的服务器成功访问数据节点a,则进一步判断访问数据节点a的时延是否超过了预先设置的阈值;如果时延小于预设的阈值,则可增加数据节点a在可用节点队列中的权重为102,如果时延大于预设的阈值,则可维持数据节点a在可用节点队列中的权重100不变。

可以理解的是,服务器对数据节点的访问是高速且频繁的,其在短时间内存在大量的访问,由于每一次对数据节点的访问都会调整该数据节点的权重,因此,数据节点的调整是实时且动态的。

其中,可用节点队列中所述数据节点的权重的调整,存在一个优选的方案,其可以在动态调整可用节点队列中的数据节点的权重时,保证一个更准确、更优化的决策方案。

在本发明的一种更具体的实施例中,所述步骤s103,包括:

判断访问是否成功,若否,把可用节点队列中所述数据节点的权重减少2;若是,判断连接所述数据节点的时延是否小于1s,若是,确定所述数据节点的权重不大于初始权重的2倍,把可用节点队列中所述数据节点的权重增加1;否则,可用节点队列中所述数据节点的权重不变。

例如,相对于广州的服务器而言,可用节点队列中的数据节点a的初始权重是100。广州的服务器访问广州的数据节点a,访问不成功的话,则把该数据节点的权重a减少2,此时数据节点a的权重调整为98。在广州的服务器成功访问数据节点a的情形下,进一步判断访问数据节点a的时延。若所述时延为0.9s,小于预设的阈值1s,则进一步确定数据节点a当前的权重100不大于200后,把可用节点队列当中的数据节点a的权重增加1,从而把数据节点a的权重调整为101。若所述时延为2s,超过了预设的阈值1s,则维持所述数据节点a的权重为100不变。

具体地,所述减少可用节点队列中所述数据节点的权重之后,还包括:

根据所述权重确定出所述数据节点为不可用节点;

把所述数据节点从所述可用节点队列中删除,放入不可用节点队列中。

在本发明的实施例中所述减少可用节点队列中所述数据节点的权重之后,还需要判断此时该所述数据节点是否还满足一定的条件,以继续存留在可用节点队列当中,以便服务器的下一次访问。当可用节点队列当中的数据节点的权重下降到一定的程度,说明服务器在一定的时间内访问该数据节点不成功或访问该数据节点的时延较大,进一步说明该数据节点出现了所在的通信线路出现异常或网络波动较大或网络异常等情形。这时,该数据节点的可用性和效率性就会降低到一定的程序,可能会对服务器的访问存在一定的影响,进而导致用户的访问请求无法得到及时的响应而导致系统任务的拥塞。因此,在这种情形之下,当根据所述权重确定出所述数据节点为不可用节点时,把所述数据节点从其所在的可用节点队列中删除,放入到不可用节点队列中,以待重新确定该数据节点是否为可用数据节点,或对该数据节点进行相应的维修处理。

具体地,所述根据所述权重确定出所述数据节点为不可用节点,包括:

检测当前可用节点队列当中的数据节点的权重是否低于所述数据节点的初始权重的1/2;

若是,则确定所述数据节点为不可用节点。

在本发明的一种具体实施例中,确定一个可用节点队列当中的数据节点是否为不可用节点,需要将该数据节点当前的权重与该数据节点的初始权重的1/2进行比较。例如,一个可用节点队列中的数据节点的初始权重为100,该数据节点由于权重一直在减少,当前的权重为49。由于权重49低于该数据节点的初始权重的1/2,也就是50,所以确定该数据节点为不可用数据节点。

由于对于同一服务器而言,不同区域的数据节点的优先级所对应的权重存在一定的数值间隔。在某一地域的网络突然波动或存在异常时,不会立刻将该地域所对应的数据节点确定为不可用节点,其会存在一定的缓冲期,避免由于短时间的网络抖动期间而立刻切换至其它地域的数据节点,从而有更多的请求堆积,把服务负载验证拉高,导致出现压力洪灾。此外,将通过对可用节点队列中的数据节点的可用性进行检测,有利于保证可用节点队列中的数据节点的高效性,能及时将存在问题的数据节点从可用节点队列删除,进而在服务器访问可用节点队列当中的数据节点时,保证权重最大的数据节点能及时响应于服务器的访问请求。

对于那些放置于不可用节点队列当中的数据节点,后期还需要进一步检测其是否可用。

具体地,还包括:

建立独立线程对不可用节点队列中的数据节点进行有效性检测。

可以理解的是,如果只是网络的短期抖动,导致了服务器在短时间内访问数据节点不成功或时延过大,导致该数据节点的权重低于一定的预设值,从而被确定为不可用节点,进而被从可用节点队列中删除。当网络重新稳定的时候,该数据节点的性能便会恢复到网络波动之前。网络波动结束之后,该数据节点的存在会对本机房或其它区域的服务器访问可用节点队列当中的数据节点产生积极的影响。换句话说,对不可用节点队列当中的数据节点进行检测,其当前是否有效,是对线路资源的有效利用,以确定高效、可用的数据节点能及时响应于来自服务器的大量请求。在本发明中,建立独立线程对不可用节点队列中的数据节点进行有效性检测,不会占用系统对业务请求的资源,从而不影响到来自服务器的业务请求。

具体地,所述建立独立线程对不可用节点队列中的数据节点进行有效性检测之后,还包括:

确定所述不可用节点队列中的数据节点满足预设的有效性的时延要求;

将所述数据节点从不可用节点队列中删除,放入可用节点队列中。

当然,对于不可用节点队列中的数据节点进行有效性的检测,当所述数据节点能满足系统预设的有效性的要求之后,说明该数据节点是可用的,能及时响应于服务器的请求。这时,则应当将该数据节点从不可用节点队列中删除,放入到当前的可用节点队列中去。这有利于提高对数据节点所对应的线路资源的利用率。

例如,如果系统所预设的有效性的时延要求是在1分钟内10次响应于来自服务器的访问请求,并且每次时延不得高于1s。当建立的线程定时或不定时检测不可用节点队列中的数据节点,当存在数据节点满足所述预设的有效性的时延要求时,则将该数据节点从不可用节点队列中删除,放入可用节点队列中。

综上,本发明中的访问数据节点的方法,访问当前可用节点队列中权重最大的数据节点,根据访问是否成功与时延是否小于阈值,动态调整该数据节点的权重,该调整为缓和进行,若发生网络抖动,导致当前一次或几次访问不成功,权重逐步变小,该数据节点的权重仍是最大值,不至于马上切换数据节点;除非发生相对较长时间的网络故障,导致该数据节点的权重多次减小后,从而小于其他的数据节点权重;当网络恢复正常,在时延小于阈值情况下,权重逐步变大,为下次抖动提供冗余。本方案解决了传统的网络抖动的情况下立马切换数据节点甚至跨机房的数据节点后,时延增长所导致的任务堆积的问题。此外,根据访问数据节点是否成功以及访问数据节点的时延,实时调整该数据节点的权重,权衡了系统的负载,自选最优数据节点进行服务访问,自主缓冲切换健康的数据节点,提供了一个更准确、性能更优的切换运算决策。

此外,如图4所示,本发明还相应地提供了一种访问数据节点的系统,其包括读取模块101、访问模块102、判断模块103。

其中,读取模块101,用于读取可用节点队列中的权重最大的数据节点。

在本发明的一种实施例中,数据层以异地多点进行部署,其对应的数据节点分布在不同的地方。当服务器需要进行数据访问时,其会从与其建立连接关系的数据节点中,读取可用节点队列中的权重最大的数据节点进行数据访问,以获取所需的数据信息。

读取可用节点队列中的权重最大的数据节点进行访问,即选择当前可用的数据节点中最优的数据节点进行服务访问,其有利于避免更多的访问请求的堆积,降低服务的负载。

其中,优选地,本发明的实施例是基于数据连接池的基础上实现的。服务器在启动时,其会与数据层之间建立一定数量的池连接,并一直维持不少于此数目的池连接。也就是说,服务器会与数据层所对应的多个数据节点建立连接关系,所述基于连接关系与数据层所建立的连接的数量可根据实际的需要而进行实时动态的调整。客户端程序需要连接时,池程序会返回一个未使用的池连接并标记为忙。如果当前没有空闲连接,池驱动程序会新建一定数量的连接,新建连接的数据由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

同时,如图5,示出了本发明中一种访问数据节点的系统的另一种实施例。在这一实施例中,所述读取可用节点队列中的权重最大的数据节点之前,还包括接收模块100。其中,接收模块100,用于接收访问数据节点的请求。

在本发明中,用户在通过相关的客户端进行相关的数据访问请求的操作时,这些来自客户端的访问请求在服务器中汇集,服务器根据客户端的访问请求,访问数据层所对应的数据节点,并优先选择当前可用队列节点中的权重最大的数据节点进行数据访问,以更有效、更快速地获取相应的数据信息,并减少系统的负载及系统任务的拥塞。

此外,参见图6,其列出了本发明中一种访问数据节点的系统的又一种实施例。该实施例中,所述读取可用节点队列中权重最大的数据节点之前,还包括预设模块104。其中,预设模块104,用于预设可用节点队列中的数据节点的初始权重。

例如,当前的数据层其对应的可用节点队列中存在3个数据节点,分别位于广州、上海以及北京。相对于广州的服务器而言,其会优先访问本机房所在地域的数据节点,因此广州、上海及北京的数据节点的初始权重有所不同,分别预设为150、70、30。同理,相对于上海的服务器而言,广州、上海及北京的数据节点的初始权重可分别预设为100、210、80。可以理解的是,上述的举例,只是为了说明,针对不同地域的服务器访问数据节点的情形,不同的数据节点之间的权重的初始值是可以根据不同地域的服务器的实际需求进行配置,其并不能构成对本发明的限制。

所述数据节点的初始权重可根据实际的情况进行配置,一方面,有利于根据后期的运维工作、数据节点的放置以及服务器与数据节点之间的线路配置的动态调整;另一方面,也有利于根据当前的用户的请求的数据来源进行动态调整,从而提供性能更优、成本开销更低的数据节点及数据节点的切换方案。

所述数据节点的初始权重,在某种意义上,是权衡了服务器访问数据节点时的相对保留时间及整个系统负载而进行预设的。其是为了让服务器选择当前最优的数据节点进行访问或自主缓冲切换至健康的数据节点进行数据访问,以保证用户在进行业务访问的时候,能提供更低时延、更优性能的数据节点,避免任务拥塞。

因此,在本发明的更具体的方案中,所述预设模块104,包括:

预设单元,用于预设可用节点队列中的本地机房的数据节点的初始权重最大,按地域与线路质量预设可用节点队列中的远程机房的数据节点的初始权重。

例如,对于广州的服务器而言,其对应的数据层的可用节点队列当中存在4个数据节点,其中,包括位于广州的两个数据节点a和b,位于上海的数据节点c以及位于北京的数据节点d。在广州的服务器与广州、北京、上海的数据节点之间的线路质量大体一致的时候,不同地域之间的距离对数据访问的速度跟质量存在较大的影响。因此,相对于广州的服务器而言,广州的数据节点a和b的优先级会高于上海的数据节点c跟北京的数据节点d,从而广州的数据节点a和b的权重比上海的数据节点c跟北京的数据节点d高。而在服务器和数据节点处于同一地域时,线路的质量对数据访问的速度跟质量存在的影响更为明显。因此,相对于广州的服务器而言,广州的数据节点a和b的线路质量越好,越有利于广州的服务器进行访问。这种情形下,相对于广州的服务器而言,其所对应的可用节点队列中的数据节点a、b、c、d的初始权重可预设为200、150、110、65。

根据地域与线路质量,权衡了数据节点对于不同地域的服务器的优先级,有利于针对不同的客户端服务器,确定不同的数据节点之间的初始权重的优先级及相应的数值。使得不同的客户端服务器选择相对于自身而言的可用节点队列中的权重最大的数据节点进行访问,能时刻保证业务能访问更低时延、更高优先级的数据节点。

访问模块102,用于访问所述数据节点。

在服务器接收到来自客户端的访问请求之后,服务器会根据所述访问请求去访问数据节点获取相关的数据信息。首先,服务器会读取当前的可用节点队列当中权重最大的数据节点进行访问。可以理解的是,由于线路、网络质量等原因,服务器对数据节点的访问并不必然成功。例如,在当前的网络存在波动或网络异常的情况下,服务器也存在访问不成功的情形。在网络存在波动或网络异常等情形之下,服务器是否有必要切换其连接至当前的可用节点队列当中的其它数据节点,可以根据当前可用节点队列的数据节点的实时动态的权重进行决定,以获取更好的切换方案,避免系统任务的堆积。

判断模块103,用于判断访问是否成功,若否,减少可用节点队列中所述数据节点的权重;若是,判断连接所述数据节点的时延是否小于阈值,若是,增加可用节点队列中所述数据节点的权重,否则,可用节点队列中所述数据节点的权重不变。

在本发明的具体实施例中,对可用节点队列当中的数据节点的权重进行动态的调整,是根据服务器访问数据节点是否成功及服务器访问成功时的时延等综合判断,对当前可用节点队列当中的数据节点的权重进行实时的调整。

在服务器访问数据节点时,首先会判断服务器对数据节点的访问是否成功,进而判断成功后的连接时延是否满足预设的阈值,从而实现对所述数据节点的权重进行调整。

例如,相对于广州的服务器而言,可用节点队列中的数据节点a的初始权重是100。广州的服务器访问广州的数据节点a,访问不成功的话,可减少该数据节点a在可用节点队列中的权重为98;若广州的服务器成功访问数据节点a,则进一步判断访问数据节点a的时延是否超过了预先设置的阈值;如果时延小于预设的阈值,则可增加数据节点a在可用节点队列中的权重为102,如果时延大于预设的阈值,则可维持数据节点a在可用节点队列中的权重100不变。

可以理解的是,服务器对数据节点的访问是高速且频繁的,其在短时间内存在大量的访问,由于每一次对数据节点的访问都会调整该数据节点的权重,因此,数据节点的调整是实时且动态的。

其中,可用节点队列中所述数据节点的权重的调整,存在一个优选的方案,其可以在动态调整可用节点队列中的数据节点的权重时,保证一个更准确、更优化的决策方案。

在本发明的一种更具体的实施例中,所述判断模块103被配置为:

判断访问是否成功,若否,把可用节点队列中所述数据节点的权重减少2;若是,判断连接所述数据节点的时延是否小于1s,若是,确定所述数据节点的权重不大于初始权重的2倍,把可用节点队列中所述数据节点的权重增加1;否则,可用节点队列中所述数据节点的权重不变。

例如,相对于广州的服务器而言,可用节点队列中的数据节点a的初始权重是100。广州的服务器访问广州的数据节点a,访问不成功的话,则把该数据节点的权重a减少2,此时数据节点a的权重调整为98。在广州的服务器成功访问数据节点a的情形下,进一步判断访问数据节点a的时延。若所述时延为0.9s,小于预设的阈值1s,则进一步确定数据节点a当前的权重100不大于200后,把可用节点队列当中的数据节点a的权重增加1,从而把数据节点a的权重调整为101。若所述时延为2s,超过了预设的阈值1s,则维持所述数据节点a的权重为100不变。

具体地,所述减少可用节点队列中所述数据节点的权重之后,还包括:

第一确定模块,用于根据所述权重确定出所述数据节点为不可用节点;

第一删除模块,用于把所述数据节点从所述可用节点队列中删除,放入不可用节点队列中。

在本发明的实施例中,所述减少可用节点队列中所述数据节点的权重之后,还需要判断此时该所述数据节点是否还满足一定的条件,以继续存留在可用节点队列当中,以便服务器的下一次访问。当可用节点队列当中的数据节点的权重下降到一定的程度,说明服务器在一定的时间内访问该数据节点不成功或访问该数据节点的时延较大,进一步说明该数据节点出现了所在的通信线路出现异常或网络波动较大或网络异常等情形。这时,该数据节点的可用性和效率性就会降低到一定的程序,可能会对服务器的访问存在一定的影响,进而导致用户的访问请求无法得到及时的响应而导致系统任务的拥塞。因此,在这种情形之下,当根据所述权重确定出所述数据节点为不可用节点时,把所述数据节点从其所在的可用节点队列中删除,放入到不可用节点队列中,以待重新确定该数据节点是否为可用数据节点,或对该数据节点进行相应的维修处理。

具体地,所述第一确定模块,包括:

检测单元,用于检测当前可用节点队列当中的数据节点的权重是否低于所述数据节点的初始权重的1/2;

确定单元,用于若是,则确定所述数据节点为不可用节点。

在本发明的一种具体实施例中,确定一个可用节点队列当中的数据节点是否为不可用节点,需要将该数据节点当前的权重与该数据节点的初始权重的1/2进行比较。例如,一个可用节点队列中的数据节点的初始权重为100,该数据节点由于权重一直在减少,当前的权重为49。由于权重49低于该数据节点的初始权重的1/2,也就是50,所以确定该数据节点为不可用数据节点。

由于对于同一服务器而言,不同区域的数据节点的优先级所对应的权重存在一定的数值间隔。在某一地域的网络突然波动或存在异常时,不会立刻将该地域所对应的数据节点确定为不可用节点,其会存在一定的缓冲期,避免由于短时间的网络抖动期间而立刻切换至其它地域的数据节点,从而有更多的请求堆积,把服务负载验证拉高,导致出现压力洪灾。此外,将通过对可用节点队列中的数据节点的可用性进行检测,有利于保证可用节点队列中的数据节点的高效性,能及时将存在问题的数据节点从可用节点队列删除,进而在服务器访问可用节点队列当中的数据节点时,保证权重最大的数据节点能及时响应于服务器的访问请求。

对于那些放置于不可用节点队列当中的数据节点,后期还需要进一步检测其是否可用。

具体地,还包括:

建立模块,用于建立独立线程对不可用节点队列中的数据节点进行有效性检测。

可以理解的是,如果只是网络的短期抖动,导致了服务器在短时间内访问数据节点不成功或时延过大,导致该数据节点的权重低于一定的预设值,从而被确定为不可用节点,进而被从可用节点队列中删除。当网络重新稳定的时候,该数据节点的性能便会恢复到网络波动之前。网络波动结束之后,该数据节点的存在会对本机房或其它区域的服务器访问可用节点队列当中的数据节点产生积极的影响。换句话说,对不可用节点队列当中的数据节点进行检测,其当前是否有效,是对线路资源的有效利用,以确定高效、可用的数据节点能及时响应于来自服务器的大量请求。在本发明中,建立独立线程对不可用节点队列中的数据节点进行有效性检测,不会占用系统对业务请求的资源,从而不影响到来自服务器的业务请求。

具体地,所述建立独立线程对不可用节点队列中的数据节点进行有效性检测之后,还包括:

第二确定模块,用于确定所述不可用节点队列中的数据节点满足预设的有效性的时延要求;

第二删除模块,用于则将所述数据节点从不可用节点队列中删除,放入可用节点队列中。

当然,对于不可用节点队列中的数据节点进行有效性的检测,当所述数据节点能满足系统预设的有效性的要求之后,说明该数据节点是可用的,能及时响应于服务器的请求。这时,则应当将该数据节点从不可用节点队列中删除,放入到当前的可用节点队列中去。这有利于提高对数据节点所对应的线路资源的利用率。

例如,如果系统所预设的有效性的时延要求是在1分钟内10次响应于来自服务器的访问请求,并且每次时延不得高于1s。当建立的线程定时或不定时检测不可用节点队列中的数据节点,当存在数据节点满足所述预设的有效性的时延要求时,则将该数据节点从不可用节点队列中删除,放入可用节点队列中。

综上,本发明中的访问数据节点的系统,访问当前可用节点队列中权重最大的数据节点,根据访问是否成功与时延是否小于阈值,动态调整该数据节点的权重,该调整为缓和进行,若发生网络抖动,导致当前一次或几次访问不成功,权重逐步变小,该数据节点的权重仍是最大值,不至于马上切换数据节点;除非发生相对较长时间的网络故障,导致该数据节点的权重多次减小后,从而小于其他的数据节点权重;当网络恢复正常,在时延小于阈值情况下,权重逐步变大,为下次抖动提供冗余。本方案解决了传统的网络抖动的情况下立马切换数据节点甚至跨机房的数据节点后,时延增长所导致的任务堆积的问题。此外,根据访问数据节点是否成功以及访问数据节点的时延,实时调整该数据节点的权重,权衡了系统的负载,自选最优数据节点进行服务访问,自主缓冲切换健康的数据节点,提供了一个更准确、性能更优的切换运算决策。

以上对本发明所提供的一种访问数据节点的方法及系统进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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