【发明内容】
有鉴于此,本发明提供了一种高可靠性的数据通信方法和装置,保证通信数据的完整性和可用性。
具体技术方案如下:
一种高可靠性的数据通信方法,该方法包括:
采用双缓存技术使得读写操作在双缓存中交错进行,其中写操作为将接收到的数据写入缓存,读操作为将缓存中的数据发送至目标设备;
当发送数据至目标设备发生异常时,将发送失败的数据写入本地文件池,或者当缓存出现写溢出时,将写入缓存失败的数据写入本地文件池;
周期性地将本地文件池中的数据发送至所述目标设备。
根据本发明一优选实施例,所述采用双缓存技术使得读写操作在双缓存中交错进行具体包括:
当标识位为0时,将接收到的数据写入第一缓存,将第二缓存中的数据发送至目标设备,当第二缓存中的数据发送完成后,设置所述标志位为1;
当标志位为1时,将接收到的数据写入第二缓存,将第一缓存中的数据发送至目标设备,当第一缓存中的数据发送完成后,设置所述标识位为0。
根据本发明一优选实施例,在将数据写入本地文件池时,具体执行:
首先判断所述本地文件池是否为空,如果是,则创建文件并将数据写入创建的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满;否则,将数据写入未满的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满。
根据本发明一优选实施例,周期性地将本地文件池中的数据发送至所述目标设备具体包括:
S1、在文件发送周期中,判断所述本地文件池是否为空,如果为空,则重新转至执行步骤S1,直至当前文件发送周期结束;如果不为空,则执行步骤S2;
S2、获取文件列表;
S3、从列表中取出一个文件发送至所述目标设备,并从本地文件池中删除发送成功的文件;重新转至执行步骤S3,直至文件列表为空或当前文件发送周期结束。
根据本发明一优选实施例,该方法适用于分布式通信系统;
当该方法由中心设备执行时,所述目标设备为分支设备;
当该方法由分支设备执行时,所述目标设备为中心设备。
一种高可靠性的数据通信装置,该系统包括:
双缓存读写模块,用于采用双缓存技术使得读写操作在双缓存中交错进行,其中写操作为将接收到的数据写入缓存,读操作为将缓存中的数据发送至目标设备;
持久化处理模块,用于当发送数据至目标设备发生异常时,将发送失败的数据写入本地文件池,或者当缓存出现写溢出时,将写入缓存失败的数据写入本地文件池;
数据补偿模块,用于周期性地将本地文件池中的数据发送至所述目标设备。
根据本发明一优选实施例,所述双缓存读写模块具体包括:
写数据模块,用于当标识位为0时,将接收到的数据写入第一缓存,当标识位为1时,将接收到的数据写入第二缓存;
读数据模块,用于当标识位为0时,将第二缓存中的数据发送至目标设备,当标志位为1时,将第一缓存中的数据发送至目标设备;
标识位控制模块,用于当第二缓存中的数据发送完成后,设置所述标志位为1,当第一缓存中的数据发送完成后,设置所述标识位为0。
根据本发明一优选实施例,所述持久化处理模块在将数据写入本地文件池时,具体执行:
首先判断所述本地文件池是否为空,如果是,则创建文件并将数据写入创建的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满;否则,将数据写入未满的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满。
根据本发明一优选实施例,所述数据补偿模块具体执行:
S1、在文件发送周期中,判断所述本地文件池是否为空,如果为空,则重新转至执行操作S1,直至当前文件发送周期结束;如果不为空,则执行操作S2;
S2、获取文件列表;
S3、从列表中取出一个文件发送至所述目标设备,并从本地文件池中删除发送成功的文件;重新转至执行操作S3,直至文件列表为空或当前文件发送周期结束。
根据本发明一优选实施例,该装置适用于分布式通信系统;
当该装置设置在中心设备中时,所述目标设备为分支设备;
当该装置设置在分支设备中时,所述目标设备为中心设备。
由以上技术方案可以看出,本发明通过在双缓存技术中可能会产生的写缓存溢出或发送数据至目标设备发生异常时,将缓存失败或发送失败的数据写入本地文件池,并周期性地将本地文件池中的数据发送至目标设备,即采用数据持久化和数据补偿两种方式保证了目标设备所接收数据的完整性和可用性,避免了因传输带宽不够或链路不稳定所引起的数据丢失。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
在本发明实施例中以分布式数据中心系统为例进行描述,监控管理平台和各数据中心之间的数据传输完整性和可用性需要保证,由背景技术中的描述可知,在该系统中作为中心设备的监控管理平台其所接收数据的完整性和可用性尤为重要。下面就通过实施例一以保证监控管理平台所接收数据的完整性和可靠性为例,对本发明提供的方法进行详细描述。首先对这种场景下的具体环境进行简单介绍,监控管理平台的整个设计基于C/S(客户机/服务器)或B/S(浏览器/服务器)架构,在此将其中的C(客户机)和B(服务器)统称为Agent(代理),即Agent和Server(服务器)架构。其中Agent负责采集数据并发送至Server,Agent直接与Server进行数据通信。Agent与Server之间的通信通道有监控通道和管理通道两种,监控通道主要作用是传送Agent收集的事件和性能数据,管理通道作用是传送Sever到Agent的管理命令,实施例一的方法主要用于通信通道的通信数据。
实施例一、
图2为本发明实施例一提供的数据通信方法的示意图,该方法主要通过设置在Agent中的数据通信装置来实现。在Agent中采用双缓存技术使得读写操作在双缓存中交错进行,如图2所示,包含Buffer A和Buffer B两个缓存,这两个缓存以固定的时间(最小5秒)隔交错进行读写操作,其中写操作指的是将Agent接收到的数据写入缓存,读操作指的是将缓存中的数据发送至目标设备,本实施例中的目标设备为Server。
为了防止由于传输带宽不稳定或者链路不稳定所引起的数据发送异常,在发送数据至目标设备发生异常时,将发送失败的数据写入本地文件池。还有一种情况,由于缓存的容量有限,可能会存在写操作过程中的缓存溢出,这也可能会造成数据不完整的情况,因此在缓存出现写溢出时,也将缓存失败的数据写入本地文件池。上述这一过程称为持久化过程,即将可能引起丢失的数据持久化到本地文件池。所谓本地文件池实际上是用于存储本地文件的存储空间,在该存储空间中数据可以以文件形式存储。
对于本地文件池中的数据,采用周期性发送的方式发送至Server(即目标设备),对于发送完成的数据从本地文件池中删除,其中发送周期可以根据实际状况进行自定义,例如定义为30分钟。这一过程称为数据补偿过程。
下面对上面所述的几个过程进行详细描述,首先采用双缓存技术实现的读写操作在双缓存中交错进行,可以通过设置一个标志位Flag来进行控制。
当Flag为0时,将接收到的数据写入Buffer A,将Buffer B中的数据发送至Server,当Buffer B中的数据发送完成后,设置Flag为1。
当Flag为1时,将接收到的数据写入Buffer B,将Buffer A中的数据发送至Server,当Buffer A中的数据发送完成后,设置Flag为0。
另外,也可以采用默认预设时长作为交换时间,例如30秒,在第一个30秒内将接收到的数据写入Buffer A,将Buffer B中的数据发送至Server;在第二个30秒内将接收到的数据写入Buffer B,将BufferA中的数据发送至Server。
如果在上述过程中发生写缓存溢出,则执行持久化过程,即将缓存失败的数据写入本地文件池。
在读操作过程中,将缓存中的数据发送至Server,如果发生异常,则需要执行持久化过程,即将发送失败的数据写入本地文件池。该读操作的执行流程如图3所示,包括以下步骤:
步骤301:依据Flag到对应的缓存中读取数据,将读取的数据发送至Server。
步骤302:判断数据发送是否发生异常,如果是,则执行步骤303;否则,执行步骤304。
在此判断数据发送是否异常的方式与采用的具体TCP协议相关,例如可以在发送数据的设定时长内没有收到来自目标设备的指示接收数据成功的响应或接收到来自目标设备的指示接收数据失败的响应时,确认数据发送发生异常。如果存在数据重发机制,则若重发N次数据都失败,则确认数据发送发生异常,N为协议设定的正整数。
步骤303:将发送失败的数据写入本地文件池,转至步骤301。
步骤304:将发送成功的数据从缓存中删除,转至步骤301。
写操作的执行流程如图4所示,包括以下步骤:
步骤401:依据Flag选择要写入的缓存。
步骤402:判断要写入的缓存是否已满,如果是,则执行步骤403;否则,执行步骤404。
步骤403:针对要写入的缓存执行持久化流程,即写入本地文件池,转至步骤401。
步骤404:将接收到的数据写入该缓存,转至步骤401。
持久化的流程就是当发送数据至目标设备发生异常时,将发送失败的数据写入本地文件池,或者当缓存出现写溢出时,将写入缓存失败的数据写入本地文件池。在将数据写入本地文件池时,如图5所示,具体包括以下步骤:
步骤501:判断本地文件池是否为空,如果是,执行步骤502;否则,执行步骤503。
步骤502:创建文件并将数据写入创建的文件,执行步骤504。
步骤503:将数据写入未满的文件,执行步骤504。
本步骤是找出上一次写入的文件,如果上一次写入的文件未满,继续将该数据写入该未满的文件,如果上一次写入的文件已满,则直接执行步骤504。
步骤504:文件被写满后再创建新的文件进行数据写入,直至文件池已满。
数据补偿过程是将本地文件池中的数据周期性地发送至Server,然后删除发送成功的文件。如图6所示,具体包括以下步骤:
步骤601:在文件发送周期中,判断本地文件池是否为空,如果为空,则重新转至执行步骤601,等待文件池中有文件发送,直至当前文件发送周期结束;如果不为空,则执行步骤602。
步骤602:获取本地文件池的文件列表。
步骤603:从文件列表中取出一个文件发送至Server,并从本地文件池中删除发送成功的文件,重新转至执行步骤603,直至文件列表为空或当前文件发送周期结束。
以上是对本发明提供的方法进行的详细描述,下面结合实施例二对本发明提供的数据通信装置进行详细描述。
实施例二、
图7为本发明实施例二提供的数据通信装置的结构图,如图7所示,该装置包括:双缓存读写模块700、持久化处理模块710和数据补偿模块720,其中,双缓存读写模块700具体包括:写数据模块701、读数据模块702和标识位控制模块703。
双缓存读写模块700采用双缓存技术使得读写操作在双缓存中交错进行,其中写操作为将接收到的数据写入缓存,读操作为将缓存中的数据发送至目标设备。
具体地,可以通过以下方式实现上述的双缓存技术:可以通过设置一个Flag来进行控制。
当Flag为0时,写数据模块701将接收到的数据写入Buffer A,当Flag为1时,写数据模块701将接收到的数据写入Buffer B。
当Flag为0时,读数据模块702将Buffer B中的数据发送至目标设备,当Flag为1时,读数据模块702将Buffer A中的数据发送至目标设备。
当Buffer B中的数据发送完成后,标识位控制模块703设置Flag为1,当BufferA中的数据发送完成后,标识位控制模块703设置Flag为0。
除了上述方式之外,也可以采用默认预设时长作为交换时间,例如30秒,在第一个30秒内将接收到的数据写入Buffer A,将Buffer B中的数据发送至Server;在第二个30秒内将接收到的数据写入Buffer B,将Buffer A中的数据发送至Server。
持久化处理模块710执行持久化流程,当发送数据至目标设备发生异常时,持久化处理模块710将发送失败的数据写入本地文件池,或者当缓存出现写溢出时,持久化处理模块710将写入缓存失败的数据写入本地文件池。
持久化处理模块710在将数据写入本地文件池时,具体执行:首先判断本地文件池是否为空,如果是,则创建文件并将数据写入创建的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满;否则,将数据写入未满的文件,直至文件被写满后,再创建新的文件进行数据写入,直至文件池已满。即执行如图5所示流程。
数据补偿模块720周期性地将本地文件池中的数据发送至目标设备。具体执行如图6所示流程,在此不再赘述。
本发明上述实施例以分布式数据中心中保证监控管理中心数据完整性和可用性为例,需要说明的是,本发明提供的方法和装置适用于任何通信设备和通信架构,来保证通信链路网络带宽不能满足通信需求情况下保证数据的完整性和可用性,尤其分布式通信系统,当该装置设置在中心设备中时,对应的目标设备为分支设备;当该装置设置在分支设备中时,对应的目标设备为中心设备。例如可以适用于地理信息系统(GIS)、智能交通、智能电力、智能安全、物联网等领域。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。