数据处理方法、服务器和计算机可读存储介质与流程

专利2022-06-29  64


本发明涉及集群的数据处理领域,具体而言,涉及一种数据处理方法、服务器和计算机可读存储介质。



背景技术:

目前的主从高可用方案中,存在异步和同步两种处理数据的方式:如果是异步处理的方式,主服务器宕机会直接导致集群的数据丢失;而假设集群切换为同步处理的方式,除了会引起集群的性能问题,主从切换检测的步骤繁杂,并且无法保证集群数据的一致性,会产生脏数据,需要后续做数据修复才能恢复集群数据;另外,主从切换存在较大延时,为了减少延时,需要依赖第三方服务,若第三方服务的节点故障或者网络分区,会导致集群的主从切换请求失败,进而导致集群不可用,无法保障集群的高可用性。

为了保证集群的高可用性,一般使用数据对等的高可用方案,其通过主服务器与客户端、数据库、从服务器分别连接,当主服务器接收到客户端的请求时,主服务器将该请求存储到主服务器的磁盘中,并将磁盘中的请求发送到从服务器中,以便实现数据同步和集群的高可用性;该方案在对数据准确性要求不高的场景可以适用,例如弹幕服务,用户可以看到自己发出的弹幕;对于别人发出的弹幕,其可能存储在不同服务器的磁盘中,即使磁盘中存储的其它用户的弹幕丢失,用户也无感知。



技术实现要素:

有鉴于此,本发明的目的在于提供一种数据处理方法、服务器和计算机可读存储介质。

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

第一方面,本发明提供一种数据处理方法,应用于具有缓存的第一服务器,所述第一服务器为集群的主服务器,所述集群还包括其它n个从服务器,n≥2,所述集群通过中间组件与客户端连接。所述方法包括:接收所述中间组件转发的所述客户端的请求;将所述请求存储至所述第一服务器的第一缓存;将所述第一缓存中存储的所述请求发送至所述其它n个从服务器;当接收到所述其它n个从服务器发送的至少n/2个与所述请求对应的存储响应时,发送数据同步成功信息至所述客户端,以使所述客户端确认本轮数据同步成功。

在可选的实施方式中,所述第一服务器具有投票计时器,所述投票计时器用于选举所述集群的主服务器,在所述接收所述中间组件转发的所述客户端的请求之前,所述方法还包括:判断所述投票计时器的等待时间是否大于或等于预设时间;所述等待时间为所述第一服务器的当前时间与所述投票计时器的启动时间的差值。若是,则发送请求投票信息至所述其它n个从服务器,以使所述其它n个从服务器在选举超时时间内不发送投票请求;所述选举超时时间为所述其它n个从服务器中的任意一个服务器发送投票请求的时间与所述当前时间的间隔时间。判断所述选举超时时间内,是否接收到所述其它n个从服务器发送的至少n/2个与所述请求投票信息对应的响应;若是,则确认所述第一服务器为所述集群的主服务器。

在可选的实施方式中,所述第一服务器存储有具有当前序列号的第一日志,在所述确认所述第一服务器为所述集群的主服务器之前,所述方法还包括:判断所述当前序列号是否大于或等于所述其它n个从服务器的所有日志序列号;若是,则执行所述确认所述第一服务器为所述集群的主服务器的步骤。

在可选的实施方式中,所述第一服务器具有无锁队列,所述将所述请求存储至所述第一服务器的第一缓存,包括:将所述请求发送至所述无锁队列;发送缓存请求至所述无锁队列,以将所述请求存储至所述第一缓存。

在可选的实施方式中,所述第一服务器包括磁盘,所述将所述请求存储至所述第一服务器的第一缓存,还包括:根据所述请求,获取快照文件;所述快照文件包括当前时间点,所述第一缓存具有的所有所述请求;将所述快照文件存储至所述磁盘。

