掌桥专利:专业的专利平台
掌桥专利
首页

一种容灾数据处理方法和装置

文献发布时间:2023-06-19 11:49:09


一种容灾数据处理方法和装置

技术领域

本发明涉及数据处理技术领域,特别涉及一种容灾数据处理方法和装置。

背景技术

目前随着互联网技术的发展,会有大量的数据需要通过消息队列(MessageQueue,MQ)服务进行传输。

在实现本申请的过程中,发明人发现当遇到MQ服务异常这种情况时,会导致数据的丢失。

发明内容

有鉴于此,本申请提供一种容灾数据处理方法和装置,能够避免数据的丢失,并提高数据存储效率。

为解决上述技术问题,本申请的技术方案是这样实现的:

在一个实施例中,提供了一种容灾数据处理方法,所述方法包括:

向MQ服务器发送请求;

若确定MQ服务异常,则停止向MQ服务器发送请求,并将需要发送的请求对应的数据写入第一缓冲区;

当第一缓存区写满后,切换为写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中;

若确定所述MQ服务恢复正常,则停止向缓存中写入数据;

将磁盘中存储的数据发送给MQ服务器。

在另一个实施例中,提供了一种容灾数据处理装置,所述装置包括:第一发送单元、第一确定单元、存储单元、第二确定单元和第二发送单元;

所述第一发送单元,用于向MQ服务器发送请求;若所述第一确定单元确定MQ服务异常,则停止向MQ服务器发送请求;

所述第一确定单元,用于确定MQ服务是否异常;

所述存储单元,用于当所述第一确定单元确定所述MQ服务异常,则将需要发送的请求对应的数据写入第一缓冲区;当第一缓存区写满后,切换为写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中;若所述第二确定单元确定所述MQ服务恢复正常,则停止向缓存中写入数据;

所述第二确定单元,用于确定所述MQ服务是否恢复正常;

所述第二发送单元,用于当所述第二确定单元确定所述MQ服务恢复正常时,将磁盘中存储的数据发送给MQ服务器。

在另一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述容灾数据处理方法的步骤。

在另一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述容灾数据处理方法的步骤。

由上面的技术方案可见,上述实施例中在确定MQ服务异常时,将需要通过MQ服务传输的数据在本地存储;并且在存储数据时通过两片缓存区交替缓存,通过异步方式将缓存区的数据刷新到磁盘中;待MQ服务恢复正常时,通过异步的方式将本地存储的数据发送到MQ服务器。该方案能够避免数据的丢失,并提高数据存储效率。

附图说明

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

图1为本申请实施例一中容灾数据处理流程示意图;

图2为本申请实施例二中容灾数据处理流程示意图;

图3为本申请实施例三中容灾数据处理流程示意图;

图4为本申请实施例中容灾数据处理装置结构示意图;

图5为本发明实施例提供的电子设备的实体结构示意图。

具体实施方式

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

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。

下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

本申请实施例中提供一种容灾数据处理方法,应用于通过MQ服务进行数据传输的系统中。

该系统中包括MQ客户端、MQ服务器和大数据端。

客户端有大量数据向大数据端发送时,先会发送到MQ服务器上,由MQ服务存储到MQ队列中,再由大数据端从所述MQ服务器的MQ队列中获取数据。

如可以应用在医院互联网中用户行为日志采集场景中,MQ客户端会将从用户行为采集系统中采集的数据进行初步加工,并且会将数据通过MQ的方式发送给大数据端,用来作为大数据端计算用户行为画像的数据来源。

若MQ服务器上的MQ服务异常,如MQ服务依赖的jimdb或者jmq等中间件状态异常时,会导致数据的丢失。

本申请实施例在确定MQ服务异常时,将需要通过MQ服务传输的数据在本地存储;待MQ服务恢复正常时,通过异步的方式将本地存储的数据发送到MQ服务器。该方案能够避免数据的丢失,并提高数据存储效率。

下面结合附图,详细说明本申请实施例中实现容灾数据处理过程。

实施例一

参见图1,图1为本申请实施例一中容灾数据处理流程示意图。具体步骤为

步骤101,向MQ服务器发送请求。

当MQ服务正常时,MQ客户端向MQ服务器发送请求。

所述请求中携带的数据根据实际应用场景确定,如用户行为日志。

步骤102,若确定MQ服务异常,则停止向MQ服务器发送请求,并将需要发送的请求对应的数据写入第一缓冲区。

本申请实施例中确定MQ服务异常的方式可以但不限于下述实现方式:

确定第一预设时间内请求失败的次数;

当第一预设时间内请求失败的次数达到第一预设值时,确定所述MQ服务器异常。

这里的请求失败包括:没有得到响应,或者响应的不为请求对应的内容。

此时不再发送请求,而是向第一缓存区中写入数据。

此时写入的数据不仅包括即将需要发送的请求对应的数据,还包括之前请求失败对应的数据。

步骤103,当第一缓存区写满后,切换为写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中。

本申请实施例中通过两个缓存区来实现异步写入磁盘的方式。

在具体实施例中当然也可以实现通过两个以上缓存区来实现,但是如果能保证将缓存中的数据刷新到磁盘的速度大于写数据到缓存中的速度,使用两个缓存空间一致的缓存区即可实现,这样更能提高写缓存和写磁盘的效率,又能节省资源。

本步骤中,当切换为写入第二缓存区之后,所述方法进一步包括:

第二缓存区写满后,切换到向第一缓存区写数据;并开启一个新的线程将所述第二缓存区的数据刷新到磁盘中。

当所述第二缓存区或第一缓存区的数据均刷新到所述磁盘中时,关闭新开启的缓存。

针对每个缓存区如果需要刷新数据时开启一个新的缓存,数据刷新完后关闭对应的线程,也可以单独开启一个线程,用于数据刷新,并实施例中对此实现并不进行限制。

本申请实施例中具体实现时,交替使用第一缓存区和第二缓存区写数据,并且开启一个新的线程将写满数据的缓存区的数据刷新到磁盘中,这样实现了写缓存和写磁盘的异步实现,提高了写数据的效率。

本申请实施例中在具体实现时,还会发生第一缓存区或第二缓存区未写满,停止写数据的情况,具体处理如下:

当第一缓存区或第二缓存区未存满,且停止向对应缓存区写入数据时,将所述缓存区中的数据刷新到磁盘中。

这时候可能是无数据写入,也可能是MQ服务恢复正常,不需要再进行数据的本地存储。

步骤104,若确定所述MQ服务恢复正常,则停止向缓存中写入数据。

本申请实施例中确定所述MQ服务恢复正常的具体方式如下,但不限于下述实现方式:

向所述MQ服务器发送MQ服务连接请求;

当第二预设时间内发送连接请求成功的次数达到第二预设值时,确定所述MQ服务器恢复正常。

如果当前存在未写入磁盘的数据,且需要向MQ服务器发送的数据时,则向所述MQ服务器发送请求,将需要发送的数据携带在所述请求中。

步骤105,将磁盘中存储的数据发送给MQ服务器。

在具体实现时,开启新的线程将磁盘中的数据发送给MQ服务器,这样与直接发送给MQ服务器的数据使用不同的线程发送,异步实现。

本申请实施例中在确定MQ服务异常时,将需要通过MQ服务传输的数据在本地存储;并且在存储数据时通过两片缓存区交替缓存,通过异步方式将缓存区的数据刷新到磁盘中;待MQ服务恢复正常时,通过异步的方式将本地存储的数据发送到MQ服务器。该方案能够避免数据的丢失,并且通过相互替换的分区保证写数据和刷新数据不会造成阻塞,提高数据存储效率。

实施例二

参见图2,图2为本申请实施例二中容灾数据处理流程示意图。具体步骤为

步骤201,向MQ服务器发送请求。

当MQ服务正常时,MQ客户端向MQ服务器发送请求。

所述请求中携带的数据根据实际应用场景确定,如用户行为日志。

步骤202,若确定MQ服务异常,则停止向MQ服务器发送请求,并将需要发送的请求对应的数据通过缓存单线程的方式写入第一缓冲区。

本申请实施例中确定MQ服务异常的方式可以但不限于下述实现方式:

确定第一预设时间内请求失败的次数;

当第一预设时间内请求失败的次数达到第一预设值时,确定所述MQ服务器异常。

这里的请求失败包括:没有得到响应,或者响应的不为请求对应的内容。

此时不再发送请求,而是向第一缓存区中写入数据。

此时写入的数据不仅包括即将需要发送的请求对应的数据,还包括之前请求失败对应的数据。

其中,缓存单线程的方式为针对第一缓存区或第二缓存区在同一时间通过一个线程写入数据,即针对整个缓存区(第一缓存区或第二缓存区)同时仅使用一个线程进行数据的写入。

步骤203,当第一缓存区写满后,切换为通过缓存单线程方式写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中。

本申请实施例中通过两个缓存区来实现异步写入磁盘的方式。

在具体实施例中当然也可以实现通过两个以上缓存区来实现,但是如果能保证将缓存中的数据刷新到磁盘的速度大于写数据到缓存中的速度,使用两个缓存空间一致的缓存区即可实现,这样更能提高写缓存和写磁盘的效率,又能节省资源。

本步骤中,当切换为通过缓存单线程方式写入第二缓存区之后,所述方法进一步包括:

第二缓存区写满后,切换到向第一缓存区写数据;并开启一个新的线程将所述第二缓存区的数据刷新到磁盘中。

本申请实施例中具体实现时,交替使用第一缓存区和第二缓存区写数据,并且开启一个新的线程将写满数据的缓存区的数据刷新到磁盘中,这样实现了写缓存和写磁盘的异步实现,提高了写数据的效率。

本申请实施例中在具体实现时,还会发生第一缓存区或第二缓存区未写满,停止写数据的情况,具体处理如下:

当第一缓存区或第二缓存区未存满,且停止向对应缓存区写入数据时,将所述缓存区中的数据刷新到磁盘中。

这时候可能是无数据写入,也可能是MQ服务恢复正常,不需要再进行数据的本地存储。

在具体实现时,针对每个请求是一个线程,本申请实施例中为了防止出现数据错乱的现象,通过单线程的方式写入第一缓存或第二缓存。

为了实现缓存单线程方式的数据写入,可以使用锁的方式,具体为:

针对整个缓存区设置一把锁,每个线程去抢该锁,抢到该锁的线程将数据写入缓存,当该线程写数据结束时,释放该锁,当前需要写数据的线程再次抢所述锁,进行写缓存。

步骤204,若确定所述MQ服务恢复正常,则停止向缓存中写入数据。

本申请实施例中确定所述MQ服务恢复正常的具体方式如下,但不限于下述实现方式:

向所述MQ服务器发送MQ服务连接请求;

当第二预设时间内发送连接请求成功的次数达到第二预设值时,确定所述MQ服务器恢复正常。

如果当前存在未写入磁盘的数据,且需要向MQ服务器发送的数据时,则向所述MQ服务器发送请求,将需要发送的数据携带在所述请求中。

步骤205,将磁盘中存储的数据发送给MQ服务器。

在具体实现时,开启新的线程将磁盘中的数据发送给MQ服务器,这样与直接发送给MQ服务器的数据使用不同的线程发送,异步实现。

本申请实施例中在确定MQ服务异常时,将需要通过MQ服务传输的数据在本地存储;并且在存储数据时通过两片缓存区交替缓存,通过异步方式将缓存区的数据刷新到磁盘中;待MQ服务恢复正常时,通过异步的方式将本地存储的数据发送到MQ服务器。该方案能够避免数据的丢失,并且能够通过缓存区的实现提高写数据效率,通过单线程的数据写入方式避免数据的出错。

实施例三

参见图3,图3为本申请实施例三中容灾数据处理流程示意图。具体步骤为

步骤301,向MQ服务器发送请求。

当MQ服务正常时,MQ客户端向MQ服务器发送请求。

所述请求中携带的数据根据实际应用场景确定,如用户行为日志。

步骤302,若确定MQ服务异常,则停止向MQ服务器发送请求,并将需要发送的请求对应的数据通过缓存分片单线程方式写入第一缓存区。

本申请实施例中确定MQ服务异常的方式可以但不限于下述实现方式:

确定第一预设时间内请求失败的次数;

当第一预设时间内请求失败的次数达到第一预设值时,确定所述MQ服务器异常。

这里的请求失败包括:没有得到响应,或者响应的不为请求对应的内容。

此时不再发送请求,而是向第一缓存区中写入数据。

此时写入的数据不仅包括即将需要发送的请求对应的数据,还包括之前请求失败对应的数据。

其中,缓存单线程的方式为针对第一缓存区或第二缓存区在同一时间通过一个线程写入数据。

其中,缓存分片单线程方式为针对第一缓存区或第二缓存区在同一时间通过不大于缓存分片数个线程写入数据。在需要写数据的线程的个数不小于缓存分片数时,同时通过缓存分片数个线程进行数据写入;在需要写数据的线程个数小于缓存分片数时,需要写数据的线程均可同时分别对应不同缓存分片进行数据写入。

步骤303,当第一缓存区写满后,切换为通过缓存分片单线程方式写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中。

本申请实施例中通过两个缓存区来实现异步写入磁盘的方式。

在具体实施例中当然也可以实现通过两个以上缓存区来实现,但是如果能保证将缓存中的数据刷新到磁盘的速度大于写数据到缓存中的速度,使用两个缓存空间一致的缓存区即可实现,这样更能提高写缓存和写磁盘的效率,又能节省资源。

本步骤中,当切换为通过缓存分片单线程方式写入第二缓存区之后,所述方法进一步包括:

第二缓存区写满后,切换到向第一缓存区写数据;并开启一个新的线程将所述第二缓存区的数据刷新到磁盘中。

本申请实施例中具体实现时,交替使用第一缓存区和第二缓存区写数据,并且开启一个新的线程将写满数据的缓存区的数据刷新到磁盘中,这样实现了写缓存和写磁盘的异步实现,提高了写数据的效率。

本申请实施例中在具体实现时,还会发生第一缓存区或第二缓存区未写满,停止写数据的情况,具体处理如下:

当第一缓存区或第二缓存区未存满,且停止向对应缓存区写入数据时,将所述缓存区中的数据刷新到磁盘中。

这时候可能是无数据写入,也可能是MQ服务恢复正常,不需要再进行数据的本地存储。

在具体实现时,针对每个请求是一个线程,本申请实施例中为了防止出现数据错乱的现象,通过缓存分片单线程方式写入第一缓存或第二缓存。

为了实现缓存分片单线程方式的数据写入,可以针对每个缓存分片使用锁的方式,具体为:

针对每个缓存分片设置一把分片锁,每个缓存分片对应一个分段锁,所有线程去抢所有分片锁,抢到分片锁的线程将数据写入所述分片锁对应的缓存分片。当一个分片锁对应的数据写完时,释放该分片锁,当前需要写数据的线程再次抢所述分片锁,进行写缓存。

这样的写入方式既可以防止出现数据的错乱,又可以并行写数据,提高并发性。

通常设置的缓存区片的片数不大于CPU核数。

步骤304,若确定所述MQ服务恢复正常,则停止向缓存中写入数据。

本申请实施例中确定所述MQ服务恢复正常的具体方式如下,但不限于下述实现方式:

向所述MQ服务器发送MQ服务连接请求;

当第二预设时间内发送连接请求成功的次数达到第二预设值时,确定所述MQ服务器恢复正常。

如果当前存在未写入磁盘的数据,且需要向MQ服务器发送的数据时,则向所述MQ服务器发送请求,将需要发送的数据携带在所述请求中。

步骤305,将磁盘中存储的数据发送给MQ服务器。

