CN110622478B - 数据同步处理的方法和装置 - Google Patents
数据同步处理的方法和装置 Download PDFInfo
- Publication number
- CN110622478B CN110622478B CN201880004742.8A CN201880004742A CN110622478B CN 110622478 B CN110622478 B CN 110622478B CN 201880004742 A CN201880004742 A CN 201880004742A CN 110622478 B CN110622478 B CN 110622478B
- Authority
- CN
- China
- Prior art keywords
- thread
- processed
- information
- node
- buffer module
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Hardware Redundancy (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种数据同步处理方法和装置,应用于计算机系统中的主节点,该计算机系统还包括与主节点连接的备节点,该方法包括:通过第一线程获取第一待处理信息,第一待处理信息为第一数据包或第一指示信息,第一指示信息用于指示第一数据包,其中,第一线程为执行非线程安全代码的线程;通过第一线程将第一待处理信息写入缓冲模块;通过第二线程对第一待处理信息执行一致性协商处理,该一致性协商处理用于同步主节点和备节点处理第一数据包的顺序;根据一致性协商处理的结果通过第一线程处理第一数据包。该方法和装置能够使得主节点在进行主备虚拟机的同步处理时利用主虚拟机处理其它任务,提高主节点的性能。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种数据同步处理的方法和装置。
背景技术
虚拟化(virtualization)是计算节点(以下,简称为“节点”)的一部分,用于提供隔离的虚拟化计算环境,虚拟化的一个典型的例子是虚拟机(virtual machine,VM)。虚拟机指通过虚拟机软件在物理设备上模拟出的虚拟设备。对于在虚拟机中运行的应用程序而言,这些虚拟机就像真正的物理设备那样进行工作,虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。
为了提高虚拟机处理业务的可靠性,通常在主备虚拟机上配置相同的数据库(即,分布式数据库),使主备虚拟机处理相同的业务,当主虚拟机发生故障无法正常工作时,备虚拟机自动接管业务。由于主备虚拟机的工作状态通常不会完全相同,因此,备虚拟机在接管业务之前需要一定的时间来同步主备虚拟机的工作状态,主备虚拟机需要同步的数据量越小,备虚拟机接管业务所需的时间越短。
现有技术中,主虚拟机所在节点(即,主节点)基于一致性协商协议进行主备虚拟机的同步处理,例如,使主备虚拟机按照相同的顺序处理数据包,定期或不定期地同步主备虚拟机的状态,从而减小了主备虚拟机的工作状态的差异。
然而,主节点的线程(例如,主循环线程)在进行主备虚拟机的同步处理时需要占据全局互斥锁,该全局互斥锁禁止其它线程访问主虚拟机对应的代码,导致主虚拟机在主线程进行同步处理时无法处理其它任务,从而使得主虚拟机的性能大幅下降。
发明内容
本申请提供了一种数据同步处理的方法和装置,能够使得主节点在进行主备虚拟机的同步处理时利用主虚拟机处理其它任务,提高主节点的性能。
第一方面,提供了一种数据同步处理方法,应用于计算机系统中的主节点的模拟器,该模拟器用于为主节点的第一虚拟设备模拟硬件设备,该计算机系统还包括与主节点连接的备节点,该方法包括:通过模拟器的第一线程获取第一待处理信息,第一待处理信息为第一数据包或第一指示信息,第一指示信息用于指示第一数据包,其中,第一线程为执行非线程安全代码的线程;通过第一线程将第一待处理信息写入缓冲模块;通过模拟器的第二线程对第一待处理信息执行一致性协商处理,该一致性协商处理用于同步主节点和备节点处理第一数据包的顺序;通过第一线程根据一致性协商处理的结果处理第一数据包。
主节点可以调动第一线程和第二线程执行代码以完成相应的任务。第一线程为执行非线程安全代码的线程,因此,第一线程在执行操作时需要占据互斥锁,例如,第一线程在获取第一待处理信息之前需要占据全局互斥锁,本申请对第一线程获取第一待处理信息的方式不作限定。第一线程获取第一待处理信息之后,将第一待处理信息写入缓冲模块,该缓冲模块可以是缓冲队列,也可以是用于缓冲第一待处理信息的堆(heap)或栈(stack),还可以是其它用于缓冲第一待处理信息的数据结构,本申请对此不作限定。第一线程将第一待处理信息写入缓冲模块后即可释放全局互斥锁,其它线程可以占据全局互斥锁并调度虚拟机执行其它任务。第二线程读取缓冲模块中的至少一个待处理信息,并基于一致性协商协议确定主备节点处理数据包的共同顺序,随后,第一线程占据全局互斥锁并按照第二线程确定的处理顺序处理数据包。由于主备节点进行一致性协商的工作是由第二线程完成的,第二线程工作时无需占据全局互斥锁,因此,主节点可以在进行主备虚拟机的同步处理时利用主虚拟机处理其它任务,提高了主节点的性能。
可选地,通过模拟器的第二线程对第一待处理信息执行一致性协商处理,包括:通过第二线程从缓冲模块中读取第一待处理信息;通过第二线程对第一待处理信息执行一致性协商处理,确定第一数据包的被处理顺序;根据第一数据包的被处理顺序通过第二线程将第一待处理信息写入管道,该管道用于第一线程读取第一待处理信息。
第一数据包可以是从客户端获取的数据包,也可以是主节点生成的数据包,还可以是其它数据包,本申请对第一数据包的具体内容不作限定。由于主节点的一些程序代码是非线程安全的,因此,第二线程作为一个工作者线程不能直接调用主节点的程序代码,本实施例提供的一致性协商处理方案在第一线程和第二线程之间建立一个用于联系的管道,第二线程将一致性协商的结果写入管道,以便于第一线程通过管道读取一致性协商的结果,从而可以在完成一致性协商的同时避免对主节点的安全性造成影响。
可选地,通过第二线程从缓冲模块中读取第一待处理信息,包括:在预设时间通过第二线程从缓冲模块中读取第一待处理信息缓冲模块。
在本实施例中,预设时间例如是定时器事件对应的时间,第二线程可以基于定时器事件的触发从缓冲模块中读取第一待处理信息,主节点可以设置不同的定时器事件,因此,上述实施例可以灵活触发第二线程进行一致性协商处理。
可选地,通过第二线程从缓冲模块中读取第一待处理信息之前,所述方法还包括:通过第二线程获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问缓冲模块;根据通过第二线程对第一待处理信息执行一致性协商处理之后,所述方法还包括:当缓冲模块中待处理信息的数量为0时,释放第二线程获取的缓冲模块的独占权限。
当第二线程开始工作时,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程在同一时刻访问缓冲模块。当缓冲模块中的待处理信息数量为0时第二线程释放队列互斥锁,其它线程可以继续向缓冲模块中写入新的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,通过第二线程对第一待处理信息执行一致性协商处理,包括:通过第二线程确定缓冲模块中待处理信息的数量;当缓冲模块中待处理信息的数量大于0时,通过第二线程将待处理信息对应的数据包(包括第一数据包)写入一致性日志并删除缓冲模块中的待处理信息,一致性日志用于缓存数据包,一致性日志中的数据包的先后顺序与一致性日志中的数据包的被处理顺序相对应;通过第二线程发送包括第一数据包的一致性协商请求,该一致性协商请求用于请求备节点接受第一数据包的被处理顺序;通过第二线程接收协商完成消息,该协商完成消息用于指示第一数据包的被处理顺序已被接受。
第二线程读取待处理信息后执行一致性协商处理,随后删除缓冲模块中的待处理信息,这样,可以保证第二线程每次读取的缓冲模块中的指示信息都是新的待处理信息,避免第二线程读到被处理过的待处理信息,从而提高了一致性协商处理的效率。
可选地,通过第一线程将第一待处理信息写入缓冲模块之前,所述方法还包括:通过第一线程获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问缓冲模块;通过第一线程将第一待处理信息写入缓冲模块之后,所述方法还包括:通过第一线程释放第一线程获取的缓冲模块的独占权限。
第一线程在写入缓冲模块之前,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程在同一时刻访问缓冲模块。当第一线程写入缓冲模块完成后释放队列互斥锁,第二线程可以占据队列互斥锁并读取缓冲模块中的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息的队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,第一虚拟设备中运行有主数据库,备节点设置有第二虚拟设备,第二虚拟设备中运行有备用数据库,第一数据包携带有客户端发送至主节点的针对主数据库的访问请求,
通过模拟器的第一线程获取第一待处理信息,包括:通过第一线程从主节点的物理网卡获取第一待处理信息;
通过第一线程根据一致性协商处理的结果处理第一数据包,包括:通过第一线程将第一数据包同时发送至主数据库和备用数据库,以使得主节点和备节点处理按照相同的顺序处理第一数据包。
可选地,所述方法还包括:
通过模拟器的第三线程获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例,该n次同步操作时主节点的负载阈值为c1,...,cn,该n次同步操作时主节点与备节点的相同脏页比例为w1,...,wn,其中,c1与w1对应,...,cn与wn对应,n为大于或等于2的正整数;
通过第三线程确定wm,wm为该n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数;
通过第三线程获取Lm,Lm为当前时刻主节点的负载值;
若Lm≤wm,则通过第三线程生成同步请求,该同步请求用于请求同步主节点和备节点的脏页;
通过第三线程将该同步请求写入缓冲模块;
通过第二线程对该同步请求执行一致性协商处理,对该同步请求执行一致性协商处理的结果用于同步主节点和备节点处理同步请求的顺序;
通过第一线程根据对该同步请求执行一致性协商处理的结果处理该同步请求。
现有技术中,主节点根据当前时刻的负载值与固定的负载阈值比较确定是否启动主备节点的同步,若当前时刻的负载值小于固定的负载阈值,则不启动主备节点的同步;若当前时刻的负载值大于或等于固定的负载阈值,则启动主备节点的同步。上述现有技术的缺点是根据固定的负载阈值很难确定进行主备节点同步的最佳启动时机,原因在于:若固定的负载阈值设定过小,例如将固定的负载阈值设置为0,虽然主节点的负载值满足该条件时主备节点的相同脏页比例最高(因为此时主备节点的虚拟机都不再工作,脏页不再发生变化),但是主备节点的虚拟机从负载检测的时刻到数据同步时刻之间一直处于闲置状态,导致主备节点的虚拟机资源被浪费;若固定的负载阈值设定过大,则主备节点的虚拟机在数据同步时仍处于工作状态,主备节点的虚拟机相同脏页比例较小,导致主备节点需要传输较多的数据(即,相异的脏页对应的数据),从而导致主备节点的数据同步需要消耗较多的网络资源。
下面举一个例子说明本申请提供的技术方案是如何解决上述问题的。例如,第一次负载检测时主节点的处理器工作时间为10分钟,主备节点的虚拟机相同脏页比例为80%,第二次负载检测时主节点的处理器工作时间为20分钟,主备节点的虚拟机相同脏页比例为85%,第三次负载检测时主节点的处理器工作时间为20分钟,主备节点的虚拟机相同脏页比例为85%。上述数据说明主节点的虚拟机至少在第二次负载检测时已经停止了工作,有可能在第二次负载检测之前主节点的虚拟机就已经停止了工作,若在第二次负载检测后开始数据同步,则必然造成主节点的虚拟机被闲置,虚拟机资源被浪费,因此,优选的数据同步时机在第一次负载检测之后以及第二次负载检测之前,当数据同步开始时,主节点的虚拟机已完成了大部分工作或者全部工作,这样做可以取得虚拟机资源利用率与相同脏页比例的较佳平衡点。
按照上述本申请提供的实施例,根据至少两次同步操作时主节点的负载阈值和相同脏页比例确定负载阈值,例如,将第一次负载检测时获得的相同脏页比例80%作为加权值乘以负载阈值5得到结果4,将第二次负载检测时获得的相同脏页比例85%作为加权值乘以负载阈值6得到结果5.1,将4和5.1相加再除以负载检测次数2得到该两次负载检测的负载阈值的加权平均值4.55,该加权平均值即为新的负载阈值。若第三次负载检测得到的处理器工作时间为22分钟,则第三次负载检测时主节点的负载值为2(第三次负载检测得到的工作时间22减去第二次负载检测得到的工作时间20得到第三次负载检测时主节点的负载值2),该负载值小于上述新的负载阈值4.55,说明主节点的虚拟机的剩余任务不多了,主节点的虚拟机很快就会进入闲置状态,则开始执行数据同步操作;若第三次负载检测得到的处理器工作时间为30,则第三次负载检测时主节点的负载值为10(第三次负载检测得到的工作时间30减去第二次负载检测得到的工作时间20得到第三次负载检测时主节点的负载值2),该负载值大于上述新的负载阈值4.55,说明主节点的虚拟机的剩余任务还有很多,主备节点的相同脏页比例较小,则在当前时刻不执行数据同步操作,待第四次负载检测后,根据第四次负载检测的确定的负载值与新的负载阈值4.55的大小关系确定是否执行数据同步操作。
此外,由于本实施例中新的负载阈值是根据多次负载测量的结果确定的加权平均值,因此,该负载阈值将随着负载检测次数的增多逐渐收敛为一个较优选的负载阈值。
综上,本实施例提供的数据同步的方法中,负载阈值为一个动态的较优选的阈值,可以在进行数据同步时使得虚拟机资源利用率与主备节点的相同脏页比例达到一个较佳的平衡点。
可选地,通过第三线程获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例之前,所述方法还包括:
通过第三线程获取SUMk,SUMk为主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数;
当k≥Tcount时,通过第三线程确定c0,Tcount为负载测量次数阈值,c0为主节点首次同步操作的负载阈值,c0=SUMk÷k;或者,
当k<Tcount时,通过第三线程获取Lk+1,Lk+1为第k+1次负载测量得到的主节点的负载值,Tcount为负载测量次数阈值;通过第三线程获取SUMk+1,SUMk+1=SUMk+Lk+1;当k+1≥Tcount时,通过第三线程确定c0,c0为主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
例如,主节点的虚拟机启动后,负载的测量次数(COUNT)等于0,第一次负载测量后,得到第一负载值L1,则SUM1等于L1,第二次负载测量后,得到第二负载值L2,则SUM2=SUM1+L2,即,SUM2与SUM1正相关,且SUM2与L2正相关。若测量次数阈值Tcount为2,则初始负载阈值c0等于SUM2除以2,即,初始负载阈值与SUM2正相关,且初始负载阈值与测量次数负相关;若测量次数阈值Tcount为3,由于当前仅进行了两次负载测量,因此,还需要再进行一次负载测量,即,确定第三负载值L3,随后计算SUM3,SUM3=SUM2+L3,即,SUM3与SUM2正相关,且SUM3与L3正相关,初始负载阈值c0等于SUM3除以3,即,初始负载阈值与SUM3正相关,且初始负载阈值与测量次数负相关。
上述实施例可以确定一个初始负载阈值,从而可以确定主节点首次进行数据同步的时机。
可选地,上述主节点的负载值包括处理器负载值和存储器负载值,上述主节点的负载阈值包括处理器负载阈值和存储器负载阈值。
在本实施例中,可以先比较处理器负载值与处理器负载阈值的大小关系,再比较存储器负载值与存储器负载阈值的大小关系,也可以先比较存储器负载值与存储器负载阈值的大小关系,再比较处理器负载值与处理器负载阈值的大小关系,从而可以灵活确定主备节点进行数据同步的时机。
第二方面,提供了一种数据同步处理装置,应用于计算机系统中的主节点的模拟器,该模拟器用于为主节点的第一虚拟设备模拟硬件设备,该计算机系统还包括与主节点连接的备节点,该装置包括:
第一线程控制单元,用于获取第一待处理信息,第一待处理信息为第一数据包或第一指示信息,第一指示信息用于指示第一数据包,其中,第一线程控制单元用于执行非线程安全代码;以及将第一待处理信息写入缓冲模块;
第二线程控制单元,用于对第一待处理信息执行一致性协商处理,该一致性协商处理用于同步主节点和备节点处理第一数据包的顺序;
第一线程控制单元还用于,根据第二线程控制单元执行一致性协商处理的结果处理第一数据包。
数据同步处理装置可以通过第一线程控制单元和第二线程控制单元执行代码以完成相应的任务。第一线程控制单元用于执行非线程安全代码,因此,第一线程控制单元在执行操作时需要占据互斥锁,例如,第一线程控制单元在获取第一待处理信息之前需要占据全局互斥锁,本申请对第一线程控制单元获取第一待处理信息的方式不作限定。第一线程控制单元获取第一待处理信息之后,将第一待处理信息写入缓冲模块,该缓冲模块可以是缓冲队列,也可以是用于缓冲第一待处理信息的堆(heap)或栈(stack),还可以是其它用于缓冲第一待处理信息的数据结构,本申请对此不作限定。第一线程控制单元将第一待处理信息写入缓冲模块后即可释放全局互斥锁,其它线程可以占据全局互斥锁并调度虚拟机执行其它任务。第二线程控制单元读取缓冲模块中的至少一个待处理信息,并基于一致性协商协议确定主备节点处理数据包的共同顺序,随后,第一线程控制单元占据全局互斥锁并按照第二线程控制单元确定的处理顺序处理数据包。由于主备节点进行一致性协商的工作是由第二线程控制单元完成的,第二线程控制单元工作时无需占据全局互斥锁,因此,该数据同步处理装置可以是主节点在进行主备虚拟机的同步处理时利用主虚拟机处理其它任务,提高了主节点的性能。
可选地,第二线程控制单元具体用于:
从缓冲模块中读取所述第一待处理信息;
对第一待处理信息执行一致性协商处理,确定第一数据包的被处理顺序;
根据第一数据包的被处理顺序将第一待处理信息写入管道,该管道用于第一线程控制单元读取第一待处理信息。
第一数据包可以是从客户端获取的数据包,也可以是主节点生成的数据包,还可以是其它数据包,本申请对第一数据包的具体内容不作限定。由于主节点的一些程序代码是非线程安全的,因此,第二线程控制单元作为一个工作者线程不能直接调用主节点的程序代码,本实施例提供的一致性协商处理方案在第一线程控制单元和第二线程控制单元之间建立一个用于联系的管道,第二线程控制单元将一致性协商的结果写入管道,以便于第一线程控制单元通过管道读取一致性协商的结果,从而可以在完成一致性协商的同时避免对主节点的安全性造成影响。
可选地,第二线程控制单元具体还用于:在预设时间从所述缓冲模块中读取所述第一待处理信息。
在本实施例中,预设时间例如是定时器事件对应的时间,第二线程控制单元可以基于定时器事件的触发从缓冲模块中读取第一待处理信息,主节点可以设置不同的定时器事件,因此,上述实施例可以灵活触发第二线程控制单元进行一致性协商处理。
可选地,从缓冲模块中读取第一待处理信息之前,第二线程控制单元具体还用于:获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问该缓冲模块;
对第一待处理信息执行一致性协商处理之后,第二线程控制单元具体还用于:当缓冲模块中待处理信息的数量为0时,释放第二线程获取的该缓冲模块的独占权限。
当第二线程控制单元开始工作时,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程控制单元在同一时刻访问缓冲模块。当缓冲模块中的待处理信息数量为0时第二线程控制单元释放队列互斥锁,其它线程可以继续向缓冲模块中写入新的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,第二线程控制单元具体还用于:
确定缓冲模块中待处理信息的数量;
当待处理信息的数量大于0时,将待处理信息对应的数据包写入一致性日志并删除待处理信息,该一致性日志用于缓存待处理信息对应的数据包,一致性日志中的数据包的先后顺序与一致性日志中的数据包的被处理顺序相对应,该待处理信息包括第一待处理信息,该待处理信息对应的数据包包括第一数据包;
发送包括第一数据包的一致性协商请求,一致性协商请求用于请求备节点接受第一数据包的被处理顺序;
接收协商完成消息,该协商完成消息用于指示第一数据包的被处理顺序已被接受。
第二线程控制单元读取待处理信息后执行一致性协商处理,随后删除缓冲模块中的待处理信息,这样,可以保证第二线程控制单元每次读取的缓冲模块中的指示信息都是新的待处理信息,避免第二线程控制单元读到被处理过的待处理信息,从而提高了一致性协商处理的效率。
可选地,将第一待处理信息写入缓冲模块之前,第一线程控制单元还用于:获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问该缓冲模块;
将第一待处理信息写入缓冲模块之后,第一线程控制单元还用于:释放第一线程控制单元获取的缓冲模块的独占权限。
第一线程控制单元在写入缓冲模块之前,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程控制单元在同一时刻访问缓冲模块。当第一线程控制单元写入缓冲模块完成后释放队列互斥锁,第二线程控制单元可以占据队列互斥锁并读取缓冲模块中的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息的队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,第一虚拟设备中运行有主数据库,备节点设置有第二虚拟设备,第二虚拟设备中运行有备用数据库,第一数据包携带有客户端发送至主节点的针对主数据库的访问请求,
第一线程控制单元具体还用于:从主节点的物理网卡获取第一待处理信息;将第一数据包同时发送至主数据库和备用数据库,以使得主节点和备节点按照相同的顺序处理第一数据包。
可选地,所述装置还包括第三线程控制单元,第三线程控制单元用于:
获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例,n次同步操作时主节点的负载阈值为c1,...,cn,该n次同步操作时主节点与备节点的相同脏页比例为w1,...,wn,其中,c1与w1对应,...,cn与wn对应,n为大于或等于2的正整数;
确定wm,wm为n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数;
获取Lm,Lm为当前时刻主节点的负载值;
若Lm≤wm,则产生同步请求,该同步请求用于请求同步主节点和备节点的脏页;
将同步请求写入所述缓冲模块;
第二线程控制单元具体还用于:
对同步请求执行一致性协商处理,对同步请求执行一致性协商处理的结果用于同步主节点和备节点处理同步请求的顺序;
第一线程控制单元具体还用于:
根据对同步请求执行一致性协商处理的结果处理同步请求。
本实施例提供的数据同步的装置使用的负载阈值为一个动态的较优选的阈值,可以在进行数据同步时使得虚拟机资源利用率与主备节点的相同脏页比例达到一个较佳的平衡点。
可选地,获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例之前,第三线程控制单元具体还用于:
获取SUMk,SUMk为主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数;
当k≥Tcount时,确定c0,Tcount为负载测量次数阈值,c0为主节点首次同步操作的负载阈值,c0=SUMk÷k;或者,
当k<Tcount时,获取Lk+1,Lk+1为第k+1次负载测量得到的主节点的负载值,Tcount为负载测量次数阈值;获取SUMk+1,SUMk+1=SUMk+Lk+1;当k+1≥Tcount时,确定c0,c0为主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
上述实施例可以确定一个初始负载阈值,从而可以确定主节点首次进行数据同步的时机。
可选地,上述主节点的负载值包括处理器负载值和存储器负载值,上述主节点的负载阈值包括处理器负载阈值和存储器负载阈值。
在本实施例中,可以先比较处理器负载值与处理器负载阈值的大小关系,再比较存储器负载值与存储器负载阈值的大小关系,也可以先比较存储器负载值与存储器负载阈值的大小关系,再比较处理器负载值与处理器负载阈值的大小关系,从而可以灵活确定主备节点进行数据同步的时机。
第三方面,提供了一种数据同步处理装置,该装置具有实现第一方面所述的方法的执行设备的功能,其包括用于执行上述方法方面所描述的步骤或功能相对应的部件(means)。所述步骤或功能可以通过软件实现,或硬件(如电路)实现,或者通过硬件和软件结合来实现。
在一种可能的设计中,上述装置包括一个或多个处理单元以及一个或多个通信单元。所述一个或多个处理单元被配置为支持所述装置实现上述方法的执行设备相应的功能,例如,通过第一线程获取第一待处理信息。所述一个或多个通信单元用于支持所述装置与其它设备通信,实现接收和/或发送功能。例如,从客户端获取第一数据包。
可选的,上述装置还可以包括一个或多个存储器,所述存储器用于与处理器耦合,其保存装置必要的程序指令和/或数据。所述一个或多个存储器可以和处理器集成在一起,也可以与处理器分离设置。本申请并不限定。
所述装置可以为芯片。其中,上述通信单元可以为芯片的输入/输出电路或者接口。
另一个可能的设计中,上述装置包括收发器、处理器和存储器。该处理器用于控制收发器或输入/输出电路收发信号,该存储器用于存储计算机程序,该处理器用于运行该存储器中的计算机程序,使得该装置执行第一方面或第一方面中任一种可能实现方式中的方法。
第四方面,提供了一种计算机系统,该计算机系统包括第一方面所述的主节点和备节点,其中,该主节点用于执行第一方面或第一方面中任一种可能实现方式中的方法。
第五方面,提供了一种计算机可读存储介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面中任一种可能实现方式中的方法的指令。
第六方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第一方面中任一种可能实现方式中的方法。
附图说明
图1是一种适用于本申请的计算机系统的示意图;
图2是一种适用于本申请的虚拟机状态复制的示意图;
图3是本申请提供的一种数据同步处理方法的示意图;
图4是本申请提供的一种主备虚拟机进行数据同步的示意图;
图5是本申请提供的一种确定主备虚拟机进行数据同步的时机的方法示意图;
图6是本申请提供的一种确定初始负载阈值的方法的示意图;
图7是本申请提供的另一数据同步处理方法的示意图;
图8是本申请提供的一种一致性协商方法的示意图;
图9是本申请提供的再一数据同步处理方法的示意图;
图10是本申请提供的再一数据同步处理方法的示意图;
图11是本申请提供的数据同步处理装置的一种可能的结构示意图;
图12是本申请提供的主节点的另一可能的结构示意图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
图1示出了适用于本申请的一种计算机系统的示意图。
如图1所示,该计算机系统100包括主机1和主机2,主机1包括硬件平台以及安装在该硬件平台上的宿主机操作系统,主机1还包括运行在该宿主机操作系统上的虚拟机1和快速轻便模拟器(quick emulator,Qemu)1,其中,虚拟机1上运行有数据库1。。
Qemu模拟硬件设备提供给虚拟机使用。除此之外,Qemu还可监控运行在Qemu上的虚拟机的工作负载,虚拟机的工作负载包括虚拟机针对中央处理器(central processingunit,CPU)的占用率以及虚拟机针对磁盘的占用率,其中,中央处理器和磁盘设置在硬件平台中。
主机2包括硬件平台以及安装在该硬件平台上的宿主机操作系统,主机2还包括运行在该宿主机操作系统上的虚拟机2和Qemu2,其中,虚拟机2上运行有数据库2。
在本发明实施例中,数据库1为主数据库,数据库2为备用数据库,当数据库1不能使用时,数据库2可取代数据库1称为主数据库以供客户端访问。
虚拟机1和虚拟机3可以互为主备虚拟机,相应地,主机1和主机2互为主备节点。主机1和主机2可以通过网卡(network interface card,NIC)相互通信,并且可以分别与客户端通信。
若主机1为主节点,主机2为备节点,当客户端按照1234的顺序发送四个数据包至主机1时,虚拟机1可以按照1234的顺序处理该四个数据包,并且,主节点1通过Qemu1的一致性协商模块与主机2中的Qemu3的一致性协商模块协商确定虚拟机3处理该四个数据包的顺序为1234,这样,虚拟机1与虚拟机3处理该四个数据包的顺序相同,因此,主节点和备节点只有少量的内存脏页不一致,在同步时只需传输较少的数据。
示例地,一致性协商模块可通过paxos算法实现对数据包处理顺序进行一致性协商,当采用paxos算法时,需在图1中进一步引入观察者节点,其中观察者节点可包括设置有一致性协商模块的Qemu,于下文将会详细介绍。
上述计算机系统100仅是举例说明,适用于本申请的计算机系统不限于此,例如,计算机系统100还可以包括其它的主机。此外,不同主机之间可以通过无线电波进行通信,也可以通过以太网进行通信。
图2示出了本申请提供的一种虚拟机状态复制的示意图。
如图2所示,主备节点的Qemu内均部署有Paxos协商模块(即,一致性协商模块),并且所有虚拟机并行运行相同的数据库程序,来自客户端的数据包到达主节点后,主节点的Paxos模块与其它备节点的Paxos模块协商收到的每一个数据包的处理顺序,使得所有的虚拟机按照相同的顺序处理相同的数据包,这样,备节点与主节点只有少量的内存脏页不一致,从而在同步时只需传输较少的数据即可完成同步,提高了同步的效率。
图2中,主节点与备节点运行相同的数据库,填充阴影的内存脏页(也可以称为“脏页”)表示虚拟机2与虚拟机1相异的脏页。
应理解,图2所示的Paxos协商模块仅是举例说明,其它一致性算法也适用于本申请。
如背景技术所述,现有技术将Paxos协商模块部署在Qemu内会给虚拟机带来巨大的性能损失,下面将详细描述本申请提供的用于数据同步处理方法是如何解决这一问题的。
图3示出了本申请提供的数据同步处理方法300的流程图。方法300应用于计算机系统中的主节点,具体地,方法300应用于计算机系统中的主节点的Qemu1,该计算机系统还包括与主节点连接的备节点,方法300包括:
S310,通过第一线程获取第一待处理信息,第一待处理信息为第一数据包或第一指示信息,第一指示信息用于指示第一数据包,其中,第一线程为执行非线程安全代码的线程。
举例而言,第一指示信息可例如为包括指针和数据大小的指示信息,该指针用于指示第一数据包的存储地址,第一线程可通过指针在第一数据包的存储地址读取具有该数据大小的信息来获取第一数据包。
S320,通过第一线程将第一待处理信息写入缓冲模块。示例地,缓冲模块为缓冲队列(queue),也可以是用于缓冲第一待处理信息的堆(heap)或栈(stack),还可以是其它用于缓冲第一待处理信息的数据结构,本申请对此不作限定。
S330,通过第二线程对第一待处理信息执行一致性协商处理,该一致性协商处理用于同步主节点和备节点处理第一数据包的顺序。
S340,通过第一线程根据一致性协商处理的结果处理第一数据包。
方法300中,主节点可以调动第一线程和第二线程执行代码以完成相应的任务,为了简介,在本申请中,有时会将上述行为描述为“通过第一线程完成任务”或“第一线程完成任务”,例如,“通过第一线程获取第一待处理信息”以及“第一线程获取第一待处理信息”,均可以被理解为,主节点调度第一线程执行代码获取第一待处理信息。
第一线程为执行非线程安全代码的线程,例如,第一线程是Qemu的主循环线程(Qemu main loop),该线程执行Qemu的核心代码,是一个专用的事件处理循环线程,主循环线程根据文件描述符的状态变化调用相应的处理函数处理事件,第二线程是Qemu的工作者线程(Worker thread)。
由于Qemu的核心代码是非线程安全的,即,Qemu不提供数据访问保护,有可能出现Qemu的多个线程先后更改同一数据造成所得到的数据不一致,因此,第一线程在执行操作时需要占据互斥锁(mutex),例如,主循环线程在获取第一待处理信息之前需要占据全局互斥锁(global mutex),在将第一待处理信息写入缓冲模块后释放全局互斥锁,从而保证同一时刻,只有占据全局互斥锁的主循环线程可以执行获取第一待处理信息并将第一待处理信息写入缓冲模块的操作。
S310中,第一待处理信息是主节点获得的任意一个待处理的信息,第一待处理信息可以是一个数据包,也可以是一个用于指示该数据包的描述符(即,指示信息)。例如,主节点接收到来自客户端的数据包后,可以直接将该数据包写入缓冲模块,也可以生成一个指示该数据包的描述符,将该描述符写入缓冲模块,其中,该描述符可以包括指向该数据包的指针、以及指示该数据包的长度和类型的信息。
除上述示例外,第一数据包还可以是主节点在本地生成的数据包。本申请对第一数据包的具体内容以及主节点获取第一数据包的方法不作限定。
第一线程获取第一待处理信息之后,将第一待处理信息写入缓冲模块。
第一线程将第一待处理信息写入缓冲模块后即可释放全局互斥锁,其它线程可以尝试占据全局互斥锁并执行其它任务。第二线程读取缓冲模块中的至少一个待处理信息,并基于一致性协商协议(例如Paxos)确定主备节点处理数据包的共同顺序,随后,第一线程占据全局互斥锁并按照第二线程确定的处理顺序处理数据包。第二线程例如是一致性协商线程。
S330中,一致性协商的具体流程可以参考现有技术中的一致性协商方法,为了简介,在此不再赘述。
S340中,第一线程可以根据第一数据包的类型处理第一数据包,例如,当第一数据包为客户端发送的数据包时,第一线程可以将第一数据包发送至主节点上的虚拟机进行处理,当第一数据包为主节点的同步模块生成的请求进行主备节点同步的请求数据包时,主节点可以根据该请求数据包进行主备节点的同步操作。
在上述实施例中,由于主备节点进行一致性协商的工作是由第二线程完成的,第二线程进行一致性协商工作时无需占据全局互斥锁,因此,主节点可以在进行主备虚拟机的同步操作时利用主节点的虚拟机处理其它任务,提高了主节点的性能。
并且,由于主节点和备节点处理所述第一数据包的顺序相同,因此,可保证数据库1和数据库2的执行相同顺序的访问,可最大限度地减少主备节点的脏页差异,降低主备同步时需要传输的脏页数量。
作为一个可选的实施例,S330包括:
S331,通过第二线程从缓冲模块中读取第一待处理信息。
S332,通过第二线程对第一待处理信息执行一致性协商处理,确定第一数据包的被处理顺序。
S333,根据第一数据包的被处理顺序通过第二线程将第一待处理信息写入管道,该管道用于第一线程读取第一待处理信息。
由于Qemu的核心程序是非线程安全的,因此,在Qemu中,第二线程作为一个工作者线程不能直接调用主节点的程序代码,本实施例提供的一致性协商处理方案在第一线程和第二线程之间建立一个用于联系的管道,并将该管道添加到Qemu主循环线程的事件循环列表中,当第二线程有消息需要通知Qemu主循环线程时,第二线程在文件描述符上执行一个写操作,使得该文件描述符在Qemu主循环线程一端变成可读,Qemu主循环线程读取该文件描述符之后即可调用相应的程序执行后续处理。
例如,S332执行完毕之后,对于第一数据包的被处理顺序,主节点和备节点已经达成一致,此时,直接的方法是第二线程执行虚拟网卡处理代码(RTL8139_do_receiver)对第一数据包进行虚拟网卡的逻辑操作,然而,RTL8139虚拟网卡的处理代码是非线性安全的代码,为了保证主节点的数据的安全性,第二线程可以将第一数据包的描述符写入管道,并在该描述符上执行一个写操作,使得该文件描述符在Qemu主循环线程那一端变的可读,在Qemu主循环线程读取该描述符之后,调用虚拟网卡处理代码对第一数据包执行后续处理。因此,上述实施例可以在保证主节点的线程安全性的前提下完成一致性协商后的处理任务。
作为一个可选的实施例,S331包括:
S3311,在预设时间通过第二线程从缓冲模块中读取第一待处理信息。
在本实施例中,预设时间例如是定时器事件对应的时间,第二线程可以基于定时器事件的触发从缓冲模块中读取第一待处理信息,主节点可以设置不同的定时器事件,因此,上述实施例可以灵活触发第二线程进行一致性协商处理。
作为一个可选的实施例,S331之前,方法300还包括:
S3301,通过第二线程获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问缓冲模块。
S332之后,方法300还包括:
S3321,当缓冲模块中待处理信息的数量为0时,释放第二线程获取的缓冲模块的独占权限。
例如,当第二线程开始工作时,首先获取缓冲队列的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程在同一时刻访问(包括写入和/或读取)缓冲队列。当缓冲队列中的待处理信息数量为0时第二线程释放队列互斥锁,其它线程可以继续向缓冲队列中写入新的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息队列中,从而提高了一致性协商处理的可靠性和效率。
作为一个可选的实施例,S332包括:
S3321,通过第二线程确定缓冲模块中待处理信息的数量。
S3322,当缓冲模块中待处理信息的数量大于0时,通过第二线程将待处理信息对应的数据包(包括第一数据包)写入一致性日志并删除缓冲模块中的待处理信息,一致性日志用于缓存数据包,一致性日志中的数据包的先后顺序与一致性日志中的数据包的被处理顺序相对应。
S3323,通过第二线程发送包括第一数据包的一致性协商请求,该一致性协商请求用于请求备节点接受第一数据包的被处理顺序。
S3324,通过第二线程接收协商完成消息,该协商完成消息用于指示第一数据包的被处理顺序已被接受。
当定时器事件或I/O事件触发时,第二线程先占据队列互斥锁,随后查看缓冲队列是否为空。如果缓冲队列为空,则释放队列互斥锁;如果缓冲队列非空,第二线程依次读取队列里的成员(数据包或者数据包的描述符),将成员所对应的数据包插入Paxos协议的一致性日志,然后将成员从队列里删除并释放原数据包所占用的内存,第二线程一直读取到队列为空,随后释放队列互斥锁。释放队列互斥锁后,第二线程将一致性日志中的数据包按顺序发送至备节点,请求备节点按照该顺序处理一致性日志中的数据包,随后,当第二线程接收到来自备节点的协商完成消息时,确定一致性日志中的数据包的被处理顺序已被备节点接受。
在本实施例中,第二线程读取待处理信息后执行一致性协商处理,随后删除缓冲模块中的待处理信息,这样,可以保证第二线程每次读取的缓冲模块中的指示信息都是未处理过的待处理信息,避免第二线程读到被处理过的待处理信息,从而提高了一致性协商处理的效率。
作为一个可选的实施例,S320之前,方法300还包括:
S319,通过第一线程获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问缓冲模块。
S320之后,方法300还包括:
S321,释放第一线程获取的缓冲模块的独占权限。
第一线程在写入缓冲模块之前,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程在同一时刻访问缓冲模块。当第一线程写入缓冲模块完成后释放队列互斥锁,第二线程可以占据队列互斥锁并读取缓冲模块中的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息的队列中,从而提高了一致性协商处理的可靠性和效率。
作为一个可选的实施例,第一虚拟设备中运行有主数据库,备节点设置有第二虚拟设备,第二虚拟设备中运行有备用数据库,第一数据包携带有客户端发送至主节点的针对主数据库的访问请求,
S310包括:通过第一线程从主节点的物理网卡获取第一待处理信息。
S340包括:通过第一线程将第一数据包同时发送至主数据库和备用数据库,以使得主节点和备节点处理按照相同的顺序处理第一数据包。
客户端发送的第一数据包通过主节点的物理网卡到达主节点的Qemu,在经过主节点的一致性协商处理之后,第一数据包被主节点和备节点按照相同的处理顺序处理,从而提高了主备节点的相同脏页比例。
作为一个可选的实施例,方法300还包括:
S301,通过模拟器的第三线程获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例,该n次同步操作时主节点的负载阈值为c1,...,cn,该n次同步操作时主节点与备节点的相同脏页比例为w1,...,wn,其中,c1与w1对应,...,cn与wn对应,n为大于或等于2的正整数。
S302,通过第三线程确定wm,wm为该n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数。
S303,通过第三线程获取Lm,Lm为当前时刻主节点的负载值。
S304,若Lm≤wm,则通过第三线程生成同步请求,该同步请求用于请求同步主节点和备节点的脏页。
S305,通过第三线程将该同步请求写入缓冲模块。
S306,通过第二线程对该同步请求执行一致性协商处理,对该同步请求执行一致性协商处理的结果用于同步主节点和备节点处理同步请求的顺序。
S307,通过第一线程根据对该同步请求执行一致性协商处理的结果处理该同步请求。
现有技术中,主节点根据当前时刻的负载值与固定的负载阈值比较确定是否启动主备节点的同步,若当前时刻的负载值小于固定的负载阈值,则不启动主备节点的同步;若当前时刻的负载值大于或等于固定的负载阈值,则启动主备节点的同步。上述现有技术的缺点是根据固定的负载阈值很难确定启动主备节点同步的最佳启动时机,原因在于:若固定的负载阈值设定过小,例如将固定的负载阈值设置为0,虽然主节点的负载值满足该条件时主备节点的相同脏页比例最高(因为此时主备节点的虚拟机都不再工作,脏页不再发生变化),但是主备节点的虚拟机从负载检测的时刻到数据同步时刻之间一直处于闲置状态,导致主备节点的虚拟机资源被浪费;若固定的负载阈值设定过大,则主备节点的虚拟机在数据同步时仍处于工作状态,主备节点的虚拟机相同脏页比例较小,导致主备节点需要传输较多的数据(即,相异的脏页对应的数据),从而导致主备节点的数据同步需要消耗较多的网络资源。
下面举一个例子说明本申请提供的技术方案是如何解决上述问题的。例如,主虚拟机1从启动到进行第一次负载检测处理器之间的工作时间为10分钟,主备节点的虚拟机相同脏页比例为80%,主虚拟机1从启动到第二次负载检测之间处理器工作时间为20分钟,主备节点的虚拟机相同脏页比例为85%,主虚拟机1从启动到第三次负载检测之间的处理器工作时间为20分钟,主备节点的虚拟机相同脏页比例为85%。上述数据说明主节点的虚拟机1至少在第二次负载检测时已经处于空闲状态,有可能在第二次负载检测之前主节点的虚拟机1就已经处于空闲状态,若在第二次负载检测后开始数据同步,则必然造成主节点的虚拟机1被闲置一段时间,虚拟机资源被浪费,因此,优选的主备节点同步时机在第一次负载检测之后以及第二次负载检测之前,在这个时间段内,选择主节点的虚拟机1已完成了大部分工作或者全部工作的时间点开始进行主备同步,这样做可以取得虚拟机资源利用率与相同脏页比例的较佳平衡点。
按照上述本申请提供的实施例,根据至少两次同步操作时主节点的负载阈值和相同脏页比例确定负载阈值,例如,将第一次负载检测时获得的相同脏页比例80%作为加权值乘以负载阈值5得到结果4,将第二次负载检测时获得的相同脏页比例85%作为加权值乘以负载阈值6得到结果5.1,将4和5.1相加再除以负载检测次数2得到该两次负载检测的负载阈值的加权平均值4.55,该加权平均值即为新的负载阈值。若第三次负载检测处理器的工作时间为22分钟,则第三次负载检测时主节点的负载值为2(第三次负载检测得到的工作时间22减去第二次负载检测得到的工作时间20得到第三次负载检测时主节点的负载值2),该负载值小于上述新的负载阈值4.55,说明主节点的虚拟机的剩余任务不多了,主节点的虚拟机很快就会进入闲置状态,则开始执行数据同步操作;若第三次负载检测得到的处理器工作时间为30,则第三次负载检测时主节点的负载值为10(第三次负载检测得到的工作时间30减去第二次负载检测得到的工作时间20得到第三次负载检测时主节点的负载值2),该负载值大于上述新的负载阈值4.55,说明主节点的虚拟机的剩余任务还有很多,主备节点的相同脏页比例较小,则在当前时刻不执行数据同步操作,待第四次负载检测后,根据第四次负载检测的确定的负载值与新的负载阈值4.55的大小关系确定是否执行数据同步操作。
此外,由于本实施例中新的负载阈值是根据多次负载测量的结果确定的加权平均值,因此,新的负载阈值将随着负载检测次数的增多逐渐收敛为一个较优选的负载阈值。上述第三线程例如是主节点中主备同步模块的工作者线程,即,负责主备虚拟机同步的线程。
综上,本实施例提供的数据同步处理方法中,负载阈值为一个动态的较优选的阈值,可以在进行数据同步时使得虚拟机资源利用率与主备节点的相同脏页比例达到一个较佳的平衡点。
作为一个可选的实施例,S301之前,方法300还包括:
S3001,通过第三线程获取SUMk,SUMk为主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数。
S3002,当k≥Tcount时,通过第三线程确定c0,Tcount为负载测量次数阈值,c0为主节点首次同步操作的负载阈值,c0=SUMk÷k。或者,
S3003,当k<Tcount时,通过第三线程获取Lk+1,Lk+1为第k+1次负载测量得到的主节点的负载值,Tcount为负载测量次数阈值;S3004,通过第三线程获取SUMk+1,SUMk+1=SUMk+Lk+1;S3005,当k+1≥Tcount时,通过第三线程确定c0,c0为主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
例如,主节点的虚拟机启动后,负载的测量次数(COUNT)等于0,第一次负载测量后,得到第一负载值L1,则SUM1等于L1,第二次负载测量后,得到第二负载值L2,则SUM2=SUM1+L2,即,SUM2与SUM1正相关,且SUM2与L2正相关。若测量次数阈值Tcount为2,则初始负载阈值c0等于SUM2除以2,即,初始负载阈值与SUM2正相关,且初始负载阈值与测量次数负相关;若测量次数阈值Tcount为3,由于当前仅进行了两次负载测量,因此,还需要再进行一次负载测量,即,确定第三负载值L3,随后计算SUM3,SUM3=SUM2+L3,即,SUM3与SUM2正相关,且SUM3与L3正相关,初始负载阈值c0等于SUM3除以3,即,初始负载阈值与SUM3正相关,且初始负载阈值与测量次数负相关。
S3001中,当k=1时,SUM1等于第一次负载测量得到的负载值。
上述实施例可以确定一个初始负载阈值,从而可以确定主节点首次进行数据同步的时机。
作为一个可选的实施例,上述主节点的负载值包括处理器负载值和存储器负载值,上述主节点的负载阈值包括处理器负载阈值和存储器负载阈值。
当主节点的处理器和存储器均空闲时,则可判断主节点空闲。
在本实施例中,可以先比较处理器负载值与处理器负载阈值的大小关系,再比较存储器负载值与存储器负载阈值的大小关系,也可以先比较存储器负载值与存储器负载阈值的大小关系,再比较处理器负载值与处理器负载阈值的大小关系,从而可以灵活确定主备节点进行数据同步的时机。
为了进一步说明主备节点如何进行数据同步,下面将结合图4至图6详细描述本申请提供的数据同步方法。
如图4所示,主虚拟机为运行在主节点上的虚拟机,备虚拟机为运行在备节点上的虚拟机,主备虚拟机同步即主备节点的数据同步。其中,
T0-T1:主虚拟机与备虚拟机运行,并记录脏页列表。
T1-T2:主虚拟机与备虚拟机停止运行,各自计算脏页的哈希值。
T2-T3:主虚拟机比较备虚拟机脏页的哈希值。
T3-T4:主虚拟机传输相异的脏页至备份虚拟机。
传输完毕后,主虚拟机释放缓冲的网络输出(相异的脏页数据),并恢复运行,备虚拟机恢复运行。
在上述流程中,T1为进行主备虚拟机同步的时刻,作为一个可选的实施例,图5示出了一种触发主备虚拟机同步的方法流程。
该方法500包括:
S510,记录主备虚拟机同步时的相同脏页比例及负载阈值。
主备虚拟机的同步模块记录每次同步时主虚拟机和备虚拟机的相同内存脏页比例,及触发主备虚拟机同步时的CPU负载阈值和磁盘(input/output,I/O)负载阈值。
S520:以相同脏页比例为权重,对近几次阈值进行加权平均,得到下次主备虚拟机同步的负载阈值。
根据相同脏页比例,赋予阈值相应的权重。然后将最近n次负载阈值乘以其权重,求和得到总体值,再除以n,得到下次触发主备虚拟机同步的负载阈值。
下面以CPU为例进行说明:在第j次主备虚拟机同步结束后,主虚拟机主备同步模块根据第j次主备虚拟机同步时的相同脏页比例wj,赋予这次CPU阈值cj相应的权重wj。将最近n次各CPU阈值乘以相应的权重,然后求和得到总体值,再除以n,得到启动第j+1次主备虚拟机同步时CPU所需达到的负载值,即磁盘I/O负载阈值的调整过程同理。
其中,初始阈值的计算过程如图6所示:
主备同步模块启动后,初始负载累加值SUM0=0,初始负载值CPU_Tick_A0等于0,计数值COUNT=0,计数值为主虚拟机进行负载测量的次数。
然后获取A1时刻CPU的使用时间CPU_Tick_A1,此时,SUM1=SUM0+(CPU_Tick_A1-CPU_Tick_A0),等待Δt时间之后获取A2时刻CPU的使用时间CPU_Tick_A2。
根据SUMk+1=SUMk+Lk+1计算A2时刻的负载累加值SUM2,SUM2=SUM1+(CPU_Tick_A2-CPU_Tick_A1),并判断COUNT是否大于或等于计数值3,该计数值即为负载测量次数阈值,如果是的话计算初始负载阈值c0,c0=SUMk+1/COUNT,否则继续进行负载测量,直至负载测量次数大于或等于负载测量次数阈值为止。
S530:获取当前负载值,将当前负载值与设定的负载阈值进行比较,确定是否进行同步。
主备同步模块获取虚拟机的工作负载,与阈值进行比较并启动同步,过程如下:
1.主节点负责主备虚拟机同步的线程(即,同步线程)调用时钟函数得到虚拟机从启动到第一时刻占用CPU的时间CPU_Tick1。
2.同步线程睡眠Δt1。Δt1是主节点预先设置的值。为了能在较短时间内监测到虚拟机已处于空闲状态同时需避免监测时间过短而产生误差,Δt1例如可以设定为100微秒。
3.责主备虚拟机同步的线程再次调用时钟函数得到虚拟机从启动到第二时刻占用CPU的时间CPU_Tick2。
4.若CPU_Tick1-CPU_Tick1<c,则说明CPU已空闲,进入第5步,否则同步线程睡眠Δt1后继续调用时钟函数得到虚拟机从启动到当前时刻占用CPU的时间,直至当前CPU的占用时间减去上次CPU的占用时间的差值小于CPU负载阈值,其中c为触发主备虚拟机同步CPU所需达到的CPU负载阈值。
5.同步线程通过Linux Netlink接口获取虚拟机从启动到现在占用磁盘I/O的时间disk_time1。
6.同步线程睡眠Δt2。Δt2是主节点预先设置的值。Δt2根据物理磁盘的性能来决定,例如一次磁盘I/O操作需5毫秒,则可以将Δt2设定为5毫秒。
7.同步线程再次通过Linux Netlink接口获取到虚拟机进程的磁盘I/O用时disk_time2。
8.若disk_time2-disk_time1<d,则磁盘I/O已空闲,启动主备同步,否则同步线程睡眠Δt2后继续通过Linux Netlink接口得到虚拟机从启动到当前时刻占用磁盘I/O的时间,直至当前磁盘I/O的占用时间减去上次磁盘I/O的占用时间的差值(即,当前磁盘I/O负载值)小于磁盘I/O负载阈值,其中d为触发主备虚拟机同步时磁盘所需达到的磁盘负载阈值。
上述流程先判断CPU负载是否超过CPU负载阈值,再判断磁盘I/O负载是否超过磁盘I/O负载阈值,作为一个可选的示例,也可以先判断磁盘I/O负载是否超过磁盘I/O负载阈值,再判断CPU负载是否超过CPU负载阈值。此外,如有其它影响主备虚拟机的相同脏页比例的参数,也可以按照上述方法确定是否进行主备虚拟机同步。
发起同步时,主备同步模块生成一个特殊的数据包描述符,包含一个指向空地址的指针,该数据包描述符还用于指示该数据包的长度(零)以及该数据包的类型。同步模块占据缓冲队列的互斥锁并将数据包描述符插入缓冲队列,随后释放队列互斥锁。主备同步时主虚拟机通过比较主备虚拟机的内存脏页传输不一致的内存脏页到备虚拟机。
应理解,上文所描述的各个实施例仅是本申请的部分实现方式,本申请提供的数据同步处理方法所包括的实施例不限于此,下面,将基于上文所描述的共性特征对本申请提供的数据同步处理方法做进一步介绍。
图7示出了本申请提供的数据同步处理方法的另一流程图。
如图7所示,来自客户端的数据包通过主机物理网卡进入主节点后,主节点的终端接入点(terminal access point,TAP)字符串设备(/dev/tapX)变成可读状态。当Qemu主循环线程发现TAP字符串设备可读时,尝试占据全局互斥锁并从该字符串设备读取出客户端数据包。随后Qemu主循环线程生成一个该数据包的描述符,该描述符包括指向该数据包的指针,以及描述该数据包的长度以及该数据包的类型的信息,其中,该数据包的类型为客户端请求。
主节点占据缓冲队列的互斥锁并将数据包描述符填充入缓冲队列,随后释放队列互斥锁。中间层模块负责一致性协商的线程占据缓冲队列的互斥锁,随后查看缓冲队列是否为空。如果缓冲队列非空,则依次读取队列里的成员(即,描述符),将成员所描述的数据包填充入Paxos协议的一致性日志,然后将成员从队列里删除并释放原数据包所占用的内存。负责一致性协商的线程一直读取到队列为空,随后释放队列的互斥锁。释放队列互斥锁后,负责一致性协商的线程查看Paxos协议一致性日志中是否有等待被处理(未协商)的成员,如果有,则对成员按照Paxos算法与其他节点进行协商。
主备同步模块按照图5和图6所示的方法确定进行主备虚拟机同步的时机,当主备同步模块决定触发主备虚拟机同步时,主备同步模块生成一个主备同步请求,并在占据缓冲队列的互斥锁之后将该数据包插入缓冲队列,随后释放队列互斥锁。主备同步请求与来自客户端的数据均需经过一致性协商之后才能被处理。
负责一致性协商的线程由Paxos算法确定数据包协商完成后,将该数据包的描述符写入管道,以便于Qemu主循环线程从管道中读取描述符。Qemu主循环线程从管道中读取描述符之后,根据描述符所指示的数据包的类型对数据包进行相应的处理,例如,当数据包为来自客户端的数据包时,将该数据包通过虚拟网卡发送至虚拟机进行处理。
图8是本申请提供的一种一致性协商方法的示意图。
由于Paxos算法要求至少有三个节点,因此,除了主节点和备节点之外,图8所示的分布式系统还包括观察者节点,从而可以满足Paxos算法的要求,该观察者节点也可以替换为备节点。除此之外,适用于本申请的分布式系统还可以包括更多的备节点。
主节点和备节点虚拟机处于热备状态,并行运行相同的分布式数据库程序。观察者节点虚拟机处于待命状态。三个节点的Qemu均部署有一致性协商模块,对客户端网络请求及主备同步请求按照Paxos算法进行协商。观察者节点只参与Paxos协商工作,不参与主备同步。
备节点上,中间层软件模块负责一致性协商的线程基于Paxos算法消息传递触发的网络I/O事件。当负责一致性协商的线程收到从其它节点发送的协商消息时,按照Paxos算法进行处理。负责一致性协商的线程确定数据包已完成一致性协商后,如果该数据包是客户端请求,则将该数据包发往虚拟机,如果该数据包是主备同步请求,负责一致性协商的线程通知主备同步模块发起同步。
观察者节点上,中间层软件模块负责一致性协商的线程也基于Paxos算法消息传递触发的网络I/O事件。当负责一致性协商的线程收到从其它节点发送的协商消息时,按照Paxos算法进行处理。由于观察者节点虚拟机处于待命状态,所以负责一致性协商的线程确定数据包已完成一致性协商后,无论完成协商的数据包是客户端请求还是主备同步请求,均舍弃。
图9是本申请提供的数据同步处理方法的再一流程图。
S1:主节点读取客户端数据包。
当客户端数据包到达主节点的物理网卡后,主节点(即,宿主机操作系统)调用物理网卡的驱动程序,在其中利用Linux内核中的软件网桥,实现数据的转发。在软件网桥这一层,主节点会判断数据包是发往哪个设备的,同时调用网桥的发送函数,向对应的端口号发送数据包。若数据包是发往虚拟机的,则要通过TAP设备进行转发。TAP等同于一个以太网设备,它操作第二层数据包,即以太网数据帧。TAP设备的字符设备(/dev/tapX)负责将数据包在内核空间和用户空间转发。
Qemu主循环线程不停地循环,通过“select系统调用”函数判断哪些文件描述符的状态发生变化,包括TAP设备文件描述符和管道设备文件描述的状态。当Qemu主循环线程发现TAP字符串设备可读时,尝试占据全局互斥锁并从字符串设备读取出客户端数据包。随后Qemu主循环生成一个该数据包的描述符,该描述符包含指向该数据包的指针,还包含指示该数据包的长度以及该数据包的类型的信息,此处数据包的类型为客户端数据包。
S2:主节点发起主备同步生成同步请求数据包。
主节点Qemu的主备同步模块内部署有阈值自动调整算法(如S301~S304所示)。主节点的主备同步模块监测虚拟机的CPU负载和磁盘I/O负载,通过比较负载阈值和虚拟机负载来判断是否启动同步。
主节点发起主备同步的流程如图4至图6所示。
主节点发起同步时,主备同步模块生成一个特殊的数据包描述符,该描述符包含一个指向空地址的指针,还包含指示该数据包的长度(零)以及该数据包的类型的信息,此处数据包的类型为为主备同步请求。同步模块占据缓冲队列的互斥锁并将数据包描述符填充入缓冲队列,随后释放队列互斥锁。主虚拟机在同步时通过比较主备虚拟机内存脏页,只传输不一致的内存脏页到备虚拟机。
S3:主节点将数据包描述符插入缓冲队列并对数据包进行一致性协商。
将数据包描述符插入缓冲队列并对数据包进行一致性协商流程如图10所示。
图10包括两个部分,一部分是Qemu主循环线程的处理流程,该处理流程包括3个步骤,分别为占有缓冲队列的互斥锁,将数据包描述符填充入缓冲队列,随后释放队列互斥锁。
另外一部分是一致性协商线程的处理流程。中间层负责一致性协商的线程基于事件(定时器事件或网络I/O事件)驱动。例如,当定时器事件触发时,一致性协商线程先占据缓冲队列的互斥锁,随后查看缓冲队列是否为空。如果缓冲队列非空,一致性协商线程依次读取队列里的成员,将成员所描述的数据包插入Paxos协议的一致性日志,然后将成员从队列里删除并释放原数据包所占用的内存。一致性协商线程一直读取到队列为空,随后释放队列的互斥锁。释放队列互斥锁后,一致性协商线程查看Paxos协议一致性日志中是否有等待被处理(未协商)的成员,如果有,则对待处理的成员按照Paxos算法与其它节点进行协商。
S4:主节点判断协商达成后判断数据包类型。
一致性协商线程需监听网络I/O事件,该网络I/O事件由接收到的Paxos算法消息触发。当一致性协商线程收到其它节点发送的协商消息时,需按照Paxos算法进行处理。若一致性协商线程由Paxos算法确定某数据包已完成一致性协商,根据该数据包中包含的信息判断其类型,其中,一致性协商线程在对原始数据包(插入缓冲队列前的数据包)进行一致性协商时,会对原始数据包进行封装,封装后得到的数据包除了包含原始数据包,还包含其它信息,该其它信息例如是指示原始数据包类型的信息,一致性协商线程将封装后的数据包发送至备节点。
S5:客户端数据包被转发至Qemu主循环,Qemu主循环对客户端数据包进行虚拟网卡(如RTL8139)逻辑操作。
如果完成协商的数据包是客户端数据包,则一致性协商线程先在与Qemu主循环联系的管道写入该数据包的长度,然后再写入该数据包内容。
当Qemu主循环线程发现管道的文件描述符变得可读后,占用全局互斥锁并从管道里先读取出一个整数类型大小的数据,此数据即为管道里发送过来的数据包的长度。根据得到的整数,Qemu主循环线程从管道里读取相应长度的数据,即数据包。
Qemu主循环线程随后调用RTL8139_do_receiver函数,在这个函数中完成相当于硬件RTL8139网卡的逻辑操作。基于内核的虚拟机(kernel-based virtual machine,KVM)通过模拟I/O指令操作虚拟RTL8139将数据包拷贝到客户地址空间,放在相应的I/O地址。操作完成后,Qemu主循环线程释放全局互斥锁。
S6:虚拟机中的应用程序处理客户端数据包。
若客户端数据包为数据查询请求,则虚拟机中的数据库程序接收到该客户端数据包后执行查询动作,并且返回执行结果。
S7:开始虚拟机主备同步(数据包为同步请求)。
如果完成协商的数据包是主备同步请求,则一致性协商线程通知主备同步模块发起同步。产生虚拟机准备同步数据帧,并且将该数据帧放入到主节点的缓冲队列中发送。
上述实施例描述的系统架构以及业务场景是为了更加清楚的说明本申请的技术方案,并不构成对于本申请的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本申请提供的技术方案对于类似的技术问题,同样适用。
值得注意的是,在本发明实施例中,主备同步模块可通过Qemu的第三线程实现,一致性协商层模块可通过Qemu的第二线程实现,其中第二线程和第三线程均为Qemu的工作者线程。
以上结合图1至图10详细说明了本申请提供的数据同步处理的方法。可以理解的是,主节点为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请可以根据上述方法示例对主节点进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
图11示出了本申请提供的一种可能的数据同步处理装置的结构示意图。该数据同步处理装置1100可以是主节点包括的软件模块或硬件模块,该数据同步处理装置1100包括:第一线程控制单元1101和第一线程控制单元1102。第一线程控制单元1101和第一线程控制单元1102用于对数据同步处理装置1100的动作进行控制管理,例如,第一线程控制单元1101和第一线程控制单元1102用于支持数据同步处理装置1100执行图3的各个步骤和/或用于本文所描述的技术的其它过程。
下面举出几个数据同步处理装置1100的实施例。
第一线程控制单元1101,用于获取第一待处理信息,第一待处理信息为第一数据包或第一指示信息,第一指示信息用于指示第一数据包,其中,第一线程控制单元1101用于执行非线程安全代码;以及将第一待处理信息写入缓冲模块;
第二线程控制单元1102,用于对第一待处理信息执行一致性协商处理,该一致性协商处理用于同步主节点和备节点处理第一数据包的顺序;
第一线程控制单元1101还用于,根据第二线程控制单元1102执行一致性协商处理的结果处理第一数据包。
数据同步处理装置1100可以通过第一线程控制单元1101和第二线程控制单元1102执行代码以完成相应的任务。第一线程控制单元1101用于执行非线程安全代码,因此,第一线程控制单元1101在执行操作时需要占据互斥锁,例如,第一线程控制单元1101在获取第一待处理信息之前需要占据全局互斥锁,本申请对第一线程控制单元1101获取第一待处理信息的方式不作限定。第一线程控制单元1101获取第一待处理信息之后,将第一待处理信息写入缓冲模块,该缓冲模块可以是缓冲队列,也可以是用于缓冲第一待处理信息的堆(heap)或栈(stack),还可以是其它用于缓冲第一待处理信息的数据结构,本申请对此不作限定。第一线程控制单元1101将第一待处理信息写入缓冲模块后即可释放全局互斥锁,其它线程可以占据全局互斥锁并调度虚拟机执行其它任务。第二线程控制单元1102读取缓冲模块中的至少一个待处理信息,并基于一致性协商协议确定主备节点处理数据包的共同顺序,随后,第一线程控制单元1101占据全局互斥锁并按照第二线程控制单元1102确定的处理顺序处理数据包。由于主备节点进行一致性协商的工作是由第二线程控制单元1102完成的,第二线程控制单元1102工作时无需占据全局互斥锁,因此,配置有数据同步处理装置1100的主节点在进行主备虚拟机的同步处理时利用主虚拟机处理其它任务,相对于现有技术中的主节点具有较高的性能。
可选地,第二线程控制单元1102具体用于:
从缓冲模块中读取所述第一待处理信息;
对第一待处理信息执行一致性协商处理,确定第一数据包的被处理顺序;
根据第一数据包的被处理顺序将第一待处理信息写入管道,该管道用于第一线程控制单元1101读取第一待处理信息。
第一数据包可以是从客户端获取的数据包,也可以是主节点生成的数据包,还可以是其它数据包,本申请对第一数据包的具体内容不作限定。由于数据同步处理装置1100执行的一些程序代码是非线程安全的,因此,第二线程控制单元1102作为一个工作者线程不能直接调用数据同步处理装置1100的程序代码,本实施例提供的一致性协商处理方案在第一线程控制单元1101和第二线程控制单元1102之间建立一个用于联系的管道,第二线程控制单元1102将一致性协商的结果写入管道,以便于第一线程控制单元1101通过管道读取一致性协商的结果,从而可以在完成一致性协商的同时避免对数据同步处理装置1100的安全性造成影响。
可选地,第二线程控制单元1102具体还用于:在预设时间从所述缓冲模块中读取所述第一待处理信息。
在本实施例中,预设时间例如是定时器事件对应的时间,第二线程控制单元1102可以基于定时器事件的触发从缓冲模块中读取第一待处理信息,主节点可以设置不同的定时器事件,因此,上述实施例可以灵活触发第二线程控制单元1102进行一致性协商处理。
可选地,从缓冲模块中读取第一待处理信息之前,第二线程控制单元1102具体还用于:获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问该缓冲模块;
对第一待处理信息执行一致性协商处理之后,第二线程控制单元1102具体还用于:当缓冲模块中待处理信息的数量为0时,释放第二线程获取的该缓冲模块的独占权限。
当第二线程控制单元1102开始工作时,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程控制单元在同一时刻访问缓冲模块。当缓冲模块中的待处理信息数量为0时第二线程控制单元1102释放队列互斥锁,其它线程可以继续向缓冲模块中写入新的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,第二线程控制单元1102具体还用于:
确定缓冲模块中待处理信息的数量;
当待处理信息的数量大于0时,将待处理信息对应的数据包写入一致性日志并删除待处理信息,该一致性日志用于缓存待处理信息对应的数据包,一致性日志中的数据包的先后顺序与一致性日志中的数据包的被处理顺序相对应,该待处理信息包括第一待处理信息,该待处理信息对应的数据包包括第一数据包;
发送包括第一数据包的一致性协商请求,一致性协商请求用于请求备节点接受第一数据包的被处理顺序;
接收协商完成消息,该协商完成消息用于指示第一数据包的被处理顺序已被接受。
第二线程控制单元1102读取待处理信息后执行一致性协商处理,随后删除缓冲模块中的待处理信息,这样,可以保证第二线程控制单元1102每次读取的缓冲模块中的指示信息都是新的待处理信息,避免第二线程控制单元1102读到被处理过的待处理信息,从而提高了一致性协商处理的效率。
可选地,将第一待处理信息写入缓冲模块之前,第一线程控制单元1101还用于:获取缓冲模块的独占权限,缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问该缓冲模块;
将第一待处理信息写入缓冲模块之后,第一线程控制单元1101还用于:释放第一线程控制单元1101获取的缓冲模块的独占权限。
第一线程控制单元1101在写入缓冲模块之前,首先占据缓冲模块的独占权限,该独占权限也可以称为队列互斥锁,用于禁止两个或两个以上的线程控制单元在同一时刻访问缓冲模块。当第一线程控制单元1101写入缓冲模块完成后释放队列互斥锁,第二线程控制单元1102可以占据队列互斥锁并读取缓冲模块中的待处理信息。上述实施例可以避免新的待处理信息插入已经完成一致性协商处理的待处理信息的队列中,从而提高了一致性协商处理的可靠性和效率。
可选地,第一虚拟设备中运行有主数据库,备节点设置有第二虚拟设备,第二虚拟设备中运行有备用数据库,第一数据包携带有客户端发送至主节点的针对主数据库的访问请求,
第一线程控制单元1101具体还用于:从主节点的物理网卡获取第一待处理信息;将第一数据包同时发送至主数据库和备用数据库,以使得主节点和备节点按照相同的顺序处理第一数据包。
可选地,所述装置还包括第三线程控制单元,第三线程控制单元用于:
获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例,n次同步操作时主节点的负载阈值为c1,...,cn,该n次同步操作时主节点与备节点的相同脏页比例为w1,...,wn,其中,c1与w1对应,...,cn与wn对应,n为大于或等于2的正整数;
确定wm,wm为n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数;
获取Lm,Lm为当前时刻主节点的负载值;
若Lm≤wm,则产生同步请求,该同步请求用于请求同步主节点和备节点的脏页;
将同步请求写入所述缓冲模块;
第二线程控制单元1102具体还用于:
对同步请求执行一致性协商处理,对同步请求执行一致性协商处理的结果用于同步主节点和备节点处理同步请求的顺序;
第一线程控制单元1101具体还用于:
根据对同步请求执行一致性协商处理的结果处理同步请求。
本实施例提供的数据同步的装置使用的负载阈值为一个动态的较优选的阈值,可以在进行数据同步时使得虚拟机资源利用率与主备节点的相同脏页比例达到一个较佳的平衡点。
可选地,获取n次同步操作时主节点的负载阈值和主节点与备节点的相同脏页比例之前,第三线程控制单元具体还用于:
获取SUMk,SUMk为主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数。
当k≥Tcount时,确定c0,Tcount为负载测量次数阈值,c0为主节点首次同步操作的负载阈值,c0=SUMk÷k。或者,
当k<Tcount时,获取Lk+1,Lk+1为第k+1次负载测量得到的主节点的负载值,Tcount为负载测量次数阈值;获取SUMk+1,SUMk+1=SUMk+Lk+1;当k+1≥Tcount时,确定c0,c0为主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
上述实施例可以确定一个初始负载阈值,从而可以确定主节点首次进行数据同步的时机。
可选地,上述主节点的负载值包括处理器负载值和存储器负载值,上述主节点的负载阈值包括处理器负载阈值和存储器负载阈值。
在本实施例中,可以先比较处理器负载值与处理器负载阈值的大小关系,再比较存储器负载值与存储器负载阈值的大小关系,也可以先比较存储器负载值与存储器负载阈值的大小关系,再比较处理器负载值与处理器负载阈值的大小关系,从而可以灵活确定主备节点进行数据同步的时机。
图12示出了本申请所涉及的主节点的另外一种可能的示意图。
参阅图12所示,该主节点1200包括:处理器1202、收发器1203、存储器1201。其中,收发器1203、处理器1202以及存储器1201可以通过内部连接通路相互通信,传递控制和/或数据信号。
处理单元1102可以是处理器或控制器,例如可以是中央处理器(centralprocessing unit,CPU),通用处理器,数字信号处理器(digital signal processor,DSP),专用集成电路(application-specific integrated circuit,ASIC),现场可编程门阵列(rield programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信单元1103可以是收发器、收发电路等。存储单元1101可以是存储器。
本领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不加赘述。
本申请提供的主节点1200,通过第二线程处理主备节点一致性协商工作,第二线程工作时无需占据全局互斥锁,因此,主节点1200可以在进行主备虚拟机的同步操作时利用虚拟机处理其它任务,提高了主节点的性能。
装置和方法实施例中的主节点完全对应,由相应的模块执行相应的步骤,例如通信模块方法执行方法实施例中发送或接收的步骤,除发送接收外的其它步骤可以由处理模块或处理器执行。具体模块的功能可以参考相应的方法实施例,不再详述。
在本申请各个实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施过程构成任何限定。
值得注意的是,在本发明实施例中,也可以通过容器实现虚拟机的功能,其中,容器和虚拟机均可称为虚拟设备。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,RAM)、闪存、只读存储器(readonly memory,ROM)、可擦除可编程只读存储器(erasable programmable ROM,EPROM)、电可擦可编程只读存储器(electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于主节点中。当然,处理器和存储介质也可以作为分立组件存在于主节点中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital versatile disc,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。
Claims (23)
1.一种数据同步处理方法,其特征在于,应用于计算机系统中的主节点的模拟器,所述模拟器用于为所述主节点的第一虚拟设备模拟硬件设备,所述计算机系统还包括与所述主节点连接的备节点,所述方法包括:
通过所述模拟器的第一线程获取第一待处理信息,所述第一待处理信息为第一数据包或第一指示信息,所述第一指示信息用于指示所述第一数据包,其中,所述第一线程为执行非线程安全代码的线程;
通过所述第一线程将所述第一待处理信息写入缓冲模块;
通过所述模拟器的第二线程对所述第一待处理信息执行一致性协商处理,所述一致性协商处理用于同步所述主节点和所述备节点处理所述第一数据包的顺序;
通过所述第一线程根据一致性协商处理的结果处理所述第一数据包。
2.根据权利要求1所述的方法,其特征在于,所述通过模拟器的第二线程对所述第一待处理信息执行一致性协商处理,包括:
通过所述第二线程从所述缓冲模块中读取所述第一待处理信息;
通过所述第二线程对所述第一待处理信息执行一致性协商处理,确定所述第一数据包的被处理顺序;
根据所述第一数据包的被处理顺序通过所述第二线程将所述第一待处理信息写入管道,所述管道用于所述第一线程读取所述第一待处理信息。
3.根据权利要求2所述的方法,其特征在于,所述通过所述第二线程从所述缓冲模块中读取所述第一待处理信息,包括:
在预设时间通过所述第二线程从所述缓冲模块中读取所述第一待处理信息。
4.根据权利要求2或3所述的方法,其特征在于,
所述通过所述第二线程从所述缓冲模块中读取所述第一待处理信息之前,所述方法还包括:
通过所述第二线程获取所述缓冲模块的独占权限,所述缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问所述缓冲模块;
所述通过所述第二线程对所述第一待处理信息执行一致性协商处理之后,所述方法还包括:
当所述缓冲模块中待处理信息的数量为0时,通过所述第二线程释放所述第二线程获取的所述缓冲模块的独占权限。
5.根据权利要求2或3所述的方法,其特征在于,所述通过所述第二线程对所述第一待处理信息执行一致性协商处理,包括:
通过所述第二线程确定所述缓冲模块中待处理信息的数量;
当所述待处理信息的数量大于0时,通过所述第二线程将所述待处理信息对应的数据包写入一致性日志并删除所述待处理信息,所述一致性日志用于缓存所述待处理信息对应的数据包,所述一致性日志中的数据包的先后顺序与所述一致性日志中的数据包的被处理顺序相对应,所述待处理信息包括所述第一待处理信息,所述待处理信息对应的数据包包括所述第一数据包;
通过所述第二线程发送包括所述第一数据包的一致性协商请求,所述一致性协商请求用于请求所述备节点接受所述第一数据包的被处理顺序;
通过所述第二线程接收协商完成消息,所述协商完成消息用于指示所述第一数据包的被处理顺序已被接受。
6.根据权利要求1至3中任一项所述的方法,其特征在于,
所述通过所述第一线程将所述第一待处理信息写入缓冲模块之前,所述方法还包括:
通过所述第一线程获取所述缓冲模块的独占权限,所述缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问所述缓冲模块;
所述通过所述第一线程将所述第一待处理信息写入缓冲模块之后,所述方法还包括:
通过所述第一线程释放所述第一线程获取的所述缓冲模块的独占权限。
7.根据权利要求1至3中任一项所述的方法,其特征在于,所述第一虚拟设备中运行有主数据库,所述备节点设置有第二虚拟设备,所述第二虚拟设备中运行有备用数据库,所述第一数据包携带有客户端发送至所述主节点的针对所述主数据库的访问请求,
所述通过所述模拟器的第一线程获取第一待处理信息,包括:
通过所述第一线程从所述主节点的物理网卡获取所述第一待处理信息;
所述通过所述第一线程根据一致性协商处理的结果处理所述第一数据包,包括:
通过所述第一线程将所述第一数据包同时发送至所述主数据库和所述备用数据库,以使得所述主节点和所述备节点按照相同的顺序处理所述第一数据包。
8.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
通过所述模拟器的第三线程获取n次同步操作时所述主节点的负载阈值和所述主节点与所述备节点的相同脏页比例,所述n次同步操作时所述主节点的负载阈值为c1,…,cn,所述n次同步操作时所述主节点与所述备节点的相同脏页比例为w1,…,wn,其中,c1与w1对应,…,cn与wn对应,n为大于或等于2的正整数;
通过所述第三线程确定wm,wm为所述n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数;
通过所述第三线程获取Lm,Lm为所述当前时刻所述主节点的负载值;
若Lm≤wm,则通过所述第三线程产生同步请求,所述同步请求用于请求同步所述主节点和所述备节点的脏页;
通过所述第三线程将所述同步请求写入所述缓冲模块;
通过所述第二线程对所述同步请求执行一致性协商处理,对所述同步请求执行一致性协商处理的结果用于同步所述主节点和所述备节点处理所述同步请求的顺序;
通过所述第一线程根据对所述同步请求执行一致性协商处理的结果处理所述同步请求。
9.根据权利要求8所述的方法,其特征在于,所述通过第三线程获取n次同步操作时所述主节点的负载阈值和所述主节点与所述备节点的相同脏页比例之前,所述方法还包括:
通过所述第三线程获取SUMk,SUMk为所述主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数;
当k≥Tcount时,通过所述第三线程确定c0,Tcount为负载测量次数阈值,c0为所述主节点首次同步操作的负载阈值,c0=SUMk÷k;或者,
当k<Tcount时,通过所述第三线程获取Lk+1,Lk+1为第k+1次负载测量得到的所述主节点的负载值,Tcount为负载测量次数阈值;通过所述第三线程获取SUMk+1,SUMk+1=SUMk+Lk+1;当k+1≥Tcount时,通过所述第三线程确定c0,c0为所述主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
10.根据权利要求8所述的方法,其特征在于,所述主节点的负载值包括处理器负载值,所述主节点的负载阈值包括处理器负载阈值。
11.根据权利要求8所述的方法,其特征在于,所述主节点的负载值包括存储器负载值,所述主节点的负载阈值包括存储器负载阈值。
12.一种数据同步处理装置,其特征在于,应用于计算机系统中的主节点的模拟器,所述模拟器用于为所述主节点的第一虚拟设备模拟硬件设备,所述计算机系统还包括与所述主节点连接的备节点,所述装置包括:
第一线程控制单元,用于获取第一待处理信息,所述第一待处理信息为第一数据包或第一指示信息,所述第一指示信息用于指示所述第一数据包,其中,所述第一线程控制单元用于执行非线程安全代码;以及将所述第一待处理信息写入缓冲模块;
第二线程控制单元,用于对所述第一待处理信息执行一致性协商处理,所述一致性协商处理用于同步所述主节点和所述备节点处理所述第一数据包的顺序;
所述第一线程控制单元还用于,根据第二线程控制单元执行一致性协商处理的结果处理所述第一数据包。
13.根据权利要求12所述的装置,其特征在于,所述第二线程控制单元具体用于:
从所述缓冲模块中读取所述第一待处理信息;
对所述第一待处理信息执行一致性协商处理,确定所述第一数据包的被处理顺序;
根据所述第一数据包的被处理顺序将所述第一待处理信息写入管道,所述管道用于所述第一线程控制单元读取所述第一待处理信息。
14.根据权利要求13所述的装置,其特征在于,所述第二线程控制单元具体还用于:
在预设时间从所述缓冲模块中读取所述第一待处理信息。
15.根据权利要求13或14所述的装置,其特征在于,
所述从所述缓冲模块中读取所述第一待处理信息之前,所述第二线程控制单元具体还用于:
获取所述缓冲模块的独占权限,所述缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问所述缓冲模块;
所述对所述第一待处理信息执行一致性协商处理之后,所述第二线程控制单元具体还用于:
当所述缓冲模块中待处理信息的数量为0时,释放所述第二线程获取的所述缓冲模块的独占权限。
16.根据权利要求13或14所述的装置,其特征在于,所述第二线程控制单元具体还用于:
确定所述缓冲模块中待处理信息的数量;
当所述待处理信息的数量大于0时,将所述待处理信息对应的数据包写入一致性日志并删除所述待处理信息,所述一致性日志用于缓存所述待处理信息对应的数据包,所述一致性日志中的数据包的先后顺序与所述一致性日志中的数据包的被处理顺序相对应,所述待处理信息包括所述第一待处理信息,所述待处理信息对应的数据包包括所述第一数据包;
发送包括所述第一数据包的一致性协商请求,所述一致性协商请求用于请求所述备节点接受所述第一数据包的被处理顺序;
接收协商完成消息,所述协商完成消息用于指示所述第一数据包的被处理顺序已被接受。
17.根据权利要求12至14中任一项所述的装置,其特征在于,
所述将所述第一待处理信息写入缓冲模块之前,所述第一线程控制单元还用于:
获取所述缓冲模块的独占权限,所述缓冲模块的独占权限用于禁止两个或两个以上的线程在同一时刻访问所述缓冲模块;
所述将所述第一待处理信息写入缓冲模块之后,所述第一线程控制单元还用于:
释放所述第一线程控制单元获取的所述缓冲模块的独占权限。
18.根据权利要求12至14中任一项所述的装置,其特征在于,所述第一虚拟设备中运行有主数据库,所述备节点设置有第二虚拟设备,所述第二虚拟设备中运行有备用数据库,所述第一数据包携带有客户端发送至所述主节点的针对所述主数据库的访问请求,
所述第一线程控制单元具体还用于:
从所述主节点的物理网卡获取所述第一待处理信息;
将所述第一数据包同时发送至所述主数据库和所述备用数据库,以使得所述主节点和所述备节点按照相同的顺序处理所述第一数据包。
19.根据权利要求12至14中任一项所述的装置,其特征在于,所述装置还包括第三线程控制单元,
所述第三线程控制单元用于:
获取n次同步操作时所述主节点的负载阈值和所述主节点与所述备节点的相同脏页比例,所述n次同步操作时所述主节点的负载阈值为c1,…,cn,所述n次同步操作时所述主节点与所述备节点的相同脏页比例为w1,…,wn,其中,c1与w1对应,…,cn与wn对应,n为大于或等于2的正整数;
确定wm,wm为所述n次同步操作之后的当前时刻的负载阈值,wm=[(c1×w1)+...+(cn×wn)]÷n,m为正整数;
获取Lm,Lm为所述当前时刻所述主节点的负载值;
若Lm≤wm,则产生同步请求,所述同步请求用于请求同步所述主节点和所述备节点的脏页;
将所述同步请求写入所述缓冲模块;
所述第二线程控制单元具体还用于:
对所述同步请求执行一致性协商处理,对所述同步请求执行一致性协商处理的结果用于同步所述主节点和所述备节点处理所述同步请求的顺序;
所述第一线程控制单元具体还用于:
根据对所述同步请求执行一致性协商处理的结果处理所述同步请求。
20.根据权利要求19所述的装置,其特征在于,所述获取n次同步操作时所述主节点的负载阈值和所述主节点与所述备节点的相同脏页比例之前,所述第三线程控制单元具体还用于:
获取SUMk,SUMk为所述主节点的第一次负载测量得到的负载值至第k次负载测量得到的负载值的和,k为正整数;
当k≥Tcount时,确定c0,Tcount为负载测量次数阈值,c0为所述主节点首次同步操作的负载阈值,c0=SUMk÷k;或者,
当k<Tcount时,获取Lk+1,Lk+1为第k+1次负载测量得到的所述主节点的负载值,Tcount为负载测量次数阈值;获取SUMk+1,SUMk+1=SUMk+Lk+1;当k+1≥Tcount时,确定c0,c0为所述主节点首次同步操作的负载阈值,c0=SUMk+1÷(k+1)。
21.根据权利要求19所述的装置,其特征在于,所述主节点的负载值包括处理器负载值,所述主节点的负载阈值包括处理器负载阈值。
22.根据权利要求19所述的装置,其特征在于,所述主节点的负载值包括存储器负载值,所述主节点的负载阈值包括存储器负载阈值。
23.一种数据同步处理装置,其特征在于,包括:处理器,所述处理器与存储器耦合;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器中存储的计算机程序,以使得所述装置执行如权利要求1-11中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2018/082225 WO2019195969A1 (zh) | 2018-04-08 | 2018-04-08 | 数据同步处理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110622478A CN110622478A (zh) | 2019-12-27 |
CN110622478B true CN110622478B (zh) | 2020-11-06 |
Family
ID=68162760
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880004742.8A Active CN110622478B (zh) | 2018-04-08 | 2018-04-08 | 数据同步处理的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110622478B (zh) |
WO (1) | WO2019195969A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10860618B2 (en) | 2017-09-25 | 2020-12-08 | Splunk Inc. | Low-latency streaming analytics |
US10997180B2 (en) | 2018-01-31 | 2021-05-04 | Splunk Inc. | Dynamic query processor for streaming and batch queries |
US10936585B1 (en) | 2018-10-31 | 2021-03-02 | Splunk Inc. | Unified data processing across streaming and indexed data sets |
US11238048B1 (en) | 2019-07-16 | 2022-02-01 | Splunk Inc. | Guided creation interface for streaming data processing pipelines |
CN111352944B (zh) * | 2020-02-10 | 2023-08-18 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备与存储介质 |
US11614923B2 (en) | 2020-04-30 | 2023-03-28 | Splunk Inc. | Dual textual/graphical programming interfaces for streaming data processing pipelines |
CN111767339B (zh) * | 2020-05-11 | 2023-06-30 | 北京奇艺世纪科技有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
CN112714185B (zh) * | 2020-12-30 | 2022-03-18 | 威创集团股份有限公司 | 一种接入坐席系统 |
CN112954133B (zh) * | 2021-01-20 | 2023-03-14 | 浙江大华技术股份有限公司 | 同步节点时间的方法、装置、电子装置和存储介质 |
US11650995B2 (en) | 2021-01-29 | 2023-05-16 | Splunk Inc. | User defined data stream for routing data to a data destination based on a data route |
US11687487B1 (en) * | 2021-03-11 | 2023-06-27 | Splunk Inc. | Text files updates to an active processing pipeline |
US11663219B1 (en) | 2021-04-23 | 2023-05-30 | Splunk Inc. | Determining a set of parameter values for a processing pipeline |
US11989592B1 (en) | 2021-07-30 | 2024-05-21 | Splunk Inc. | Workload coordinator for providing state credentials to processing tasks of a data processing pipeline |
CN115454657A (zh) * | 2022-08-12 | 2022-12-09 | 科东(广州)软件科技有限公司 | 一种用户态虚拟机任务间的同步与互斥的方法及装置 |
CN115643237B (zh) * | 2022-10-13 | 2023-08-11 | 北京华建云鼎科技股份公司 | 一种用于会议的数据处理系统 |
CN117632799A (zh) * | 2023-12-05 | 2024-03-01 | 合芯科技有限公司 | 数据处理方法、装置、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101609419A (zh) * | 2009-06-29 | 2009-12-23 | 北京航空航天大学 | 虚拟机持续在线迁移的数据备份方法及装置 |
CN102279766A (zh) * | 2011-08-30 | 2011-12-14 | 华为技术有限公司 | 并行模拟多个处理器的方法及系统、调度器 |
CN103678024A (zh) * | 2012-09-18 | 2014-03-26 | 横河电机株式会社 | 容错系统和用于执行容错的方法 |
CN104683444A (zh) * | 2015-01-26 | 2015-06-03 | 电子科技大学 | 一种数据中心多虚拟机的数据迁移方法 |
CN104915151A (zh) * | 2015-06-02 | 2015-09-16 | 杭州电子科技大学 | 多虚拟机系统中一种主动共享的内存超量分配方法 |
CN106168885A (zh) * | 2016-07-18 | 2016-11-30 | 浪潮(北京)电子信息产业有限公司 | 一种基于lvm的逻辑卷动态扩容的方法及系统 |
US9740563B2 (en) * | 2013-05-24 | 2017-08-22 | International Business Machines Corporation | Controlling software processes that are subject to communications restrictions by freezing and thawing a computational process in a virtual machine from writing data |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101773166B1 (ko) * | 2011-02-21 | 2017-08-30 | 삼성전자주식회사 | 가상 머신 스케줄 시점 조절 장치 및 방법 |
CN103309858B (zh) * | 2012-03-06 | 2016-04-13 | 深圳市腾讯计算机系统有限公司 | 一种多线程日志管理的方法及装置 |
CN103501290B (zh) * | 2013-09-18 | 2017-10-24 | 万达信息股份有限公司 | 一种基于动态备份虚拟机的高可靠服务系统构建方法 |
CN105224391B (zh) * | 2015-10-12 | 2018-10-12 | 浪潮(北京)电子信息产业有限公司 | 一种虚拟机的在线备份方法及系统 |
CN105607962B (zh) * | 2015-10-22 | 2019-03-19 | 华为技术有限公司 | 一种虚拟机备份的方法和装置 |
CN107729129A (zh) * | 2017-09-18 | 2018-02-23 | 惠州Tcl移动通信有限公司 | 一种基于同步锁的多线程处理方法、终端以及存储介质 |
-
2018
- 2018-04-08 WO PCT/CN2018/082225 patent/WO2019195969A1/zh active Application Filing
- 2018-04-08 CN CN201880004742.8A patent/CN110622478B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101609419A (zh) * | 2009-06-29 | 2009-12-23 | 北京航空航天大学 | 虚拟机持续在线迁移的数据备份方法及装置 |
CN102279766A (zh) * | 2011-08-30 | 2011-12-14 | 华为技术有限公司 | 并行模拟多个处理器的方法及系统、调度器 |
CN103678024A (zh) * | 2012-09-18 | 2014-03-26 | 横河电机株式会社 | 容错系统和用于执行容错的方法 |
US9740563B2 (en) * | 2013-05-24 | 2017-08-22 | International Business Machines Corporation | Controlling software processes that are subject to communications restrictions by freezing and thawing a computational process in a virtual machine from writing data |
CN104683444A (zh) * | 2015-01-26 | 2015-06-03 | 电子科技大学 | 一种数据中心多虚拟机的数据迁移方法 |
CN104915151A (zh) * | 2015-06-02 | 2015-09-16 | 杭州电子科技大学 | 多虚拟机系统中一种主动共享的内存超量分配方法 |
CN106168885A (zh) * | 2016-07-18 | 2016-11-30 | 浪潮(北京)电子信息产业有限公司 | 一种基于lvm的逻辑卷动态扩容的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2019195969A1 (zh) | 2019-10-17 |
CN110622478A (zh) | 2019-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110622478B (zh) | 数据同步处理的方法和装置 | |
CN112596960B (zh) | 一种分布式存储服务切换方法及装置 | |
JP6557323B2 (ja) | データベース障害時のデータ記憶 | |
CN109743358A (zh) | 异步消息接口熔断控制方法、装置、计算机设备及存储介质 | |
US9798639B2 (en) | Failover system and method replicating client message to backup server from primary server | |
WO2018049873A1 (zh) | 一种应用调度方法及装置 | |
TWI624757B (zh) | 資料處理方法、資料處理系統與電腦程式產品 | |
CN110096220B (zh) | 一种分布式存储系统、数据处理方法和存储节点 | |
US10169102B2 (en) | Load calculation method, load calculation program, and load calculation apparatus | |
US20140068165A1 (en) | Splitting a real-time thread between the user and kernel space | |
CN107291527B (zh) | 预拷贝迁移停止预判方法及装置 | |
US20200249994A1 (en) | Leader election with lifetime term | |
CN114564435A (zh) | 异构多核芯片的核间通信方法、装置及介质 | |
CN114928579A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
JP2015530679A (ja) | 高効率アトミック演算を使用した方法および装置 | |
CN111488373B (zh) | 用于处理请求的方法和系统 | |
CN116304390B (zh) | 时序数据处理方法、装置、存储介质及电子设备 | |
JP6577901B2 (ja) | 計算機システムおよびシステム状態再現方法 | |
CN110209548B (zh) | 服务控制方法、系统、电子设备及计算机可读存储介质 | |
EP3396553B1 (en) | Method and device for processing data after restart of node | |
CN114296891A (zh) | 任务的调度方法、系统、计算设备、存储介质及程序产品 | |
US20170346753A1 (en) | Method and device for forwarding data messages | |
JPWO2006001051A1 (ja) | マルチプロセッサ装置及びその制御方法 | |
CN114039981A (zh) | 一种消息处理方法、装置、服务器及存储介质 | |
CN115698955A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220209 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |