数据处理方法、数据处理装置、存储介质和电子设备与流程

文档序号:24652437发布日期:2021-04-13 20:21阅读:83来源:国知局
数据处理方法、数据处理装置、存储介质和电子设备与流程

1.本发明涉及计算机技术领域,具体涉及一种数据处理方法、数据处理装置、存储介质和电子设备。


背景技术:

2.随着计算机技术的高速发展,数据的规模及数据访问量也在不断增长。为了承接日益增长的数据访问量,越来越多的技术人员选择通过部署数据库集群的方式来分担单一数据库的访问压力。但数据库之间容易产生负载不均衡的状况,因此对数据库集群中的至少一个数据库造成较大的访问压力。


技术实现要素:

3.有鉴于此,本发明实施例的目的在于提供一种数据处理方法、数据处理装置、存储介质和电子设备,用于在数据库集群中各数据库之间均衡负载,从而有效降低某一数据库的访问压力。
4.根据本发明实施例的第一方面,提供一种数据处理方法,所述方法包括:
5.确定目标数据库集群中各槽位的槽位信息,所述槽位为数据存储范围;
6.根据各所述槽位信息确定对应槽位的评估值;
7.根据各所述槽位的所述评估值进行槽位迁移,以平衡至少一个槽位的负载。
8.优选地,所述槽位信息包括各槽位的槽位请求数量、槽位内存使用量以及对应节点的资源消耗指标。
9.优选地,所述确定目标数据库集群中各槽位的槽位信息包括:
10.获取接入层接收到的数据查询指令;
11.确定各数据查询指令对应的槽位;
12.对于各槽位,将对应的各所述数据查询指令的数量作为所述槽位请求数量。
13.优选地,所述确定目标数据库集群中各槽位的槽位信息包括:
14.获取所述目标数据库集群的内存镜像文件;
15.对所述内存镜像文件进行分析,确定所述内存镜像文件中的键值对数据;
16.确定各所述键值对数据对应的槽位;
17.对于各槽位,将对应的所述键值对数据的内存使用量的和作为所述槽位内存使用量。
18.优选地,所述资源消耗指标包括对应节点的指令响应耗时、节点请求数量、节点内存使用量以及节点处理器使用率;
19.所述确定目标数据库集群中各槽位的槽位信息包括:
20.通过预定分布式系统监控器获取所述指令响应耗时、所述节点请求数量、所述节点内存使用量以及所述节点处理器使用率。
21.优选地,所述根据各所述槽位信息确定对应槽位的评估值包括:
22.分别计算各所述槽位信息的加权和作为对应槽点的所述所述评估值。
23.优选地,所述根据各所述槽位的所述评估值进行槽位迁移包括:
24.以迭代方式根据各所述评估值确定待迁移槽位以及目标槽位,并将所述待迁移槽位迁移至所述目标槽位,直至满足预定均衡条件,所述待迁移槽位为所述评估值满足第一条件的槽位,所述目标槽位为所述评估值满足第二条件的槽位。
25.根据本发明实施例的第二方面,提供一种数据处理装置,所述装置包括:
26.信息确定单元,用于确定目标数据库集群中各槽位的槽位信息,所述槽位为数据存储范围;
27.评估值确定单元,用于根据各所述槽位信息确定对应槽位的评估值;
28.槽位迁移单元,用于根据各所述槽位的所述评估值进行槽位迁移,以平衡至少一个槽位的负载。
29.根据本发明实施例的第三方面,提供一种计算机可读存储介质,其上存储计算机程序指令,其中,所述计算机程序指令在被处理器执行时实现如第一方面中任一项所述的方法。
30.根据本发明实施例的第四方面,提供一种电子设备,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面中任一项所述的方法。
31.本发明实施例确定目标数据库中作为数据存储范围的槽位的槽位信息,并分别根据各槽位的槽位信息确定各槽位的评估值,从而根据各槽位的评估值进行槽位迁移,以平衡至少一个槽位的负载。槽位之间的负载均衡可以使得数据库集群中的各节点负载均衡,因此本发明实施例可以在数据库集群中各数据库之间均衡负载,从而有效降低某一数据库的访问压力。
附图说明
32.通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
33.图1是本发明第一实施例的数据处理方法的流程图;
34.图2是本发明第一实施例的数据处理方法的示意图;
35.图3是本发明第二实施例的数据处理装置的示意图;
36.图4是本发明第三实施例的电子设备的示意图。
具体实施方式
37.以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
38.此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
39.除非上下文明确要求,否则在说明书的“包括”、“包含”等类似词语应当解释为包
含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
40.在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
41.为了承接日益增长的数据访问量,越来越多的技术人员选择通过部署数据库集群的方式来分担单一数据库的访问压力。数据库集群中具有多个数据库,因此对数据的存储能力也显著强于单一数据库的存储能力。以redis集群为例,redis集群包括多个节点,每个节点对应于一个主数据库或者从数据库。在redis集群中,各节点存储的数据可以被映射到不同的槽位上,且各节点可以对应于不同数量的槽位。
42.槽位(slot)也即数据存储范围,并且在redis集群内部添加或删除节点时,只需要对槽位进行迁移,无需在停止redis服务后再增加或删除节点,提升了redis集群的稳定性。
43.redis集群的槽位数量通常为16384。redis集群中的redis服务器在接收到用户端发送的数据查询指令后,可以对数据查询指令进行解析,确定数据查询指令中的key(也即索引),然后确定数据查询指令的key所对应的槽位,具体可以通过crc(cyclic redundancy check,循环冗余校验)算法,例如crc

8算法、crc

16算法等确定key所对应的槽位,从而通过key所对应的槽位获取数据查询指令对应的查询结果(也即,value)。
44.但现有的redis集群并不支持提供各槽位的槽位信息,因此在某一个槽位出现负载过重(也即,访问压力过大)等异常状况时,redis服务器无法及时感知到,且服务器也无法准确定位出现异常状况的槽位,因此也无法较为准确地进行槽位迁移,这会加重出现异常状况的槽位所对应的数据库的访问压力。
45.图1是本发明第一实施例的数据处理方法的流程图。如图1所示,本实施例的方法包括如下步骤:
46.步骤s100,确定目标数据库集群中各槽位的槽位信息。
47.在本实施例中,槽位信息用于衡量各槽位的负载情况,具体可以包括各槽位的槽位请求数量、槽位内存使用量以及对应节点的资源消耗指标。在本步骤中,对于不同的槽位信息,服务器可以通过不同的方式确定。
48.(一)槽位信息为槽位请求数量。服务器可以获取接入层接收到的数据查询指令,并确定各数据查询指令对应的槽位,对于各槽位,服务器可以分别将各槽位对应的数据查询指令的数量作为该槽位的槽位请求数量。接入层是指网络中直接面向用户连接获访问的部分,在本实施例中具体可以为redis接入层客户端。用户端在向接入层发送get指令、set指令等数据查询指令时,服务器可以获取到数据查询指令,并确定数据查询指令中的key,然后根据crc算法确定key对应的crc编码,并根据crc编码确定key对应的槽位,从而根据对应的槽位获取数据查询指令对应的value。
49.crc算法可以纠正信息传输过程中的错误,并可以在极短的时间内完成数据校验码的计算,迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。
50.crc16算法为最常见的crc算法,因此本实施例选择通过crc16算法确定数据查询指令对应的槽位。crc16算法的计算过程如下:(1)预设16位寄存器用于存储十六进制ffff(全部为1),该16位的寄存器也即crc寄存器;(2)将数据帧中第一个字节的8位与crc寄存器
中的低字节进行异或运算,并将运算结果存储在crc寄存器中;(3)将crc寄存器向右移一位,并在最高位填充数字0,然后对最低位进行检测;(4)若最低位为0,则重复(3);若最低位为1,则将crc寄存器与预设值(0a001h)进行异或运算;(5)重复(3)和(4)直至对crc寄存器进行八次移位;(6)重复(2)