在可选的实施方式中,所述请求包括日志标识,所述将所述第一缓存中存储的所述请求发送至所述其它n个从服务器,包括:判断所述日志标识与第二服务器中的日志序列信息是否匹配;所述第二服务器为所述其它n个从服务器中的任意一个或多个服务器;若匹配,则将所述请求发送至所述第二服务器。

第二方面,本发明提供一种数据处理方法,应用于第二服务器,所述第二服务器为集群的从服务器,所述集群还包括具有缓存的主服务器,所述集群通过中间组件与客户端连接,所述方法包括:接收所述主服务器发送的请求;所述请求为所述主服务器在接收到所述中间组件转发的所述客户端发送的请求,所述请求存储在所述主服务器的第一缓存中。当所述请求对应的日志标识与所述第二服务器的日志序列号匹配时,存储所述请求。发送所述请求对应的响应至所述主服务器,以使所述主服务器发送数据同步成功信息至所述客户端,所述客户端确认本轮数据同步成功。

第三方面,本发明提供一种服务器,所述服务器为集群的主服务器,所述集群还包括其它n个从服务器,n≥2,所述集群通过中间组件与客户端连接,所述服务器包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现前述实施方式任一项所述的方法。

第四方面,本发明提供一种服务器,所述服务器为集群的从服务器,所述集群还包括具有缓存的主服务器,所述集群通过中间组件与客户端连接。所述服务器包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现前述实施方式所述的方法。

第五方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述实施方式中任一项所述的方法。

本发明提供的数据处理方法、服务器和计算机可读存储介质,涉及集群的数据处理领域。所述数据处理方法应用于具有缓存的第一服务器,所述第一服务器为集群的主服务器,所述集群还包括其它n个从服务器,n≥2,所述集群通过中间组件与客户端连接,所述方法包括:接收所述中间组件转发的所述客户端的请求;将所述请求存储至所述第一服务器的第一缓存;将所述第一缓存中存储的所述请求发送至所述其它n个从服务器;当接收到所述其它n个从服务器发送的至少n/2个与所述请求对应的存储响应时,发送数据同步成功信息至所述客户端,以使所述客户端确认本轮数据同步成功。客户端通过中间组件与集群通讯,减少了客户端对于集群的选择逻辑;数据同步时,从服务器与主服务器的缓存交互,而不是和主服务器的磁盘交互,可以有效的减少数据处理的时间,并保证数据的准确性。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例提供的一种客户端与集群的交互示意图;

图2为本发明实施例提供的一种数据处理方法的流程示意图;

图3为本发明实施例提供的另一种数据处理方法的流程示意图;

图4为本发明实施例提供的另一种数据处理方法的流程示意图;

图5为本发明实施例提供的另一种数据处理方法的流程示意图;

图6为本发明实施例提供的另一种数据处理方法的流程示意图;

图7为本发明实施例提供的另一种数据处理方法的流程示意图;

图8为本发明实施例提供的另一种数据处理方法的流程示意图;

图9为本发明实施例提供的一种数据处理方法的信令交互图。

图标:11-第一服务器,12-从服务器,12a-第二服务器,12b-第三服务器,13-中间组件,14-客户端。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

为了保证集群的高可用性,一般使用数据对等的高可用方案,其通过主服务器与客户端、数据库、从服务器分别连接,当主服务器接收到客户端的请求时,主服务器将该请求存储到主服务器的磁盘中,并将磁盘中的请求发送到从服务器中,以便实现数据同步和集群的高可用性;该方案在对数据准确性要求不高的场景可以适用,例如弹幕服务,用户可以看到自己发出的弹幕;对于别人发出的弹幕,其可能存储在不同服务器的磁盘中,即使磁盘中存储的其它用户的弹幕丢失,用户也无感知。如何快速的处理客户端发送的请求,并将其同步到集群中,是目前亟待解决的问题。

