无服务器计算环境中基于一致性哈希的缓存包调度优化算法

文档序号:26584780发布日期:2021-09-10 18:46阅读:92来源:国知局
无服务器计算环境中基于一致性哈希的缓存包调度优化算法

1.本发明涉及云计算技术领域,具体地指一种无服务器计算环境中基于一致性哈希的缓存包调度优化算法。
技术背景
2.云计算是与信息技术、软件、互联网相关的一种服务,这种计算资源共享池叫做“云”,云计算把许多计算资源集合起来,通过软件实现自动化管理,只需要很少的人参与就能让资源被快速提供。云计算的核心概念就是以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。通常,它的服务类型分为三类,即基础设施即服务(iaas)、平台即服务(paas)和软件即服务(saas)。
3.云计算发展到如今,轻“服务器”,重“服务”的趋势愈发明显。如今faas(功能即服务),或称作无服务器计算是iaas(基础设施即服务)演进的下一个阶段。它将底层基础架构从开发人员中分离出来,虚拟化了运行时(虚拟机的一种,一般指进程级别的虚拟机)和运营管理,使得无服务器计算的用户无需关心程序运行的服务器、虚拟机和底层基础架构,而可以只专注于应用程序本身。
4.无服务器计算托管服务提供商会实时为用户分配充足的资源,而不是让用户预先为专用的服务器或容量付费。无服务器计算并不是字面上的不需要服务器,而是立足于云基础设施之上建立新的抽象层,仅使用完成任务所需的非常精确的计算资源来执行开发人员编写的代码,不多也不少。当触发代码的预定义事件发生时,无服务器平台执行任务。最终用户不需要告诉无服务器提供商事件或者函数将发生多少次。函数每执行一次,客户就付一些钱。有些人认为函数即服务(功能即服务)或者事件驱动的计算是更好的名称。从基础架构角度看,它有不同的抽象层,而开发人员可以和这些抽象层进行互动。有裸机、虚拟机和容器。对于某些工作负载,服务商要抽象出所有的管理,以便开发者可以执行代码,而不用担心服务器的基础架构或者管理。
5.在无服务器计算平台中快速部署和执行无服务器函数对于微服务架构来说至关重要,但是,在大型微服务项目中依赖大型软件包或库的函数过于臃肿,启动速度缓慢。一种优化方法是在工作节点缓存这些软件包取代之前将函数和包捆绑在一起的方式,但是现有的无服务器平台的调度程序都是简单的负载均衡器,它们无法快速准确定位到之前缓存的包,导致无服务器函数启动效率非常低。部分无服务器计算平台在缓存软件包时会选择哈希算法去实现均匀的分配。使用传统的哈希算法当节点数量发生变化时,所有缓存的位置都会发生变化,这样就造成所有缓存在一定时间是失效的。


技术实现要素:

6.本发明的目的在于克服现有技术的不足,提出一种无服务器计算环境中基于一致性哈希的缓存包调度优化算法,选用一致性哈希算法取代传统的哈希算法,并结合负载均
衡算法,同时在一致性哈希算法中使用虚拟节点对算法进行优化,防止一致性哈希算法中因节点过少导致哈希环偏斜最终引发节点雪崩的问题。
7.为实现上述目的,本发明所设计的无服务器计算环境中基于一致性哈希的缓存包调度优化算法,其特殊之处在于,所述算法包括如下步骤:
8.1)获取无服务器计算环境中所有的工作进程w以及每个工作进程w对应的负载阈值t,w={w1,

,w
n
},t={t1,

,t
n
};
9.2)遍历运行无服务器计算函数所需的所有软件包,找出所需软件包中最大的软件包记为p;
10.3)使用映射函数f(p)=<w1,w2>,通过无服务器函数所需的最大软件包p使用一致性哈希算法计算出两个亲和的工作进程w1,w2;
11.4)选择两个工作进程中负载最小的进程记为k;
12.5)判断所述最小工作进程k的负载load(w
k
)是否超过阈值负载t
k
:若未超过,则将所述无服务器计算函数分配给工作进程k;若超过所述负载阈值t
k
,则还原工作进程k,并将所述无服务器计算函数转发给当前无服务器计算环境中负载最少的工作进程w
min

