一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据恢复方法、装置、设备及可读存储介质与流程

2021-11-22 13:46:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种数据恢复方法、装置、设备及可读存储介质。


背景技术:

2.目前,在使用fifo(first input first output,先入先出队列)跨进程传输数据时,若消费方突发异常,会导致丢包问题。例如:运行于防火墙等安全设备的数据转发进程和安全检测进程,若安全检测进程重启或异常退出,会导致部分正在被检测的数据丢失,导致客户网络中断。
3.因此,如何解决因消费方异常而导致的丢包问题,是本领域技术人员需要解决的问题。


技术实现要素:

4.有鉴于此,本技术的目的在于提供一种数据恢复方法、装置、设备及可读存储介质,以解决因消费方异常而导致的丢包问题。其具体方案如下:
5.第一方面,本技术提供了一种数据恢复方法,应用于数据生产方,包括:
6.若接收到待传输数据,则检测数据交互队列的状态;
7.若所述状态为去使能状态,则回收所述数据交互队列中未被数据消费方处理的数据,以及所述待传输数据。
8.优选地,所述回收所述数据交互队列中未被数据消费方处理的数据,包括:
9.从所述数据交互队列中获取读指针和已处理指针;
10.根据所述读指针和所述已处理指针之间的偏移确定并回收所述数据交互队列中未被数据消费方处理的数据。
11.优选地,所述数据交互队列的生成过程包括:
12.若所述数据交互队列仅对应一个数据生产方和一个数据消费方,则创建供所述数据交互队列对应的数据生产方和数据消费方共享的共享内存;
13.在所述共享内存中创建并初始化fifo队列,以使fifo队列中的三个指针初始化为默认值,得到所述数据交互队列。
14.优选地,还包括:
15.若所述状态为使能状态,则写入所述待传输数据至所述数据交互队列,并控制第一指针递增一,以使所述数据消费方在确定所述第一指针与第二指针不等的情况下,在所述数据交互队列中处理所述待传输数据得到处理结果,并控制所述第二指针递增一;
16.在确定所述第二指针与第三指针不等的情况下,从所述数据交互队列中获取所述处理结果,并控制所述第三指针递增一。
17.优选地,还包括:
18.利用bypass技术处理回收得到的数据。
19.第二方面,本技术提供了一种数据恢复方法,应用于数据消费方,包括:
20.若数据消费方发生异常,则控制自身对应的数据交互队列处于去使能状态,以使所述数据交互队列对应的数据生产方在检测到所述去使能状态的情况下,回收所述数据交互队列中未被所述数据消费方处理的数据。
21.优选地,利用注册信号函数或atexit函数检测数据消费方是否异常。
22.第三方面,本技术提供了一种数据恢复装置,应用于数据生产方,包括:
23.检测模块,用于若接收到待传输数据,则检测数据交互队列的状态;
24.回收模块,用于若所述状态为去使能状态,则回收所述数据交互队列中未被数据消费方处理的数据,以及所述待传输数据。
25.第四方面,本技术提供了一种数据恢复装置,应用于数据消费方,包括:
26.控制模块,用于若数据消费方发生异常,则控制自身对应的数据交互队列处于去使能状态,以使所述数据交互队列对应的数据生产方在检测到所述去使能状态的情况下,回收所述数据交互队列中未被所述数据消费方处理的数据。
27.第五方面,本技术提供了一种电子设备,包括:
28.存储器,用于存储计算机程序;
29.处理器,用于执行所述计算机程序,以实现前述公开的数据恢复方法。
30.第六方面,本技术提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的数据恢复方法。
31.通过以上方案可知,本技术提供了一种数据恢复方法,应用于数据生产方,包括:若接收到待传输数据,则检测数据交互队列的状态;若所述状态为去使能状态,则回收所述数据交互队列中未被数据消费方处理的数据,以及所述待传输数据。
32.可见,本技术中的数据生产方在接收到待传输数据时,先检测数据交互队列的状态,若数据交互队列处于去使能状态,则表明数据交互队列异常,也就是队列中的数据已不能被正常处理,为避免出现丢包问题,本技术使数据生产方回收数据交互队列中未被数据消费方处理的数据以及待传输数据,从而可避免数据丢失。
33.相应地,本技术提供的一种数据恢复装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
34.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
35.图1为本技术公开的一种数据恢复方法流程图;
36.图2为本技术公开的一种组合得到交互组的示意图;
37.图3为本技术公开的一种ring结构体及指针示意图;
38.图4为本技术公开的另一种数据恢复方法流程图;
39.图5为本技术公开的一种数据消费方更改ring状态的方法流程图;
40.图6为本技术公开的一种数据生产方根据ring状态的数据处理流程图;
41.图7为本技术公开的一种数据恢复装置示意图;
42.图8为本技术公开的一种电子设备示意图;
43.图9为本技术公开的另一种电子设备示意图。
具体实施方式
44.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
45.目前,在使用fifo(first input first output)队列跨进程传输数据时,若消费方突发异常,会导致丢包问题。例如:运行于防火墙等安全设备的数据转发进程和安全检测进程,若安全检测进程重启或异常退出,会导致部分正在被检测的数据丢失,导致客户网络中断。为此,本技术提供了一种数据恢复方案,能够解决因消费方异常而导致的丢包问题。
46.参见图1所示,本技术实施例公开了一种数据恢复方法,应用于数据生产方,包括:
47.s101、接收待传输数据。
48.在本实施例中,待传输数据为网关系统中的数据面进程接收的外网数据,而数据消费方为网关系统中检测外网数据安全性的安全检测进程。其中,数据面进程与安全检测进程通过数据交互队列传输数据。安全检测进程检测外网数据的安全性后,将相关检测结果反馈给数据面进程,以使数据面进程按照检测结果确定是发送外网数据至内网节点,还是拦截外网数据。
49.其中,数据面设置于防火墙软件架构中,具有数据收发的功能,能提供高性能的网络吞吐能力。flowd是一个多线程架构的数据面进程,具有防火墙的传统四层墙的功能。serviced是一个多进程架构的安全检测进程,具有waf等7层墙的功能防护。
50.其中,数据生产方可以是一个或多个,多个数据生产方中的任一个执行s101

s103,即可恢复数据。数据消费方为一个。
51.s102、检测数据交互队列的状态。
52.s103、若状态为去使能状态,则回收数据交互队列中未被数据消费方处理的数据,以及待传输数据。
53.数据交互队列的状态为使能状态或去使能状态,若数据交互队列的状态为使能状态,表明数据生产方和数据消费方可以基于数据交互队列正常传递数据;否则,表明数据交互队列不能正常传递数据,此时为避免出现丢包问题,使数据生产方回收数据交互队列中未被数据消费方处理的数据以及待传输数据,从而可避免数据丢失。
54.其中,数据生产方回收所有数据后,直接利用bypass技术将所回收的数据发送至内网节点。也即:利用bypass技术处理回收得到的数据。
55.其中,bypass能够让两个网络不通过网络安全设备(如网关)进行通信,而直接导通。所以基于bypass技术在网络安全设备故障后,可以让连接在该网络安全设备上的不同网络相互导通,当然此时该网络安全设备不会再对网络中的封包做处理。
56.可见,本实施例中的数据生产方在接收到待传输数据时,先检测数据交互队列的状态,若数据交互队列处于去使能状态,则表明数据交互队列异常,也就是队列中的数据已
不能被正常处理,为避免出现丢包问题,使数据生产方回收数据交互队列中未被数据消费方处理的数据以及待传输数据,从而可避免数据丢失。
57.基于上述实施例,在一种具体实施方式中,回收数据交互队列中未被数据消费方处理的数据,包括:从数据交互队列中获取读指针和已处理指针;根据读指针和已处理指针之间的偏移确定并回收数据交互队列中未被数据消费方处理的数据。
58.在一种具体实施方式中,数据交互队列的生成过程包括:若数据交互队列仅对应一个数据生产方和一个数据消费方,则创建供数据交互队列对应的数据生产方和数据消费方共享的共享内存;在共享内存中创建并初始化fifo队列,以使fifo队列中的三个指针初始化为默认值,得到数据交互队列。
59.其中,数据交互队列中包括三个指针:w(写指针)、r(读指针)、s(已处理指针)。其中,在共享内存中创建并初始化fifo队列,包括:在共享内存中创建并初始化fifo队列的ring结构体。ring结构体可表明fifo队列是一个环形队列。
60.在一种具体实施方式中,还包括:
61.若状态为使能状态,则写入待传输数据至数据交互队列,并控制第一指针递增一,以使数据消费方在确定第一指针(写指针)与第二指针(读指针)不等的情况下,在数据交互队列中处理待传输数据得到处理结果,并控制第二指针递增一;
62.在确定第二指针与第三指针(已处理指针)不等的情况下,从数据交互队列中获取处理结果,并控制第三指针递增一。
63.可见,任一个数据交互队列中的数据生产方和数据消费方共享一个内存,且数据生产方将数据写入该内存后,数据消费方直接在该内存中处理数据,且该内存直接存储处理结果,因此数据生产方可直接从内存中获取处理结果。其中,fifo队列初始化在共享内存中,因此在fifo队列中处理数据即:在共享内存中处理数据。
64.其中,任一个数据交互队列中的数据生产方可一次性写入多个数据包,即:一次性写入多个报文分片。后续该数据交互队列中的数据消费方可基于业务需要确定是一次性处理这多个数据包,还是逐一处理每个数据包。
65.需要说明的是,任一个数据交互队列中的数据生产方和数据消费方可从多生产方、多消费方场景中获得。
66.例如:若有至少两个数据生产方和/或至少两个数据消费方,则将任一个数据生产方和任一个数据消费方组合,以得到不重复的至少两个交互组;针对每个交互组设置一个数据交互队列,以使各个交互组利用自身数据交互队列进行数据交互。
67.假设有3个数据生产方和4个数据消费方需要进行数据恢复,那么可以组合得到12个交互组,具体请参见图2。在图2中,数据生产方p1分别与数据消费方c1、c2、c3、c4组成4个交互组,数据生产方p2分别与数据消费方c1、c2、c3、c4组成4个交互组,数据生产方p3分别与数据消费方c1、c2、c3、c4组成4个交互组,共得12个不重复的交互组。
68.其中,每个交互组所设置的数据交互队列为fifo环形队列。在fifo队列中,先进入的指令先完成处理并引退后,才执行第二条指令。每个fifo环形队列都对应有一个ring结构体,该ring结构体随着队列的使用,三个指针的赋值相应变化。ring结构体中的三个指针即图3中的w、r、s,图3中的“d”表示共享内存存储的数据。
69.在本实施例中,任一个交互组中仅有一个数据生产方和一个数据消费方,因此双
方基于队列传输数据时,不加锁也不会存在争抢现象,可见交互组可保障操作的有序性,从而可避免上锁、释放锁操作。
70.本实施例应用于安全检测网关,数据生产方用于捕获外网请求,数据消费方用于检测外网请求的安全性,并反馈检测结果给数据生产方。
71.可见,针对多生产方和多消费方进行数据恢复的场景,将任一个数据生产方和任一个数据消费方组合,从而得到不重复的多个交互组,并针对每个交互组设置一个队列,使得各个交互组都可以利用自身队列进行数据恢复。其中,由于每个交互组中只有一个数据生产方和一个数据消费方,双方不会争抢队列的操作权限,因此双方无需对队列上锁,就能保障操作的有序性,故而省去了上锁、释放锁操作的开销,降低了多生产方和多消费方传输数据时的系统开销。
72.参见图4所示,本技术实施例公开了另一种数据恢复方法,包括:
73.s401、若数据消费方发生异常,则数据消费方控制自身对应的数据交互队列处于去使能状态。
74.s402、数据交互队列对应的数据生产方在检测到去使能状态的情况下,回收数据交互队列中未被数据消费方处理的数据。
75.在一种具体实施方式中,利用注册信号函数或atexit函数检测数据消费方是否异常。
76.其中。通过注册信号函数进行数据消费方的异常检测,包括:数据消费方异常时,系统内核直接发送异常信号给注册信号函数,从而实现数据消费方的异常信号的捕捉。
77.其中,利用c库的atexit函数进行数据消费方的异常检测,包括:捕捉数据消费方退出信号。atexit函数是程序退出的时候做的回调函数,正常异常都会回调到这里,因此退出信号也包括重启引起的退出信号。
78.一般地,数据生产方在接收到新的待传输数据时,检测数据交互队列的状态。当然,数据生产方也可以按照周期或其他策略检测数据交互队列的状态。
79.本实施例以flowd作为数据生产方,以serviced作为数据消费方,设计实现无锁零拷贝队列,也即:flowd与serviced组合为一个交互组,该交互组对应一个队列和相应的共享内存。同时,该交互组中的serviced根据自身异常与否相应控制队列的状态使能与否,以使该交互组中的flowd能够感知队列来回收数据包,以此来保证数据不乱序不丢包。具体请参见图5和图6。
80.1、无锁零拷贝队列的核心思想是r、w、s指针的使用,能使数据以只读的形式让消费方做检查。
81.针对任一个交互组,队列的ring结构中指针的初始状态:w=r=s=0
82.(1)flowd往ring写数据的时候,拷贝数据到ring后,移动w指针,即w 1=1,实现代码为:static inline int__libring_write(struct st_ring*r,const char*v)。
83.(2)serviced从ring拿数据并直接处理,等处理完数据后,直接移动r指针到下一个位置,即:r 1=1,实现代码为:static inline void libring_read_get(const struct st_ring*r,char*v),static inline struct sf_msg_info*libring_read_zcopy(const struct st_ring*r)。
84.(3)flowd判断s和r的不等的时候,表示serviced已经消费完数据得到了结果,这
个时候flowd拿出结果,移动s指针即可。即:s!=r时,flowd读取data[s],并控制s 1=1。实现代码为:static inline int__libring_send(struct st_ring*r,char*v)。
[0085]
若serviced中途退出,那么未被serviced处理的数据仍然保留在队列中,故可以回收这些数据。必要时,可对ring做清理或重置。
[0086]
2、flowd读写数据前,根据ring的状态(即队列的状态)来决定是bypass还是做安全检测。
[0087]
如果serviced重启或者异常,serviced控制自己对应的ring状态变更为去使能,这样就能让flowd基于该ring状态确定是bypass还是做安全检测。
[0088]
对flowd而言,若ring去使能,则做bypass,即:flowd回收ring中的数据和当前新接收的数据,直接发送至内网节点,以保证数据包不丢包。若ring使能,则做安全检测,即:flowd按照上述(1)写入数据。
[0089]
可见,flowd只需要一直根据ring的状态来做事,如果ring处于使能状态,就持续通过ring将数据送到serviced做检测,否则就直接bypass当前流量和ring里面的数据,既能保证数据流不乱序,也能保证不丢包。
[0090]
其中,在serviced的退出逻辑里面增加去使能ring的逻辑,那么在serviced重启或异常时,就能感知到其异常状态,从而更改ring的状态为去使能。相应的,在serviced的启动逻辑里面增加使能ring的逻辑,那么在serviced启动后,就能更改ring的状态为使能。
[0091]
其中,serviced在出现异常的时候,主动disable ring的状态,可以通过以下两个方案来设置:
[0092]

、通过注册信号函数来回调实现。当出现异常的时候,系统内核会发送对应的信号给进程,接受这些信号,就能做对应的回调处理,大部分信号都能正常捕捉。
[0093]

、通过c库的atexit函数来实现。这是程序退出的时候做的回调函数,正常异常都会回调到这里。
[0094]
参见图5所示,serviced的状态异常有如下两种情况:(1)serviced异常退出(注册信号函数可检测到);(2)serviced重启(atexit函数可检测到)。
[0095]
可见,本实施例在当前的防火墙软件架构的基础上,能够解决serviced重启(异常重启或者打补丁升级重启)导致客户网络中断的问题,实现客户网络零丢包。
[0096]
下面对本技术实施例提供的一种数据恢复装置进行介绍,下文描述的一种数据恢复装置与上文描述的一种数据恢复方法可以相互参照。
[0097]
参见图7所示,本技术实施例公开了一种数据恢复装置,应用于数据生产方,包括:
[0098]
检测模块701,用于若接收到待传输数据,则检测数据交互队列的状态;
[0099]
回收模块702,用于若状态为去使能状态,则回收数据交互队列中未被数据消费方处理的数据,以及待传输数据。
[0100]
在一种具体实施方式中,回收模块具体用于:
[0101]
从数据交互队列中获取读指针和已处理指针;
[0102]
根据读指针和已处理指针之间的偏移确定并回收数据交互队列中未被数据消费方处理的数据。
[0103]
在一种具体实施方式中,数据交互队列的生成过程包括:
[0104]
若数据交互队列仅对应一个数据生产方和一个数据消费方,则创建供数据交互队
列对应的数据生产方和数据消费方共享的共享内存;
[0105]
在共享内存中创建并初始化fifo队列,以使fifo队列中的三个指针初始化为默认值,得到数据交互队列。
[0106]
在一种具体实施方式中,还包括:
[0107]
安全检测模块,用于若状态为使能状态,则写入待传输数据至数据交互队列,并控制第一指针递增一,以使数据消费方在确定第一指针与第二指针不等的情况下,在数据交互队列中处理待传输数据得到处理结果,并控制第二指针递增一;在确定第二指针与第三指针不等的情况下,从数据交互队列中获取处理结果,并控制第三指针递增一。
[0108]
在一种具体实施方式中,待传输数据为多个报文分片。
[0109]
在一种具体实施方式中,还包括:
[0110]
bypass模块,用于利用bypass技术处理回收得到的数据。
[0111]
其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0112]
可见,本实施例提供了一种数据恢复装置,该装置中的数据生产方在接收到待传输数据时,先检测数据交互队列的状态,若数据交互队列处于去使能状态,则表明数据交互队列异常,也就是队列中的数据已不能被正常处理,为避免出现丢包问题,使数据生产方回收数据交互队列中未被数据消费方处理的数据以及待传输数据,从而可避免数据丢失。
[0113]
下面对本技术实施例提供的另一种数据恢复装置进行介绍,下文描述的另一种数据恢复装置与上文描述的另一种数据恢复方法可以相互参照。
[0114]
本技术实施例公开了一种数据恢复装置,应用于数据消费方,包括:
[0115]
控制模块,用于若数据消费方发生异常,则控制自身对应的数据交互队列处于去使能状态,以使数据交互队列对应的数据生产方在检测到去使能状态的情况下,回收数据交互队列中未被数据消费方处理的数据。
[0116]
其中,利用注册信号函数或atexit函数检测数据消费方是否异常。一般地,数据生产方在接收到新的待传输数据时,检测数据交互队列的状态。当然,数据生产方也可以按照周期或其他策略检测数据交互队列的状态。
[0117]
下面对本技术实施例提供的一种电子设备进行介绍,下文描述的一种电子设备与上文描述的一种数据恢复方法及装置可以相互参照。
[0118]
参见图8所示,本技术实施例公开了一种电子设备,包括:
[0119]
存储器801,用于保存计算机程序;
[0120]
处理器802,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
[0121]
请参考图9,图9为本实施例提供的另一种电子设备示意图,该电子设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在电子设备301上执行存储介质330中的一系列指令操作。
[0122]
电子设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,windows servertm,mac os xtm,unixtm,linuxtm,freebsdtm等。
[0123]
在图9中,应用程序342可以是执行数据恢复方法的程序,数据344可以是执行数据恢复方法所需的或产生的数据。
[0124]
上文所描述的数据恢复方法中的步骤可以由电子设备的结构实现。
[0125]
下面对本技术实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种数据恢复方法、装置及设备可以相互参照。
[0126]
一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的数据恢复方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0127]
本技术涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。
[0128]
需要说明的是,在本技术中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本技术要求的保护范围之内。
[0129]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
[0130]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的可读存储介质中。
[0131]
本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献