为了解决上述问题和背景技术中提出的不足,本发明实施例提供一种数据处理方法,该数据处理方法应用于服务器。该服务器部署在集群中,请参见图1,图1为本发明实施例提供的一种客户端与集群的交互示意图。客户端14通过中间组件13与集群连接,集群中包括具有缓存的第一服务器11和其它n个从服务器12,n为大于或等于二的自然数。

针对上述的中间组件13,其可以是一个软件进程,例如,在集群中的每个服务器上均部署该中间组件13,客户端可通过该中间组件13与集群中的任一个服务器进行通讯。

针对上述的客户端,其可以是,但不限于手机、个人计算机、智能手环、智能家电、业务服务器等。

应理解,上述的任一服务器可以包括,但不限于存储器、处理器和通信接口。该存储器、处理器和通信接口相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器可用于存储软件程序及模块,如本发明实施例所提供的数据处理方法对应的程序指令/模块,处理器通过执行存储在存储器内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口可用于与其他节点设备进行信令或数据的通信。在本发明中该服务器可以具有多个通信接口。

其中,存储器可以是但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。

处理器可以是一种集成电路芯片,具有信号处理能力。该处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。

下面在图1示出的第一服务器11的基础上,本发明实施例提供一种数据处理方法,请参见图2,图2为本发明实施例提供的一种数据处理方法的流程示意图。该数据处理方法包括:

s36、接收中间组件转发的客户端的请求。

例如,当客户端启动的时候,客户端会直接与该中间组件通讯,中间组件随机挑选一个集群中服务器进行通信,如果第一次挑选的服务器不是主服务器(返回错误),则会遍历集群的其它服务器,直到找到主服务器,然后将这个服务器信息记录到客户端的缓存中;应理解,在上述情况下,客户端是无感知的,无需对集群进行主服务器的选择逻辑,只需直接与中间组件通讯。如果集群中的主服务器已经崩溃了,那么中间组件的请求就会超时,之后会再次重试随机挑选服务器的过程。

s37、将请求存储至第一服务器的第一缓存。

应理解,将请求存储在第一服务器的缓存中,在后续进行数据同步时,可以不用和服务器的磁盘进行交互,而是直接从第一缓存中获取数据,有效的提高集群的数据处理效率。

s38、将第一缓存中存储的请求发送至其它n个从服务器。

应理解,主服务器的单点存储必定无法达到集群高可用的目的,为了防止主服务器宕机导致数据缺失或准确性降低,需要将此请求同步给集群的其它服务器。

s39、当接收到其它n个从服务器发送的至少n/2个与请求对应的存储响应时,发送数据同步成功信息至客户端,以使客户端确认本轮数据同步成功。

可以理解的,客户端通过中间组件与集群通讯,减少了客户端对于集群的选择逻辑;数据同步时,从服务器与主服务器的缓存交互,而不是和主服务器的磁盘交互,可以有效的减少数据处理的时间,并保证数据的准确性。

在可选的实施方式中,业务集群上线时,为了获取集群的主服务器,目前的技术方案会依赖第三方服务来进行,为了减少对第三方服务的依赖,在图2的基础上,以上述的第一服务器具有投票计时器为例,请参见图3,图3为本发明实施例提供的另一种数据处理方法的流程示意图。应理解,该投票计时器用于选举集群的主服务器,该投票计时器可以是第一服务器启动的一个定时器线程,也可以是设置在第一服务器上的一个定时软件,在上述的s36之前,该数据处理方法还可以包括:

s31、判断投票计时器的等待时间是否大于或等于预设时间。

该等待时间为第一服务器的当前时间与投票计时器的启动时间的差值。例如,该预设时间可以是一个毫秒级的随机数,如1毫秒、3毫秒等。

若投票计时器的等待时间大于或等于预设时间,则执行s32;若投票计时器的等待时间小于预设时间,则等待至等待时间大于或等于预设时间时,再执行s32。

s32、发送请求投票信息至其它n个从服务器,以使其它n个从服务器在选举超时时间内不发送投票请求。