13.优选地,所述步骤3)的具体步骤为:
14.3.1)使用一致性哈希算法,通过传入当前无服务器计算函数所需最大软件包的id计算出第一个亲和的工作进程w1。
15.3.2)使用一致性哈希算法,通过传入当前无服务器计算函数所需最大软件包的id以及要添加到包id的值additive,计算出第二个亲和的工作进程w2。
16.优选地,所述步骤3)中所述一致性哈希算法的哈希函数为murmur哈希。使用murmur哈希作为一致性哈希算法的哈希函数是因为murmur哈希是一种非加密哈希函数,适用于一般的基于哈希的查找。相比于其他的加密哈希函数,非加密哈希函数查找速度更快,适用于不在意哈希碰撞或数据量小的场景。与其他主流的哈希函数相比,对于规律性较强的键,murmur哈希的随机分布特征表现更加良好。murmur哈希的选择相比于其它哈希函数有效地提升了无服务器计算环境中一致性哈希算法的效率。
17.优选地,所述步骤3.2)中计算软件包p对应的第二个亲和工作进程时需要将参数additive与最大软件包的id相加再使用哈希函数计算对应的哈希值;所述参数additive的最小取值为1,最大取值为无服务器计算函数所需的所有软件包id的最大值。
18.优选地,所述步骤3.1)中的一致性哈希算法具体步骤如下:
19.3.1.1)设计公共哈希函数及哈希环:设计哈希函数hash(key),要求计算出的哈希值取值范围为[0,2
32
);
[0020]
3.1.2)使用所述哈希函数hash(key)计算出每个工作进程w对应的哈希值,并映射至范围为[0,2
32
)的哈希环上;
[0021]
3.1.3)使用所述哈希函数hash(key)计算当前无服务器计算函数所需最大软件包的id对应的哈希值,并映射至哈希环上;
[0022]
3.1.4)从软件包id映射到的位置顺时针查找,查找到的第一个工作进程即为第一个亲和的工作进程w1。若查找范围超过2
32

1,仍未找到对应的工作进程,则选择哈希环起始位置后的第一个工作进程。
[0023]
优选地,所述步骤2)的具体步骤为:定义变量max,初始化为0;定义hashmap<
integer,double>用来存储当前无服务器计算函数所需要的所有软件包,key值为软件包的id,value值为软件包的大小;遍历hashmap中的所有数据,若当前数据的value值大于max的值,则将当前数据的value值赋值给max,并将当前数据的key值赋值给p;遍历结束后当前无服务器函数所需最大软件包id即为p。
[0024]
优选地,所述步骤5)当前无服务器计算环境中负载最少的工作进程w
min
的设定过程为:定义变量min,初始化为无服务器环境中第一个工作进程的负载load(w1);遍历当前无服务器计算环境下所有工作所有的工作进程w,若当前遍历到的工作进程w
i
的负载load(w
i
)<min,则记w
min
为当前的工作进程w
i
并将load(w
i
)赋值给min;否则继续遍历第(i+1)个工作进程,直到结束为止,i为自然数。
[0025]
本发明提出的无服务器计算环境中基于一致性哈希的缓存包调度优化算法的有益效果为:
[0026]
1、本发明结合传统的哈希算法以及无服务器计算环境的特点,将一致性哈希算法及负载均衡算法相结合,有效地提升了无服务器计算环境下软件缓存包调度的效率,同时有效避免了在调度过程中过度使用同一个工作进程造成工作进程负载过大的问题。
[0027]
2、本发明在实现各工作节点负载均衡的前提下有效地提升了无服务器函数的启动速度同时增加了无服务器平台的资源使用率。
[0028]
3、本发明在无服务器计算环境下软件缓存包调度的过程中寻找亲和的工作进程,同时主动避免工作进程过载,利用一致性哈希及负载均衡技术,将任务映射到两个合适的工作进程中负载最少的工作进程。
附图说明
[0029]
图1为本发明无服务器计算环境中基于一致性哈希的缓存包调度优化算法的流程图。
[0030]
图2为一致性哈希算法原理的示意图。
具体实施方式
[0031]
以下结合附图和具体实施例对本发明作进一步的详细描述。
[0032]
本发明所提出的无服务器计算环境中基于一致性哈希的缓存包调度优化算法,如图1所述,算法的具体步骤如下:
[0033]
1)获取无服务器计算环境中所有的工作进程w(w={w1,

,w
n
}),和每个工作进程的负载阈值t(t={t1,

,t
n
})。
[0034]
2)遍历运行无服务器计算函数所需的所有软件包,找出所需软件包中最大的软件包记为p;
[0035]
具体步骤为:定义变量max,初始化为0;定义hashmap<integer,double>用来存储当前无服务器计算函数所需要的所有软件包,key值为软件包的id,value值为软件包的大小;遍历hashmap中的所有数据,若当前数据的value值大于max的值,则将当前数据的value值赋值给max,并将当前数据的key值赋值给p;遍历结束后当前无服务器函数所需最大软件包id即为p。
[0036]
3)使用映射函数f(p)=<w1,w2>,通过无服务器函数所需的最大软件包p使用一致
性哈希算法计算出两个亲和的工作进程w1,w2;
[0037]
具体步骤如下:
[0038]
3.1)使用一致性哈希算法,通过传入当前无服务器计算函数所需最大软件包的id计算出第一个亲和的工作进程w1。
[0039]
3.1.1)设计公共哈希函数及哈希环:设计哈希函数hash(key),要求计算出的哈希值取值范围为[0,2
32
);
[0040]
3.1.2)使用所述哈希函数hash(key)计算出每个工作进程w对应的哈希值,并映射至范围为[0,2
32
)的哈希环上;
[0041]
3.1.3)使用所述哈希函数hash(key)计算当前无服务器计算函数所需最大软件包的id对应的哈希值,并映射至哈希环上;
[0042]
3.1.4)从软件包id映射到的位置顺时针查找,查找到的第一个工作进程即为第一个亲和的工作进程w1。若查找范围超过2
32