在具体实现时,开启新的线程将磁盘中的数据发送给MQ服务器,这样与直接发送给MQ服务器的数据使用不同的线程发送,异步实现。

本申请实施例中利用MQ服务调用中间件进行数据的分发和处理,当中间件异常的时候系统会通过异常机制的规则感知到,请求会通过获取分片锁来向缓冲区写入数据,并设置两片缓存区,当一片缓冲区写满时,会进行缓冲区的交换,将这片写满的缓冲区交给一个专门的线程去进行刷新到磁盘的处理。本申请实施例提供的技术方案不仅可以保证数据的不丢失,服务之间的可用性,还能保证数据在本地缓存的效率,进而提高整个系统的数据处理效率。

基于同样的发明构思,本申请实施例中还提供一种容灾数据处理装置。参见图4,图4为本申请实施例中容灾数据处理装置结构示意图。所述装置包括:第一发送单元401、第一确定单元402、存储单元403、第二确定单元404和第二发送单元406;

第一发送单元401,用于向MQ服务器发送请求;若第一确定单元402确定MQ服务异常,则停止向MQ服务器发送请求;

第一确定单元402,用于确定MQ服务是否异常;

存储单元403,用于当第一确定单元402确定所述MQ服务异常,则将需要发送的请求对应的数据写入第一缓冲区;当第一缓存区写满后,切换为写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中;若第二确定单元404确定所述MQ服务恢复正常,则停止向缓存中写入数据;

第二确定单元404,用于确定所述MQ服务是否恢复正常;

第二发送单元406,用于当第二确定单元404确定所述MQ服务恢复正常时,将磁盘中存储的数据发送给MQ服务器。

优选地,

第一确定单元402,具体用于确定MQ服务异常时,包括:确定第一预设时间内请求失败的次数;当第一预设时间内请求失败的次数达到第一预设值时,确定所述MQ服务器异常。

优选地,

第二确定单元404,具体用于确定所述MQ服务恢复正常时,包括:向所述MQ服务器发送MQ服务连接请求;当第二预设时间内发送连接请求成功的次数达到第二预设值时,确定所述MQ服务器恢复正常。

优选地,

存储单元403,进一步用于当第二缓存区写满后,切换到向第一缓存区写数据;并开启一个新的线程将所述第二缓存区的数据刷新到磁盘中。

优选地,

存储单元403,进一步用于当第一缓存区或第二缓存区未存满,且停止向对应缓存区写入数据时,将所述第一缓存区或所述第二缓存区中的数据刷新到磁盘中。

优选地,

存储单元403,进一步用于将缓存区中的数据刷新到磁盘的速度大于写数据到缓存区中的速度。

优选地,

存储单元403,具体用于将数据写入第一缓存区或第二缓存区时,通过缓存单线程的方式进行数据写入;其中,缓存单线程的方式为针对第一缓存区或第二缓存区在同一时间通过一个线程写入数据。

优选地,

存储单元403,具体用于将数据写入第一缓存区或第二缓存区时,通过缓存分片单线程方式进行数据写入;其中,缓存分片单线程方式为针对第一缓存区或第二缓存区在同一时间通过不大于缓存分片数个线程写入数据。

上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。

在另一个实施例中,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述容灾数据处理方法的步骤。

在另一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时可实现所述容灾数据处理方法中的步骤。

图5为本发明实施例提供的电子设备的实体结构示意图。如图5所示,该电子设备可以包括:处理器(Processor)510、通信接口(Communications Interface)520、存储器(Memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行如下方法:

向MQ服务器发送请求;

若确定MQ服务异常,则停止向MQ服务器发送请求,并将需要发送的请求对应的数据写入第一缓冲区;

当第一缓存区写满后,切换为写入第二缓存区,并开启新的线程将所述第一缓存区的数据刷新到磁盘中;

若确定所述MQ服务恢复正常,则停止向缓存中写入数据;

将磁盘中存储的数据发送给MQ服务器。

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

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

相关技术
  • 一种容灾数据处理方法和装置
  • 一种容灾数据处理方法、装置及系统
技术分类

06120113066957