该选举超时时间为其它n个从服务器中的任意一个服务器发送投票请求的时间与当前时间的间隔时间。例如,该选举超时时间可以大于第一服务器广播请求投票信息至其它n个从服务器的广播时间,在此情况下,第一服务器可以在其它n个从服务器超时之前,发送请求投票信息至其它n个从服务器,以避免集群选举主服务器时产生选举冲突。

s33、判断选举超时时间内,是否接收到其它n个从服务器发送的至少n/2个与请求投票信息对应的响应。

可以理解的,当从服务器接收到第一服务器发送的请求投票信息时,可以生成一个与请求投票信息对应的响应,以使第一服务器确认本次请求投票信息发送成功。

若在选举超时时间内,没有接收到其它n个从服务器发送的至少n/2个与请求投票信息对应的响应,则返回执行s31;若在选举超时时间内,接收到其它n个从服务器发送的至少n/2个与请求投票信息对应的响应,则执行s35。

s35、确认第一服务器为集群的主服务器。

可以理解的,通过设置投票计时器,可以在不用第三方服务的基础上,选举出集群的主服务器。例如,集群可以通过启动一个定时器线程(投票计时器)进行等待,等待的毫秒数是一个随机数(预设时间);当第一服务器的投票等待时间达到预设时间后,第一服务器给集群其它服务器发出请求投票消息;由于每个服务器的投票计时器的等待时间不一致,可以把服务器都分散开,大多数情况下只有一个服务器(如上述的第一服务器)的投票计时器的等待时间会达到预设时间,然后赢得选举,得到主服务器的权利;然后在其它服务器超时之前发送心跳包(请求投票信息)至其它服务器,防止了多个服务器同时发出请求投票信息,导致集群的主服务器选举冲突,以便快速选出主服务器;应理解,服务器之间的广播时间<<选举超时时间<<平均故障间隔时间,平均故障间隔时间就是对于一台服务器而言,两次故障之间的平均时间,选举超时时间比平均故障间隔时间小一个量级。

应理解,在集群中,主服务器需要拥有最新的数据(如请求对应的最新日志记录)才能实现对集群的管理,如任务进程等,因此,主服务器必须存储集群中所有已经提交的日志条目。

传统的高可用方案中,即使服务器一开始并没有包含所有已经提交的日志条目,也可以被选成主服务器;此时,就需要包含一些额外的机制来识别丢失的日志条目,并把丢失的日志传送给此缺失条目的服务器,这种方案需要相当大的额外的机制和复杂性;因为主服务器选举后,需要额外补充日志空洞,而补充的时候需要遵循日志的顺序性,会导致集群的性能低下。为了解决上述问题,在图3的基础上,以第一服务器存储有具有当前序列号的第一日志为例,请参见图4,图4为本发明实施例提供的另一种数据处理方法的流程示意图。在s35之前,该数据处理方法还可以包括:

s34、判断当前序列号是否大于或等于其它n个从服务器的所有日志序列号。

若是,则执行上述的s35;若否,则返回执行s31。

应理解,本发明实施例通过给每个日志一个序列号,拥有最新序列号日志的服务器才能成为主服务器,这样就不需要从服务器传送其他日志条目给选举出来的主服务器,强制性保证了主服务器中数据的准确性。

需要注意的是,如果主服务器(第一服务器)故障,即,从服务器没有收到第一服务器的心跳或日志,那么从服务器的投票计时器就开始等待超时,该从服务器变成集群的主服务器候选人,给集群中其它的从服务器发起请求投票;应理解,只有自身拥有最新数据(最新的日志记录)的从服务器可以才有资格成为新的主服务器:如果从服务器接收到集群中其它从服务器的至少50%的选票,那么就可以变成集群中新的主服务器,并对外提供服务。例如,从服务器切换为新主服务器的重选时间一般为150-300毫秒,远小于从服务器发布版本的时间;由于新主服务器拥有最新数据(最新的日志记录),在获得主服务器权限的时候就不需要任何特殊的操作来恢复集群数据一致性;新主服务器只需要进行正常的操作,然后日志就能自动的在回复附加日志远程过程调用协议(remoteprocedurecallprotocol,rpc)的一致性检查,失败的时候,集群数据自动趋于一致,减少集群中多个服务器之间的交互的次数,避免集群中脏数据的产生和恢复集群数据的操作,从而提升集群的服务性能。