1,仍未找到对应的工作进程,则选择哈希环起始位置后的第一个工作进程。
[0043]
3.2)使用一致性哈希算法,通过传入当前无服务器计算函数所需最大软件包的id以及要添加到包id的值additive,计算出第二个亲和的工作进程w2。
[0044]
计算软件包p对应的第二个亲和工作进程时需要将参数additive与最大软件包的id相加再使用哈希函数计算对应的哈希值;所述参数additive的最小取值为1,最大取值为无服务器计算函数所需的所有软件包id的最大值。
[0045]
4)选择两个工作进程中负载最小的进程记为k;
[0046]
5)判断所述最小工作进程k的负载load(w
k
)是否超过阈值负载t
k
:若未超过,则将所述无服务器计算函数分配给工作进程k;若超过所述负载阈值t
k
,则还原工作进程k,并将所述无服务器计算函数转发给当前无服务器计算环境中负载最少的工作进程w
min

[0047]
当前无服务器计算环境中负载最少的工作进程w
min
的设定过程为:定义变量min,初始化为无服务器环境中第一个工作进程的负载load(w1);遍历当前无服务器计算环境下所有工作所有的工作进程w,若当前遍历到的工作进程w
i
的负载load(w
i
)<min,则记w
min
为当前的工作进程w
i
并将load(w
i
)赋值给min;否则继续遍历第(i+1)个工作进程,直到结束为止,i为自然数。
[0048]
本发明提出的无服务器计算环境中基于一致性哈希的缓存包调度优化算法,是以传统的哈希算法及负载均衡方法为基础并结合无服务器计算环境的特性而提出来的,
[0049]
如图2所示,实现一致性哈希算法,首先需要设计哈希函数hash(key),要求计算出的哈希值的取值范围为[0,2
32
)。其次需要按照设计好的哈希函数计算出无服务器计算环境中每个工作进程对应的哈希值,并将其映射至范围为[0,2
32
)的哈希环上。在使用一致性哈希算法计算某个包p对应的工作进程时,应先使用哈希函数计算p的id所对应的哈希值hash(p),随后将其映射至哈希环上。从hash(p)映射到的位置顺时针查找,找到的第一个工作进程即为所求。若查找范围超过2
32