(5)直至所有字节全部处理结束,得到数据帧的crc编码。其中,寄存器用于存储二进制代码;数据帧也即数据链路层的协议数据单元,在本实施例中相当于key。
51.例如,数据查询指令的key为7e000560313233,服务器通过crc16算法(也即上述运算步骤)可以确定key对应的二进制crc编码为1011110101001000。
52.在确定key对应的crc编码后,服务器可以计算crc编码与槽位数量的余数,从而确定数据查询指令对应的槽位。例如,数据查询指令的key对应的crc编码为1011110101001000,redis集群中的槽位数量为16384,服务器可以将key对应的二进制crc编码转化为十进制crc编码,也即48456,并确定十进制crc编码除以槽位数量的余数为15688,也就是说,在第一个槽位为0时,可以将第15689个槽位确定为数据查询指令对应的槽位。
53.对于每个槽位,服务器可以确定各槽位对应的数据查询指令的数量,并将数据查询指令数量作为该槽位的槽位请求数量。
54.(二)槽位信息为槽位内存使用量。服务器可以通过dumptools(转存工具)建立与redis集群中各节点的长连接,并将各节点的内存镜像文件转存到本地。因此服务器可以对转存到本地的内存镜像文件进行分析,确定内存镜像文件中的键值对(key

value)数据,并确定各键值对数据对应的槽位。内存镜像文件同样会记录各键值对数据的内存使用量,因此服务器可以根据内存镜像文件分别将各节点对应的键值对数据的内存使用量的和作为该槽位的槽位内存使用量。
55.与确定槽位请求数量的方式相似,服务器同样可以确定各键值对中的key,然后根据crc算法确定key对应的crc编码,并根据crc编码确定key对应的槽位,从而确定各槽位的槽位内存使用量。
56.(三)槽位信息为对应节点的资源消耗指标。资源消耗指标可以包括对应节点的指令响应耗时、节点请求数量、节点内存使用量以及节点处理器使用率。其中,指令响应耗时也即各节点响应数据查询指令的耗时的平均值,节点处理器使用率也即节点的cpu(central processing unit,中央处理器)使用率。
57.在本实施例中,服务器内部可以预先部署预定分布式系统监控器,并通过预定分布式系统监控器获取各节点的指令响应耗时、节点请求数量、节点内存使用量以及节点处理器使用率。
58.本实施例的预定分布式系统监控器可以为zabbix。zabbix可以监视各种网络参数,保证服务器系统的安全运行。zabbix由两部分构成,包括zabbix server(zabbix服务器)和zabbix agent(zabbix代理),其中zabbix server被部署在服务器内部,使得可以通过部署在redis集群中各节点的zabbix agent等方法提供对各节点的监视。
59.步骤s200,根据各槽位信息确定对应槽位的评估值。
60.在本步骤中,服务器可以分别计算各槽位信息的加权和作为对应槽点的评估值。
61.可选地,服务器可以获取各槽位的槽位信息,并根据预先设置的、各项信息的权重
确定各槽位信息的加权和,并将计算得到的加权和作为对应槽位在相同周期内的评估值。
62.例如,槽位s1的槽位信息包括槽位s1的槽位请求数量、槽位内存使用量以及对应节点的资源消耗指标,其中槽位请求数量为100,内存使用量为0.2%,资源消耗指标中对应节点的指令响应耗时为3ms,节点请求数量为1500,节点内存使用量为5%,节点处理器使用率为3%,则服务器可以获取上述信息中各项信息对应的权重,并计算上述信息的加权和,从而将加权和确定为槽位s1的评估值。
63.可选地,服务器也可以获取各槽位在包括预定数量个周期内的槽位信息,然后计算同一信息在不同周期内的加权和作为对应槽位的槽位信息。
64.例如,预定数量为5,槽位s2在不同周期内的槽位请求数量为300,350,480,630和1210,则服务器可以获取各周期内槽位请求数量对应的权重,并计算不同周期的槽位请求数量的加权和,从而将加权和确定为槽位s2的评估值。
65.步骤s300,根据各槽位的评估值进行槽位迁移,以平衡至少一个槽位的负载。
66.在本步骤中,服务器可以以迭代方式根据各槽位的评估值确定待迁移槽位以及目标槽位,并将待迁移槽位迁移至目标槽位,直至满足预定均衡条件。其中,待迁移槽位可以为评估值满足第一条件的槽位,目标槽位可以为评估值满足第二条件的槽位,预定均衡条件可以为各槽位的槽位请求数量、槽位内存使用量以及对应节点的指令响应耗时、节点请求数量、节点内存使用量和节点处理器使用率中的至少部分信息的差异值小于第一阈值等。第一条件可以被设置为评估值小于(或等于)第二阈值且排序在最小的前n(n为大于等于1的预定整数)位,第二条件可以被设置为评估值大于(或等于)第三阈值且排序在最大的前m(m为大于等于1的预定整数)位。
67.在确定待迁移槽位以及目标槽位后,服务器可以向目标槽位所在的节点发送cluster setslot importing指令,将目标槽位的状态变更为importing(导入),并向待迁移槽位所在的节点发送cluster setslot migrating指令,将待迁移槽位的状态变更为migrating(迁移),然后控制待迁移槽位所在的节点执行cluster getkeysinslot指令,获取待迁移槽位中的key值数据,并控制待迁移槽位所在的节点将获取到的key值通过流水线(pipeline)机制批量迁移到目标节点,直至将待迁移槽位中的key值数据全部迁移到目标节点,以达到槽位迁移的目的。
68.容易理解,本实施例的方法可以以预定周期进行,也就是说,在每个周期内,服务器均可以执行一次步骤s100