现有技术中,获取请求一般采用有锁队列的方式,有锁队列的正常逻辑操作是要对队列操作进行加锁处理,其加锁的性能开销较大,在第一服务器需要高并发非常多的请求时,请求在第一服务器的持久化操作耗时长,如何避免等待同步超时导致客户端请求超时失败,如何保证高性能,在图2的基础上,以第一服务器具有无锁队列为例,请参见图5,图5为本发明实施例提供的另一种数据处理方法的流程示意图。上述的s37可以包括:

s371、将请求发送至无锁队列。

应理解,无锁队列是没有加锁的消息队列,其没有“死锁”的危险,减少了加锁的过程,可以提高数据处理的效率。例如,无锁队列可以适用在只有两个线程的并行使用,一个为压入数据(接收请求)的线程,另一个为弹出数据(缓存请求)的线程。

s372、发送缓存请求至无锁队列,以将请求存储至第一缓存。

应理解,可以将无锁队列中的新请求存储在第一缓存中,将第一缓存中的请求进行批量复制,并发送到集群中的其它服务器。

例如,主服务器与集群其它服务器建立传输控制协议(transmissioncontrolprotocol,tcp)连接池,数据通过链接池并发发送给其它服务器,而不是单个链接发送;主服务器(第一服务器)复制请求时,还可以带上一个请求数据的日志标识;从服务器通过检查,如果上一条请求数据的日志匹配,才发送存储响应到主服务器。当主服务器(第一服务器)收到过半的从服务器的存储响应时,还可以通过异步处理的方式将该客户端的请求进行标记,并批量的将标记请求的日志存储;第一服务器还可以回复客户端一个数据同步成功消息,以便客户端确认集群已经实现了请求的数据同步,本次请求存储成功。

如果从服务器发生故障,则在更改配置后(将此故障的从服务器下线,添加新的正常服务器),新的正常服务器发送待同步指令给主服务器,主服务器将此待同步指令同步应用后,不再给故障的从服务器同步数据,转而给新的正常服务器。然而,新的正常服务器没有集群之前的数据,集群数据的同步耗时太长,若集群之前存储的日志过多,新的正常服务器的磁盘可能并不足以存储如此多的日志,在可选的实施方式中,在图5的基础上,以第一服务器包括磁盘为例,请参见图6,图6为本发明实施例提供的另一种数据处理方法的流程示意图。上述的s37还可以包括:

s373、根据请求,获取快照文件。

该快照文件包括当前时间点,第一缓存具有的所有请求。例如,当请求达到一定数量时,将多条请求保存为快照文件,通过请求对应的日志记录来确定快照文件包含的请求条目,可以有效的节省服务器的存储资源。

s374、将快照文件存储至磁盘。

例如,可以先将客户端的请求合并后批量写入磁盘中,扁平化数据结构,只需要一次写入,以规避磁盘的满操作。写入磁盘后,对客户端的请求的存储位置索引进行缓存。如果存储位置索引条目数量达到一定的数量,主服务器创建快照文件,整个集群的状态都以快照的形式写入到稳定的持久化存储(第一服务的磁盘)中,将到达创建快照文件的时间点之前的日志全部丢弃,从而避免单个文件过大影响性能,节省服务器的存储资源;对于新的正常服务器,当复制的日志小于快照文件包含的最后一条日志时候,改成复制快照文件;为了便于传输,快照文件可以被分成分块的传输,新的正常服务器收满后,直接安装到新正常服务器本地的状态机。

在可选的实施方式中,为了保证集群数据的准确性,在图2的基础上,以请求包括日志标识为例,请参见图7,图7为本发明实施例提供的另一种数据处理方法的流程示意图。上述的s38可以包括:

s381、判断日志标识与第二服务器中的日志序列信息是否匹配。

该第二服务器为其它n个从服务器中的任意一个或多个服务器。

若不匹配,则继续执行s381;若匹配,则执行s382。

s382、将请求发送至第二服务器。

例如,主服务器并发发送请求数据的时候,可能会出现请求数据超前到达的情况,此时主服务器(第一服务器)则认为请求数据发送失败;在请求数据发送失败时,tcp连接池重新从第一缓存中拿到请求数据,进行重试传输即可。如果从服务器(第二服务器)前面的日志有缺失,即,与请求数据对应的日志标识不匹配,从服务器还可以进行本地倒退计算,得到匹配的日志序列信息,并告知主服务器,主服务器重新进行请求数据的传输,从而批量跳跃match,不需要主服务器一条条指令进行检查重试。

可以理解的,单个落后的从服务器的数据同步,不会影响整个集群的性能,日志的写入是一个幂等的rpc,如果数据同步失败,主服务器重试即可,不会影响集群的高可用。

可以预见的,在集群运行时,还可能会出现网络分区的情况,网络分区将主服务器和从服务器分隔开:从服务器收不到主服务器的心跳时,将发起选举产生新的主服务器,这时集群就产生了双主服务器的情况,原先的主服务器(第一服务器)独自在一个网络区,客户端向第一服务器提交数据不可能复制到多数从服务器,所以永远提交不成功;客户端向新的主服务提交数据可以提交成功;而在网络恢复后,旧的主服务器(第一服务器)发现集群中有更新人气的新主服务器,则自动降级为从服务器.并从新主服务器中同步数据,以达成集群数据的一致性。应理解,本发明可以通过数据冗余容错、随机倒计时算法、无锁队列、细粒度锁日志缓存、批量复制、并发传输同步数据、异步回调响应给客户端等各种机制,无需依赖第三方服务,保证高并发场景下,服务器集群的高性能和高可用性,以及集群的数据准确性。

下面在图1示出的从服务器12的基础上,为了实现集群数据的准确性和集群的高可用,本发明实施例还提供一种数据处理方法,应用于第二服务器,第二服务器为集群的多个从服务器中的任意一个,请参见图8,图8为本发明实施例提供的另一种数据处理方法的流程示意图。该数据处理方法包括:

s41、接收主服务器发送的请求。

该请求为主服务器在接收到中间组件转发的客户端发送的请求,该请求存储在主服务器的第一缓存中。

s42、当请求对应的日志标识与第二服务器的日志序列号匹配时,存储请求。

s43、发送请求对应的响应至主服务器,以使主服务器发送数据同步成功信息至客户端,客户端确认本轮数据同步成功。

可以理解的,客户端通过中间组件与集群通讯,减少了客户端对于集群的选择逻辑;数据同步时,从服务器与主服务器的缓存交互,而不是和主服务器的磁盘交互,可以有效的减少数据处理的时间,并保证数据的准确性。

为了便于理解上述任一项的数据处理方法,请参见图9,图9为本发明实施例提供的一种数据处理方法的信令交互图,其中,客户端14通过中间组件13与集群通讯,该集群包括第一服务器11、第二服务器12a、第三服务器12b,第一服务器11为集群的主服务器,第二服务器12a和第三服务器12b为集群的从服务器。

在集群还未选举出主服务器时,以第一服务器11的投票等待时间小于第二服务器12a和第三服务器12b通讯的投票等待时间为例,集群的各个服务器均开启各自的投票计时器,当第一服务器11的等待时间达到预设时间时,该数据处理方法的选举过程包括:

s501、第一服务器发送请求投票信息至第二服务器。

s502、第一服务器发送请求投票信息至第三服务器。

应理解,上述的s501和s502可以是同时进行的,如通过广播的方式来发送请求投票信息。

当第二服务器12a接收到该请求投票信息,并确认第一服务器11具有最新的日志记录时,执行s503。

s503、第二服务器发送与请求投票信息对应的投票响应至第一服务器。

当第三服务器12b接收到该请求投票信息,并确认第一服务器11具有最新的日志记录时,执行s504。

s504、第三服务器发送与请求投票信息对应的投票响应至第一服务器。

当第一服务器11接收到第二服务器12a或第三服务器12b发送的投票响应时,则确定第一服务器11为集群的主服务器。

在集群选举出主服务器为第一服务器11后,客户端14通过中间组件13与集群通讯,上述数据处理方法的数据或请求同步过程可以包括:

s505、客户端发送请求至中间组件。

s506、中间组件将客户端的请求转发至第一服务器。

在本发明实施例中,客户端14启动的时候,直接与中间组件13通讯,中间组件13随机挑选集群的一个服务器进行通信,如果第一次挑选的服务器不是主服务器,中间组件13会遍历集群的所有服务器,直到找到主服务器(第一服务器11),然后将第一服务器11的信息记录到客户端的缓存中。

当第一服务器11接收到中间组件13转发的请求时,将该请求存储到第一服务器11自身的第一缓存中,并将第一缓存中存储的请求发送到集群的其它从服务器中,上述数据处理方法的同步过程还可以包括:

s507、第一服务器将第一缓存中存储的请求发送到第二服务器。

s508、第一服务器将第一缓存中存储的请求发送到第三服务器。

s509、第二服务器发送存储响应至第一服务器。

s510、第三服务器发送存储响应至第一服务器。

当第一服务器11接收到第二服务器12a或第三服务器12b发送的与请求对应的存储响应时,即可确认存储响应对应的服务器数据同步成功,以完成本轮的请求同步。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

综上所述,本发明提供一种数据处理方法、服务器和计算机可读存储介质,涉及集群的数据处理领域。该方法应用于具有缓存的第一服务器,第一服务器为集群的主服务器,集群还包括其它n个从服务器,集群通过中间组件与客户端连接,该方法包括:接收中间组件转发的客户端的请求;将请求存储至第一服务器的第一缓存;将第一缓存中存储的请求发送至其它n个从服务器;当接收到其它n个从服务器发送的至少n/2个与请求对应的存储响应时,发送数据同步成功信息至客户端,以使客户端确认本轮数据同步成功。客户端通过中间组件与集群通讯,减少了客户端对于集群的选择逻辑;数据同步时,从服务器与主服务器的缓存交互,而不是和主服务器的磁盘交互,可以有效的减少数据处理的时间,并保证数据的准确性。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:

1.一种数据处理方法,其特征在于,应用于具有缓存的第一服务器,所述第一服务器为集群的主服务器,所述集群还包括其它n个从服务器,n≥2,所述集群通过中间组件与客户端连接,所述方法包括:

接收所述中间组件转发的所述客户端的请求;

将所述请求存储至所述第一服务器的第一缓存;

将所述第一缓存中存储的所述请求发送至所述其它n个从服务器;

当接收到所述其它n个从服务器发送的至少n/2个与所述请求对应的存储响应时,发送数据同步成功信息至所述客户端,以使所述客户端确认本轮数据同步成功。

2.根据权利要求1所述的方法,其特征在于,所述第一服务器具有投票计时器,所述投票计时器用于选举所述集群的主服务器,在所述接收所述中间组件转发的所述客户端的请求之前,所述方法还包括:

判断所述投票计时器的等待时间是否大于或等于预设时间;所述等待时间为所述第一服务器的当前时间与所述投票计时器的启动时间的差值;