1,仍未找到对应的工作进程,则选择哈希环起始位置后的第一个工作进程。
[0050]
下面详述本发明的研究过程:
[0051]
问题分析和描述:
[0052]
在无服务器计算平台中快速部署和执行无服务器函数对于微服务架构来说是至
关重要的。但是对于目前许多的大型项目来说,它们依赖于大型软件包或者软件库的函数过于臃肿,这样就导致这些无服务器函数的启动速度非常缓慢,从而浪费许多不必要的时间。为了解决这类问题,我们可以在对应的工作节点缓存软件包,在选择工作节点的过程中我们可以使用哈希算法进行对应的分配。但是传统的哈希算法都是直接将对应的哈希值和节点的数量进行取模运算,但是在现如今的分布式集群中,对或某个节点的添加和删除,或者节点发生故障时自动脱离集群这些操作是分布式集群管理中最基本的功能,若采取常用的哈希算法,在节点添加或删除后,很多原有的数据就无法找到,这样严重违反了单调性原则。因此会引入一致性哈希算法来解决这个问题。本发明设计了一种无服务器计算环境下基于一致性哈希的缓存包调度优化算法,该算法结合传统的一致哈希算法以及负载均衡算法,可以将无服务器函数所需要的软件包缓存在对应的工作节点,并根据工作节点的负载阈值进行相应的调度,有效地提升了无服务器计算环境中微服务架构项目的云函数启动速度,节约了无服务器计算环境下的调度成本。
[0053]
无服务器计算环境中基于一致性哈希的缓存包调度优化算法分析:
[0054]
调度模型描述:
[0055]
本发明提出的无服务器计算环境下基于一致性哈希的缓存包调度优化方法模型由2部分组成:(1)一致性哈希算法,通过设计好的哈希函数及哈希环,通过传入无服务器计算函数所需最大软件包id即可计算出对应亲和的工作进程。(2)负载均衡算法,将使用一致性哈希算法得出的两个工作进程进行比较,选择其中负载较小的一个工作进程与其对应的负载阈值进行比较,若目标工作进程的负载小于其对应的负载阈值则选用此工作进程。若超过其负载阈值,则还原当前工作进程并将请求转发给当前无服务器计算环境中负载最少的工作进程。
[0056]
哈希函数的选择:
[0057]
在一致性哈希算法中,哈希函数是其中的重要组成部分之一,算法中需要使用哈希函数计算各工作进程及软件包对应的哈希值,哈希函数的选择决定了算法的效率。经过对各种哈希函数的对比,本发明决定使用murmur哈希作为一致性哈希算法的哈希函数。murmur哈希是一种非加密哈希函数,适用于一般的基于哈希的查找。相比于其他的加密哈希函数,非加密哈希函数查找速度更快,适用于不在意哈希碰撞或数据量小的场景。与其他主流的哈希函数相比,对于规律性较强的键,murmur哈希的随机分布特征表现更加良好。murmur哈希的选择相比于其它哈希函数有效地提升了无服务器计算环境中一致性哈希算法的效率。
[0058]
一致性哈希算法中虚拟节点的引入:
[0059]
对于一致性哈希算法,若工作进程较少,当各个工作进程映射至哈希环上时,很可能出现哈希环偏斜的情况,即各工作进程节点在哈希环上分布极度不均匀。当哈希环偏斜后,缓存包对应的无服务器计算函数往往会极度不均衡的分配给各个工作进程,当某个节点宕机下线工作进程失效,它所存储的数据按照原来的计算方法就会被全部存储至下一个工作进程,这样单一节点突发压力会导致节点雪崩的问题。若想解决此问题,让这些工作进程能够尽量多的、均匀的分布在哈希环上,就需要加入对应的虚拟节点。将现有的工作进程物理节点通过虚拟的方法复制出来,这些由实际节点虚拟复制而来的节点被称为虚拟节点。一个实际工作进程节点可以复制多个虚拟节点并以一定的规律映射至哈希环上,当我
们再次顺时针查找时,若找到的第一个节点为虚拟节点,则选择此虚拟节点对应的实际节点作为目标工作进程。同时当某个节点宕机下线时,它所存储的数据会被均匀分配给其它各个节点,避免单一节点突发压力而导致的节点雪崩问题。虚拟节点概念的引入有效的解决了因工作进程较少而导致的哈希环偏斜、节点雪崩的问题。
[0060]
算法使用的相关参数定义:
[0061]
(1)最大软件包p:定义一个max变量,将其初始化为0。定义一个hashmap<integer,double>,用来存储当前无服务器计算函数所需要的所有软件包,key值为软件包的id,value值为软件包的大小。遍历hashmap中的所有数据,若当前数据的value值大于max的值,则将当前数据的value值赋值给max,并将当前数据的key值赋值给p。遍历结束后当前无服务器函数所需最大软件包id即为p。
[0062]
(2)添加到软件包p上的参数additive:在算法中计算软件包p对应的第二个亲和工作进程时需要将参数additive与最大软件包的id相加再使用哈希函数计算对应的哈希值。additive的最小取值为1,最大取值为无服务器函数所需的所有软件包id的最大值。
[0063]
(3)负载最小的工作进程w
min
:定义变量min,将其初始化为无服务器环境中第一个工作进程的负载load(w1)。遍历当前无服务器计算环境下所有工作所有的工作进程w(w={w1,

,w
n
}),若当前遍历到的工作进程w
i
的负载load(w
i
)<min,则记w
min
为当前的工作进程w
i
并将load(w
i
)赋值给min,否则继续遍历第(i+1)个工作进程,直到结束为止。
[0064]
调度方法的伪代码描述:
[0065]
(1)获取无服务器计算环境下所有的工作进程w(w={w1,

,w
n
}),定义各个工作进程对应的负载阈值t(t={t1,

,t
n
})
[0066]
(2)for可调度软件包package
i
中所有软件包
[0067]
(3)将所有软件包中最大包的id记为p。
[0068]
(4)end for
[0069]
(5)定义哈希函数hash(key)。
[0070]
(6)for无服务器计算环境下所有的工作进程w
i