步骤s300。由此,服务器可以以预定周期对各槽位进行负载均衡,从而避免某一个槽位所在的节点(也即数据库)承担过大的访问压力的可能。
69.图2是本发明第一实施例的数据处理方法的示意图。如图2所示,node(节点)1

node n为数据库集群中的n个节点,第i(i为大于等于1且小于等于n的预定整数)个节点中包括mn个槽位,且各节点内部均预先部署了zabbix agent(也即,za)。因此服务器可以通过内部部署的zabbix server获取各节点的资源消耗指标,并获取各槽位的槽位请求数量以及槽位内存使用量作为各槽位的槽位信息。在获取各槽位的槽位信息后,服务器可以计算各槽位的评估值,并确定待迁移槽位为第1个节点中的第1个槽位,也即slot1,1,确定目标槽位为第n个节点中的第mn个槽位,也即slotn,mn。然后,服务器可以进行槽位迁移,以平衡至少一个槽位的负载。
70.本实施例确定目标数据库中作为数据存储范围的槽位的槽位信息,并分别根据各
槽位的槽位信息确定各槽位的评估值,从而根据各槽位的评估值进行槽位迁移,以平衡至少一个槽位的负载。槽位之间的负载均衡可以使得数据库集群中的各节点负载均衡,因此本实施例可以在数据库集群中各数据库之间均衡负载,从而有效降低某一数据库的访问压力。
71.图3是本发明第二实施例的数据处理装置的示意图。如图3所示,本实施例的装置包括信息确定单元31、评估值确定单元32和槽位迁移单元33。
72.其中,信息确定单元31用于确定目标数据库集群中各槽位的槽位信息,所述槽位为数据存储范围。评估值确定单元32用于根据各所述槽位信息确定对应槽位的评估值。槽位迁移单元33用于根据各所述槽位的所述评估值进行槽位迁移,以平衡至少一个槽位的负载。
73.本实施例确定目标数据库中作为数据存储范围的槽位的槽位信息,并分别根据各槽位的槽位信息确定各槽位的评估值,从而根据各槽位的评估值进行槽位迁移,以平衡至少一个槽位的负载。槽位之间的负载均衡可以使得数据库集群中的各节点负载均衡,因此本实施例可以在数据库集群中各数据库之间均衡负载,从而有效降低某一数据库的访问压力。
74.图4是本发明第三实施例的电子设备的示意图。图4所示的电子设备为通用数据处理装置,具体可以为本发明实施例的第一终端、第二终端或服务器,其包括通用的计算机硬件结构,其至少包括处理器41和存储器42。处理器41和存储器42通过总线43连接。存储器42适于存储处理器41可执行的指令或程序。处理器41可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器41通过执行存储器42所存储的命令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其他装置的控制。总线43将上述多个组件连接在一起,同时将上述组件连接到显示控制器44和显示装置以及输入/输出(i/o)装置45。输入/输出(i/o)装置45可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出(i/o)装置45通过输入/输出(i/o)控制器46与系统相连。
75.其中,存储器42可以存储软件组件,例如操作系统、通信模块、交互模块以及应用程序。以上所述的每个模块和应用程序都对应于完成一个或多个功能和在发明实施例中描述的方法的一组可执行程序指令。
76.上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应理解,流程图和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。
77.同时,如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明的方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可
读介质具有在其上实现的计算机可读程序代码。
78.可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、光纤、便携式光盘只读存储器(cd

rom)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
79.计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。
80.用于执行针对本发明各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如java、smalltalk、c++、php、python等;以及常规过程编程语言如“c”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(lan)或广域网(wan)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
81.以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1