若是,则发送请求投票信息至所述其它n个从服务器,以使所述其它n个从服务器在选举超时时间内不发送投票请求;所述选举超时时间为所述其它n个从服务器中的任意一个服务器发送投票请求的时间与所述当前时间的间隔时间;

判断所述选举超时时间内,是否接收到所述其它n个从服务器发送的至少n/2个与所述请求投票信息对应的响应;

若是,则确认所述第一服务器为所述集群的主服务器。

3.根据权利要求2所述的方法,其特征在于,所述第一服务器存储有具有当前序列号的第一日志,在所述确认所述第一服务器为所述集群的主服务器之前,所述方法还包括:

判断所述当前序列号是否大于或等于所述其它n个从服务器的所有日志序列号;

若是,则执行所述确认所述第一服务器为所述集群的主服务器的步骤。

4.根据权利要求1所述的方法,其特征在于,所述第一服务器具有无锁队列,所述将所述请求存储至所述第一服务器的第一缓存,包括:

将所述请求发送至所述无锁队列;

发送缓存请求至所述无锁队列,以将所述请求存储至所述第一缓存。

5.根据权利要求4所述的方法,其特征在于,所述第一服务器包括磁盘,所述将所述请求存储至所述第一服务器的第一缓存,还包括:

根据所述请求,获取快照文件;所述快照文件包括当前时间点,所述第一缓存具有的所有所述请求;

将所述快照文件存储至所述磁盘。

6.根据权利要求1所述的方法,其特征在于,所述请求包括日志标识,所述将所述第一缓存中存储的所述请求发送至所述其它n个从服务器,包括:

判断所述日志标识与第二服务器中的日志序列信息是否匹配;所述第二服务器为所述其它n个从服务器中的任意一个或多个服务器;

若匹配,则将所述请求发送至所述第二服务器。

7.一种数据处理方法,其特征在于,应用于第二服务器,所述第二服务器为集群的从服务器,所述集群还包括具有缓存的主服务器,所述集群通过中间组件与客户端连接,所述方法包括:

接收所述主服务器发送的请求;所述请求为所述主服务器在接收到所述中间组件转发的所述客户端发送的请求,所述请求存储在所述主服务器的第一缓存中;

当所述请求对应的日志标识与所述第二服务器的日志序列号匹配时,存储所述请求;

发送所述请求对应的响应至所述主服务器,以使所述主服务器发送数据同步成功信息至所述客户端,所述客户端确认本轮数据同步成功。

8.一种服务器,其特征在于,所述服务器为集群的主服务器,所述集群还包括其它n个从服务器,n≥2,所述集群通过中间组件与客户端连接;

所述服务器包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现权利要求1-6任一项所述的方法。

9.一种服务器,其特征在于,所述服务器为集群的从服务器,所述集群还包括具有缓存的主服务器,所述集群通过中间组件与客户端连接;

所述服务器包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现权利要求7所述的方法。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6中任一项所述的方法或权利要求7所述的方法。

技术总结
本发明提供一种数据处理方法、服务器和计算机可读存储介质,涉及集群的数据处理领域。该方法应用于具有缓存的第一服务器,第一服务器为集群的主服务器,集群还包括其它N个从服务器,集群通过中间组件与客户端连接;该方法包括:接收中间组件转发的客户端请求;将请求存储至第一服务器的第一缓存;将第一缓存中存储的请求发送至其它N个从服务器;当接收到至少N/2个与请求对应的存储响应时,发送数据同步成功信息至客户端,以使客户端确认本轮数据同步成功。客户端通过中间组件与集群通讯,减少客户端对集群的选择逻辑;数据同步时,从服务器与主服务器的缓存交互,而不是和主服务器的磁盘,有效的减少数据处理的时间,并保证数据准确性。

技术研发人员:陈慕仪
受保护的技术使用者:广州虎牙科技有限公司
技术研发日:2020.01.15
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-27275.html

最新回复(0)