[0071]
(7)使用定义的哈希函数计算各个进程的哈希值hash(w
i
)。
[0072]
(8)end for
[0073]
(9)根据计算好的哈希值对w中的各个工作进程排序,sort(w)。
[0074]
(10)使用哈希函数计算最大软件包p对应哈希值hash(p)。
[0075]
(11)定义参数additive将其与p相加记为p1。
[0076]
(12)使用哈希函数计算最大缓存包p1对应哈希值hash(p1)。
[0077]
(13)for无服务器计算环境下所有的工作进程w。
[0078]
(14)if p的哈希值hash(p)<hash(w
i
),
[0079]
(15)将w
i
记为第一个合适的工作进程w1。
[0080]
(16)end if
[0081]
(17)if p的哈希值hash(p1)<hash(w
i
),
[0082]
(18)将w
i
记为第一个合适的工作进程w2。
[0083]
(19)end if
[0084]
(20)end for
[0085]
(21)if两个工作进程的负载load(w1)<load(w2)。
[0086]
(22)将w1记为k。
[0087]
(23)else
[0088]
(24)将w2记为k。
[0089]
(25)end if
[0090]
(26)if工作进程k的负载load(w
k
)<t
k
[0091]
(27)return工作进程w
k

[0092]
(28)else
[0093]
(29)return工作进程中负载最少的工作进程w
min

[0094]
(30)end if
[0095]
由算法的伪代码描述可以得到,第1行获取无服务环境中的所有工作进程及定义各个工作进程对应的负载阈值。第2到4行遍历所有可调度的软件缓存包,找出最大的软件包。第5到9行初始化一致哈希算法,定义哈希函数及初始化哈希环。第10到20行根据一致哈希算法计算得到两个亲和的工作进程。第21到25行找到两个工作进程中负载较小的工作进程。第26行到30行判断选出的工作进程是否超过其负载阈值,若未超过,则选用此工作进程,若超过,则将请求转发给当前环境下负载最少的工作进程。整个算法寻找当前最大软件缓存包,通过一致性哈希算法寻找相匹配的工作进程,并通过负载均衡算法调节各个工作进程的负载,防止某个工作进程因过度使用而造成长期超过负载阈值的情况。从而保证在满足负载均衡的情况下,最大化无服务器环境中软件缓存包调度效率。
[0096]
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
[0097]
最后需要说明的是,以上具体实施方式仅用以说明本专利技术方案而非限制,尽管参照较佳实施例对本专利进行了详细说明,本领域的普通技术人员应当理解,可以对本专利的技术方案进行修改或者等同替换,而不脱离本专利技术方案的精神和范围,其均应涵盖在本专利的权利要求范围当中。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1