处理数据的方法和装置与流程

文档序号:13619410阅读:196来源:国知局
本发明涉及计算领域,并且更具体地,涉及一种处理数据的方法和装置。
背景技术
::随着移动宽带(mobilebroadband,mbb)和物联网(internetofthings,iot)的快速发展,全球的数据和信息呈现爆炸性增长趋势。来自咨询公司的数据显示,数据和信息的增长速度,远远超过了计算设备的存储能力的增长。同时,相关学者也指出,数据和信息的价值,随着分析时间的增长而快速下降。传统的分析数据的模式是先将所有的原始数据和信息保存下来,然后再对数据和信息进行分析。原始数据和信息的存储开销非常大,存储数据花费的时间大大影响了数据的价值。因此,大数据流处理(bigdatastreamprocessing)逐渐成为未来数据分析领域的核心技术之一。相比大数据离线批处理,在大数据流处理中,通常将数据视为连续的数据流并且实时的处理数据流中的每一个数据元组。为了可扩展性的需要,可以进一步采用分布式流处理系统处理数据。分布式流处理采用分布式的系统和内存技术,对连续不断到达的数据进行实时处理分析。在多个线程或者服务器上,可以并行地处理多个数据元组。在分布式流处理的编程范式下,数据通常只通过系统一次。为了进行高速高效地处理和分析,分布式流处理系统不论是处理还是存储,通常都采用易失性的不可靠存储空间(例如内存)。在该过程中,处理后的原始数据不被保存并且不能再次获取,不能保证系统的可靠性,从而影响数据处理结果的正确性。为了提高系统的可靠性,现有的一种方案采用上游备份。具体而言,作为数据发送方的位于上游的计算单元在将数据发送到下游的计算单元后,会把发送的数据,持久化备份到分布式的内存或硬盘(包括hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs))中,当下游的计算单元完成处理并反馈确认(acknowledgement,ack)信息后,按需清空上游的计算单元的缓存。上游备份的方案将所有的数据进行备份,可靠性高,然而保存过程会消耗大量的计算和存储资源;并且下游的计算单元的处理速度制约了上游的计算单元的处理;当下游的计算单元发生故障时,进行容错恢复时,会影响上游的计算单元的工作。总而言之,上游备份的方案使得分布式流处理系统处理数据时的效率低下。技术实现要素:本申请提供一种处理数据的方法和装置,可以高效的利用系统的处理能力,提升系统整体的吞吐率。第一方面,本申请提供了一种处理数据的方法,该方法包括第一计算单元接收第二计算单元发送的第一接收数据,所述第二计算单元位于所述第一计算单元的上游;所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中;所述第一计算单元对所述第一接收数据进行计算处理,生成多个第一状态信息和第一发送数据,所述多个第一状态信息用于指示对所述第一接收数据进行所述计算处理的过程中形成的多个第一中间状态,所述多个第一状态信息中的每个第一状态信息包括对所述第一接收数据进行所述计算处理的过程中得到的中间结果,所述第一发送数据为对所述第一接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中;所述第一计算单元向第三计算单元发送所述第一发送数据,所述第三计算单元位于所述第一计算单元的下游。第一方面的处理数据的方法是下游备份的方法,对数据和第一状态信息进行选择性持久化备份,可以提升备份的效率,降低备份数据和第一状态信息的总量,从而能够更加高效的利用系统的处理能力,提升系统整体的吞吐率。在第一方面的一种可能的实现方式中,所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中,包括:所述第一计算单元根据用户定义的数据备份规则,对所述第一接收数据进行选择,并备份到所述持久化备份设备中;所述第一计算单元将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中,包括:所述第一计算单元根据用户定义的状态备份规则,对所述多个第一状态信息进行选择,并备份到所述持久化备份设备中。在该实现方式中,将选择性持久化备份的规则开放给用户,由用户定义数据备份规则和/或状态备份规则,可以进一步提升备份的效率。在第一方面的一种可能的实现方式中,在所述第一计算单元接收第二计算单元发送的第一接收数据之后,所述方法还包括:所述第一计算单元在所述第一计算单元的接收缓存中缓存所述第一接收数据;所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中,包括:如果所述第一计算单元的接收缓存中缓存的数据量大于预设的第一门限,所述第一计算单元将所述第一接收数据中超出所述第一门限的第一部分数据持久化备份到所述持久化备份设备中;所述第一计算单元将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中,包括:如果所述多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻所述持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第二门限,所述第一计算单元将所述目标状态信息持久化备份到所述持久化备份设备中,所述目标状态信息为所述多个第一状态信息中的任意一个第一状态信息。在该实现方式中,对数据和第一状态信息设置备份的门限,可以进一步提升备份的效率,降低备份数据和第一状态信息的总量,提升系统整体的吞吐率。在该实现方式中,所述方法还可以包括:如果所述第一计算单元在预设的时间段内发生多于或等于预设次数的故障,所述第一计算单元减小所述第一门限的值和所述第二门限的值。该方案可以防止由于同一个计算单元多次出现故障,造成累积效应,使得该计算单元严重影响系统的整体性能和效率。在第一方面的一种可能的实现方式中,在所述第一计算单元接收第二计算单元发送的第一接收数据之前,所述方法还包括:所述第一计算单元接收控制器发送的恢复指示信息,所述恢复指示信息用于指示所述第一计算单元替代出现故障的第四计算单元进行工作;所述第一计算单元从所述持久化备份设备中获取所存储的最新的状态信息;当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成多个第二状态信息和第二发送数据,所述多个第二状态信息用于指示对所述第二接收数据进行所述计算处理的过程中形成的多个第二中间状态,所述多个第二状态信息中的每个第二状态信息包括对所述第二接收数据进行所述计算处理的过程中得到的中间结果,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述多个第二状态信息选择性持久化备份到所述持久化备份设备中;所述第一计算单元向所述第三计算单元发送所述第二发送数据。该实现方式给出了计算单元出现故障时的处理方法,即进行容错恢复处理。在第一方面的一种可能的实现方式中,在所述第一计算单元完成对所述第一接收数据的所述计算处理之前,所述方法还包括:所述第一计算单元向所述第二计算单元反馈确认信息,所述确认信息用于指示所述第二计算单元根据所述确认信息,删除所述第二计算单元中缓存的所述第一接收数据。在该实现方式中,由处于下游的计算单元进行数据备份,下游的计算单元不需等待计算处理完成,就可以反馈确认信息给上游的计算单元,指示上游的计算单元删除缓存中的相应数据,缓存空间可以及时释放,能够提高上游的计算单元释放空间、接收并处理新数据的速度,从而更加高效的利用系统的处理能力,可以提升系统整体的吞吐率。在第一方面的一种可能的实现方式中,所述方法还包括:所述第一计算单元获取并在所述第一计算单元的接收缓存中缓存第三发送数据,所述第三发送数据为所述第三计算单元进行计算处理后形成的数据;将所述第三发送数据作为所述第一接收数据,对所述第一接收数据进行计算处理。在该实现方式中,数据处理可以实现一跳反馈,使计算单元中位于下游的计算单元处理后的数据能够反馈到上一跳的计算单元,再通过对现有的迭代算法的分析和抽象,能够实现有效地支持迭代计算的数据分析。第二方面,本申请还提供了一种处理数据的装置,为计算单元。计算单元可以是第一计算单元,其包括接收模块、第一计算模块、发送模块和选择性备份模块,以用于完成本申请的第一方面及相应的实现方式的处理数据的方法。第二方面的第一计算单元还可以包括接收缓存、处理模块、容错恢复模块和反馈模块中的至少一种,以完成第一方面相应的实现方式中的方法,此处不再赘述。第三方面,本申请提供了一种处理数据的方法,该方法包括:第一计算单元接收第二计算单元发送的第一接收数据,所述第二计算单元位于所述第一计算单元的上游;所述第一计算单元对所述第一接收数据进行计算处理,生成多个第一状态信息和第一发送数据,所述多个第一状态信息用于指示对所述第一接收数据进行所述计算处理的过程中形成的多个第一中间状态,所述多个第一状态信息中的每个第一状态信息包括对所述第一接收数据进行所述计算处理的过程中得到的中间结果,所述第一发送数据为对所述第一接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述第一发送数据和所述多个第一状态信息选择性持久化备份到持久化备份设备中;所述第一计算单元向第三计算单元发送所述第一发送数据,所述第三计算单元位于所述第一计算单元的下游。第三方面的处理数据的方法是上游备份的方法,对数据和第一状态信息进行选择性持久化备份,可以提升备份的效率,降低备份数据和第一状态信息的总量,从而能够更加高效的利用系统的处理能力,提升系统整体的吞吐率。在第三方面的一种可能的实现方式中,所述第一计算单元将所述第一发送数据和所述多个第一状态信息选择性持久化备份到持久化备份设备中,包括:所述第一计算单元根据用户定义的数据备份规则,对所述第一发送数据进行选择,并备份到所述持久化备份设备中;所述第一计算单元根据用户定义的状态备份规则,对所述多个第一状态信息进行选择,并备份到所述持久化备份设备中。在第三方面的一种可能的实现方式中,在所述第一计算单元完成对所述第一接收数据的计算处理得到所述第一发送数据之后,所述方法还包括:所述第一计算单元在所述第一计算单元的发送缓存中缓存所述第一发送数据;所述第一计算单元将所述第一发送数据和所述多个第一状态信息选择性持久化备份到持久化备份设备中,包括:如果所述第一计算单元的发送缓存中缓存的数据量大于预设的第三门限,所述第一计算单元对所述第一发送数据中超出所述第三门限的第一部分数据持久化备份到所述持久化备份设备中;如果所述多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻所述持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第四门限,所述第一计算单元将所述目标状态信息持久化备份到所述持久化备份设备中,所述目标状态信息为所述多个第一状态信息中的任意一个第一状态信息。在第三方面的一种可能的实现方式中,所述方法还包括:如果所述第一计算单元在预设的时间段内发生多于或等于预设次数的故障,所述第一计算单元减小所述第三门限的值和所述第四门限的值。在第三方面的一种可能的实现方式中,在第一计算单元接收第二计算单元发送的第一接收数据之前,所述方法还包括:所述第一计算单元接收控制器发送的恢复指示信息,所述恢复指示信息用于指示所述第一计算单元替代出现故障的第四计算单元进行工作;所述第一计算单元从所述持久化备份设备中获取所存储的最新的状态信息;当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成多个第二状态信息和第二发送数据,所述多个第二状态信息用于指示对所述第二接收数据进行所述计算处理的过程中形成的多个第二中间状态,所述多个第二状态信息中的每个第二状态信息包括对所述第二接收数据进行所述计算处理的过程中得到的中间结果,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述多个第二状态信息选择性持久化备份到所述持久化备份设备中;所述第一计算单元向所述第三计算单元发送所述第二发送数据。第三方面的各可能的实现方式的有益效果可以参照第一方面相应的实现方式的有益效果,此处不再进行赘述。第四方面,本申请还提供了一种处理数据的装置,为计算单元。计算单元可以是第一计算单元,其包括接收模块、第一计算模块、发送模块和选择性备份模块,以用于完成本申请的第三方面及相应的实现方式的处理数据的方法。第四方面的第一计算单元还可以包括发送缓存、处理模块和容错恢复模块中的至少一种,以完成第三方面相应的实现方式中的方法,此处不再赘述。第五方面,本申请还提供了一种处理数据的方法,该方法包括:第一计算单元接收并在所述第一计算单元的接收缓存中缓存第二计算单元发送的第一接收数据,所述第二计算单元位于所述第一计算单元的上游;所述第一计算单元将所述第一接收数据持久化备份到持久化备份中;所述第一计算单元向所述第二计算单元反馈确认信息,所述确认信息用于指示所述第二计算单元根据所述确认信息,删除所述第二计算单元中缓存的所述第一接收数据;所述第一计算单元对所述第一接收数据进行计算处理,生成第一发送数据,所述第一发送数据为对所述第一接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述第一发送数据缓存在所述第一计算单元的发送缓存中,并向第三计算单元发送所述第一发送数据,所述第三计算单元位于所述第一计算单元的下游。第五方面的处理数据的方法,由处于下游的计算单元进行数据备份,下游的计算单元不需等待计算处理完成,就可以反馈确认信息给上游的计算单元,指示上游的计算单元删除缓存中的相应数据,缓存空间可以及时释放,能够提高上游的计算单元释放空间、接收并处理新数据的速度,从而更加高效的利用系统的处理能力,可以提升系统整体的吞吐率。在第五方面的一种可能的实现方式中,所述第一计算单元将所述第一接收数据持久化备份到持久化备份中,包括:如果所述第一计算单元的接收缓存中缓存的数据量大于预设的第一门限,所述第一计算单元将所述第一接收数据中超出所述第一门限的第一部分数据持久化备份到所述持久化备份设备中;所述方法还包括:在对所述第一接收数据进行所述计算处理的过程中,生成多个第一状态信息,所述多个第一状态信息用于指示对所述第一接收数据进行所述计算处理的过程中形成的多个第一中间状态,所述多个第一状态信息中的每个第一状态信息包括对所述第一接收数据进行所述计算处理的过程中得到的中间结果;如果所述多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻所述持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第二门限,所述第一计算单元将所述目标状态信息持久化备份到所述持久化备份设备中,所述目标状态信息为所述多个第一状态信息中的任意一个第一状态信息。在该实现方式中,对数据和第一状态信息设置备份的门限,可以进一步提升备份的效率,降低备份数据和第一状态信息的总量,提升系统整体的吞吐率。在第五方面的一种可能的实现方式中,所述方法还包括:如果所述第一计算单元在预设的时间段内发生多于或等于预设次数的故障,所述第一计算单元减小所述第一门限的值和所述第二门限的值。该实现方式可以避免在同一个计算单元多次出现故障时造成的累积效应,避免该计算单元严重影响系统的整体性能和效率。在第五方面的另一种可能的实现方式中,所述第一计算单元将所述第一接收数据持久化备份到持久化备份中,包括:所述第一计算单元将所述第一接收数据的全部数据持久化备份到所述持久化备份设备中。在该实现方式中,对全部的接收数据进行持久化备份,可以最大限度的保证系统的可靠性。在第五方面的另一种可能的实现方式中,在所述第一计算单元接收并在所述第一计算单元的接收缓存中缓存第二计算单元发送的第一接收数据之前,所述方法还包括:所述第一计算单元接收控制器发送的恢复指示信息,所述恢复指示信息用于指示所述第一计算单元替代出现故障的第四计算单元进行工作;所述第一计算单元从所述持久化备份设备中获取所存储的最新的状态信息;当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成第二发送数据,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述第二发送数据缓存在所述第一计算单元的发送缓存中,并向所述第三计算单元发送所述第二发送数据。在第五方面的一种可能的实现方式中,所述方法还包括:所述第一计算单元获取并在所述第一计算单元的接收缓存中缓存第三发送数据,所述第三发送数据为所述第三计算单元进行计算处理后形成的数据;将所述第三发送数据作为所述第一接收数据,对所述第一接收数据进行计算处理。在该实现方式中,数据处理可以实现一跳反馈,使计算单元中位于下游的计算单元处理后的数据能够反馈到上一跳的计算单元,再通过对现有的迭代算法的分析和抽象,能够实现有效地支持迭代计算的数据分析。第六方面,本申请还提供了一种处理数据的装置,为计算单元。计算单元可以是第一计算单元,其包括接收模块、第一接收缓存、第一计算模块、第一发送缓存、发送模块、反馈模块和数据备份模块,以用于完成第五方面的处理数据的方法。第六方面的第一计算单元还可以包括处理模块和容错恢复模块中的至少一种,以完成第五方面相应的实现方式中的方法,此处不再赘述。第七方面,本申请还提供了一种计算单元。计算单元可以是第一计算单元,其包括输入接口、输出接口、处理器和存储器,其中,所述输入接口,用于从上游的计算节点获取数据;所述存储器,用于缓存数据并用于与处理器耦合,保存必要的程序指令和数据;所述处理器,用于完成对数据的备份、计算等相应处理,所述输出接口,用于向下游的计算单元发送数据。该第一计算单元用于完成本申请各方面的处理数据的方法,且第其方面的计算单元相应器件的功能可以与第二方面、第四方面或第六方面的第一计算单元相应模块的功能项对应,此处不再赘述。第八方面,本申请还提供了一种处理数据的装置,为数据处理系统。数据处理系统可以包括控制器、持久化备份设备、数据源节点、输出目的节点和至少一个第一计算单元,以用于完成本申请各方面的处理数据的方法。应理解,本申请的第一计算单元可以是多种粒度的计算单元,例如可以是工作节点或计算进程等。本申请给出分布式流处理系统和处理流程的api的定义,可以很大程度方便大数据实时流处理的标准化和统一化设计实现,为应用部署和用户可动态调整控制带来很大便利。其中,接收第二计算单元发送的第一接收数据可以通过调用数据接收应用程序编程接口api实现。将所述第一接收数据选择性持久化备份到持久化备份设备中可以通过调用选择性备份功能实现;将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中也可以可以通过调用选择性备份功能实现。对所述第一接收数据进行计算处理可以通过调用数据处理api实现。向第三计算单元发送所述第一发送数据可以通过调用数据发送api实现。选择性备份功能中可以包括备份数据api、备份状态api和状态差异比较api,来分别实现第一方面中相应的方法。减小所述第一门限的值和所述第二门限的值可以通过调用调整门限api实现。进行容错恢复处理时还可以通过调用获取状态api和获取数据api实现第一方面中相应的方法。向所述第二计算单元反馈确认信息可以通过调用反馈响应api实现。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是分布式流处理系统的示意性架构图。图2是本发明一个实施例的处理数据的方法的示意性流程图。图3是本发明一个实施例的数据备份的示意性流程图。图4a是传统的上游备份的方案的示意图;图4b是本发明一个实施例的下游备份的方案的示意图。图5是本发明一个实施例的下游备份的方案的示意图。图6是本发明一个实施例的状态备份的示意性流程图。图7是本发明一个实施例的容错恢复的示意性流程图。图8是本发明一个实施例的误差分析的示意图。图9a和图9b是本发明一个实施例的方案与现有开源的方案的性能对比的示意图。图10a至图10d是采用本发明一个实施例时获得的实验结果。图11a和图11b是采用本发明另一个实施例时获得的实验结果。图12a和图12b是采用本发明又一个实施例时获得的实验结果。图13a和图13b是采用本发明又一个实施例时获得的实验结果。图14a和图14b是采用本发明又一个实施例时获得的实验结果。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。由于各种层次的故障可能在分布式流处理系统的任何环节或任何时间出现,因此,保证分布式流处理系统的高可靠性是非常关键的。同时,通常系统的性能和可靠性是两个相悖的维度,如何在不影响或者尽可能少的影响系统的性能以及分析的准确度的情况下,保证高可靠性,是当前全球研究领域的热点和重点。众所周知,提高可靠性的一种常用的方法是备份。现有的备份方案均在尝试保证系统的高可靠性,同时兼顾分析的准确度,但是都会带来较多的负面影响,尤其是在针对大数据的流分析时。现有的一种常用的备份方案是采用热备份的方案,出现故障时则通过主备倒换来进行数据的恢复。热备份主要用于流数据库架构中,是指在系统处于正常运转的状态下进行的备份。热备份和主备倒换方案要求大量的存储空间,通常需要引入双倍的资源。由于开销太大,使得热备份和主备倒换方案在实际的分布式流处理系统的部署和高性能分析中很难实现。现有的另一种常用的备份方案是上游备份的方案。具体而言,作为数据发送方的位于上游的计算单元在将数据发送到下游的计算单元后,会把发送的数据,持久化备份到分布式的内存或硬盘(包括hdfs)中,当下游的计算单元完成处理并反馈ack信息后,按需清空上游的计算单元的缓存。例如,谷歌(google)的大规模分布式低延迟流式数据处理架构millwheel,提供了一组接口用于保存状态信息和数据。其采用的就是上游备份的方案,将状态的改变均保存到bigtable中。当发生故障时,将重新发生最近保存的状态和数据,用于容错恢复。在容错恢复时,通常需要从bigtable中获取最新的状态信息,根据状态信息从bigtable中或者上游的计算单元获取数据。上游备份的方案将所有的数据进行备份,可靠性高,然而保存过程会增大计算和存储资源的开销;并且上游的计算单元的发送缓存中的数据,要等待下游的计算单元处理完成后,才能删除,即下游的计算单元的处理速度制约了上游的计算单元的处理,会影响上游的计算单元对于新的数据的处理和输出,降低了流水线处理的效率;当下游的计算单元发生故障,进行容错恢复时,需要从上游的计算单元重发数据,会影响上游的计算单元的工作。总而言之,上游备份的方案使得分布式流处理系统处理数据时的效率低下。应理解,本文中的上游,是指流处理过程中,相对于参考点而言,数据的更早的处理阶段;下游是指流处理过程中,相对于参考点而言,数据的更晚的处理阶段。例如,对于流处理的流水线a→b→c…,a位于b的上游,b位于c的上游;b位于a的下游,c位于b的下游。下面介绍分布式流处理系统的构成。图1是分布式流处理系统100的示意性架构图。参照图1,分别从服务器层面(serverlevel)和线程层面(threadlevel)两个层面对分布式流处理系统100进行描述。分布式流处理系统100具有分布式能力和并行化处理能力。从服务器层面来看,分布式流处理系统100包括如下关键实体:控制器(controller)110、持久化备份设备140,也可以称为备份服务器(backupserver)、数据源节点120、输出目的节点130和至少一个计算单元,计算单元可以是例如图1所示的工作节点(worker)。控制器110用于管理和维护计算单元,发现故障计算单元,向替代故障计算单元的替代计算单元发送恢复指示信息,以指示替代计算单元替代故障计算单元进行计算处理。换而言之,控制器110对所有计算单元进行协调管理和维护,同时负责容错的管理。计算单元周期性地向控制器110发送心跳信息,控制器110接收并对计算单元进行心跳检测。一旦心跳检测失败,控制器110将启用新的计算单元进行状态和数据恢复。因此,所有的计算单元都可以与控制器进行通信。图1中为了清楚,仅示意性地示出了工作节点160和工作节点180(两个计算单元)与控制器的通信。数据源节点120用于向计算单元中的最上游的计算单元发送待处理的数据。输出目的节点130用于接收计算单元中的最下游的计算单元发送的计算处理完成后形成的数据。计算单元(例如图1中示出的工作节点)用于管理流处理或算法的算子(operator),同时负责向备份服务器写入持久化的状态信息和数据,以进行备份。应理解,分布式流处理系统中通常包括多个计算单元,图1中示意性地示出了四个工作节点,工作节点150、工作节点160、工作节点170和工作节点180。图1中工作节点的个数仅为示意而非限定,分布式流处理系统100中可以包括任意数量的工作节点。持久化备份设备140用于存储数据或计算单元中的计算模块进行计算处理生成的状态信息。换而言之,备份服务器用于接收计算单元写入的状态信息和数据,进行持久化存储,并在容错恢复时提供状态信息和数据。所有的计算单元也都可以与持久化备份设备进行通信。图1中为了清楚,仅示意性地示出了工作节点160和工作节点180与持久化备份设备的通信。现有的上游备份及容错恢复的方案中,分布式流处理的功能可以用有向无环图(directedacyclicgraph)来表示和连接。在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图。可以理解,现有的传统的分布式流处理系统,数据处理是有向的,并且无法在计算单元间支持迭代计算,因此只支持有向无环图的处理过程。本发明实施例的处理数据的系统可以实现一跳反馈(one-hopfeedback),使多个计算单元中位于下游的计算单元处理后的数据能够反馈到上一跳的计算单元。再通过对现有的迭代算法的分析和抽象,能够有效地实现支持迭代计算的数据分析。由此,本发明实施例的处理数据的方法和处理数据的系统的处理过程可以对应无向图(undirectedgraph)在本发明实施例中如何实现迭代计算将在下文中详细描述。从线程层面来看,任意一个工作节点(例如工作节点170)中均包括三种类型的线程,分别是上游线程(upstreamthread)、计算线程(computethread)和下游线程(downstreamthread)。其中,每个计算线程分别对应有接收缓存和发送缓存。接收缓存用于缓存接收到的待处理的数据;发送缓存用于缓存处理完的待发送的数据。这里先对各线程进行简单总括的介绍,下文描述本发明实施例时,再对其进行详细描述。上游线程用于从位于上游的工作节点的发送缓存或数据源节点接收数据,把接收的数据分配到计算线程进行计算处理。并且,上游线程具有反馈计算结果到上游的工作节点的能力。总之,上游线程是工作节点中用于从其他工作节点或数据源节点处获取数据,并且反馈相关信息的线程。下游线程用于发送经计算线程处理后的数据到其他的工作节点或输出目的节点。并且,下游线程具有反馈结果到计算线程的能力。总之,下游线程是工作节点中用于向其他工作节点或输出目的节点发送数据,并且反馈相关信息的线程。多个计算线程(图1中示意性的示出了计算线程a、计算线程b和计算线程c)用于并行地处理或流水线式级联处理输入的数据,生成输出的数据和状态信息。换而言之,工作节点中的计算线程可以是并联形式的也可以是串联形式的,计算线程在一些分布式流处理系统中也可以是计算进程或其它的计算模块,本发明实施例对此不作限定。计算线程并行处理时可以执行相同的功能,即并行的计算线程可以采用相同的算法对不同的数据进行处理;计算线程并行处理时也可以执行不同的功能,即并行的计算线程可以采用不同的算法进行处理,多种算法或多种处理同时进行。应该理解,计算单元可以是多种粒度的。例如,计算单元可以为工作节点,工作节点中包括接收缓存和发送缓存分别用于缓存接收和待发送的数据,工作节点中包括计算线程用于进行计算处理。又如,计算单元也可以是计算进程,计算进程中也包括接收缓存和发送缓存,计算进程中包括计算模块用于进行计算处理。换而言之,计算单元可以包括算子,或可以包括计算线程,或可以包括用于计算的模块,将其统称为计算模块。计算单元还可以包括计算模块对应的接收缓存和发送缓存,本发明实施例对此不作限定。计算单元具体的工作流程及其包含的实体和模块将在下文中进行详细地描述。在上述分布式流处理系统100中,基于近似容错方案设计,在每一个计算单元中均可以包括以下模块。状态备份模块用于对计算单元的处理过程中产生的,数据被处理的中间状态的相关信息进行持久化备份。数据备份模块用于对数据进行持久化备份。计算单元还可以包括容错恢复模块用于在计算单元出现故障时,进行系统的恢复。应理解,本发明实施例中的数据处理系统可以包括上述分布式流处理系统100中的实体、线程或模块,数据处理系统中各实体、线程和模块之间的连接关系和数量并不限于上述描述。并且,各实体、线程和模块可以以任意适当的形式在物理上部署在一起,也可以在物理上分别单独部署,本发明实施例对此不作限定。下面详细描述本发明实施例的处理数据的方法200。方法200由计算单元执行,属于下游备份的一种方案。方法200主要讨论当前的第一计算单元的行为。其中,第一计算单元包括第一接收缓存(buffer)和第一发送缓存。第二计算单元位于第一计算单元的上游,第二计算单元对应第二接收缓存和第二发送缓存;第三计算单元位于第一计算单元的下游,第三计算单元对应第三接收缓存和第三发送缓存。应理解,上述三个计算单元可以是工作节点,也可以是计算进程等。三个计算单元可以同属于一个物理实体,也可以分属于不同的物理实体。例如,三个计算单元为计算进程,第一计算单元属于某一工作节点,第二计算单元和第三计算单元可以属于该工作节点,也可以不属于该工作节点,本发明实施例对此不作限定。图2示出的方法200以计算单元为工作节点为例进行介绍,方法200可以包括以下步骤。s201,获取第一接收数据。其中,该第一接收数据是经过第二计算单元处理后并通过第二发送缓存发送的,该第二发送缓存用于缓存经过该第二计算单元处理后的待发送的数据。换而言之,要讨论的第一计算单元从上游的计算单元(即第二计算单元)对应的发送缓存(即第二发送缓存)中获取数据。当然第一计算单元也可以从数据源节点获取数据,本发明实施例不讨论这种情况。在本发明的一个实施例中,当计算单元为工作节点时,第一计算单元获取数据具体可以由如图2所示的上游线程实现。在本发明的其它实施例中,计算单元可以为计算进程。第二计算单元可以为第一计算单元所属的工作节点的计算进程,也可以为其他工作节点的计算进程。当第二计算单元不为第一计算单元的工作节点的计算进程时,获取数据可以由第一计算单元的工作节点的上游进程来实现。当第二计算单元为第一计算单元所属的工作节点的计算进程时,获取数据可以通过透明进程间通信(transparentinterprocesscommunication,tipc)协议或zeromq(zmq)实现。tipc和zmq是计算机内的数据传输管道,tipc为进程内的通信方式,zmq为进程间的通信方式。当然还可以使用其他的通信方式进行数据传输,本发明实施例对此不作限定。在本发明实施例中,接收第二计算单元发送的第一接收数据的不论是上游线程还是tipc和zmq,将其统称为接收模块。数据的接收具体可以由计算单元通过调用数据接收应用程序编程接口(applicationprogramminginterface,api)实现,例如通过调用功能函数receivedataitem()来实现。s202,在第一接收缓存中缓存该第一接收数据,该第一接收缓存属于该第一计算单元,所述第一接收缓存用于缓存分配至第一计算单元的待处理的数据,该第二计算单元位于该第一计算单元的上游。具体而言,计算单元在接收到数据后,会先将数据在接收缓存中缓存起来,以待向计算模块分发。s203,对该第一接收数据进行持久化备份处理。具体而言,本发明实施例采用下游备份的方式,或者称为接收方备份(receiver-sidebackup)即当前的第一计算单元在接收到数据并进行缓存后,对数据进行持久化备份处理,其中,第一计算单元相对于第二计算单元,是作为下游的计算单元的。本发明实施例中,持久化备份处理可以是简单地将工作节点获取的全部数据(即第一接收数据的全部数据)持久化备份到持久化备份设备中。具体地,持久化备份处理可以由数据备份模块实现。本发明实施例中,持久化备份处理也可以是对获取的部分数据进行备份,即如图2所示的对获取的数据进行选择性持久化备份。具体而言,所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中,可以包括:如果该第一接收缓存中缓存的数据量大于预设的第一门限,将所述第一接收数据中超出所述第一门限的第一部分数据持久化备份到所述持久化备份设备中。具体而言,由于分布式流处理主要是针对连续不断的数据流进行分析。因此,整个分布式流处理系统的处理能力、网络带宽、输入/输出(input/output,i/o)能力,主要消耗在了数据的处理和备份中。本发明实施例中,为了提升数据备份的效率,对数据备份的操作部分进行了改进。该实施例的步骤加上s201和s202,可以认为是数据备份的流程,可以由数据备份模块执行。图3示出了本发明实施例的数据备份的示意性流程图。如图3所示,数据备份的流程300可以包括:s301,获取输入数据,即从上游的计算单元的发送缓存中或从数据源节点获取数据。s302,将接收到的输入数据缓存至接收缓存中。进而,可以将输入数据发送给计算单元的各个计算模块进行计算处理,计算处理可以和持久化备份同时进行,以提高系统的处理效率,本发明实施例对此不作限定。s303,判断接收缓存中的数据量是否超过第一门限l。是,即接收缓存中的数据量>l时,则执行s304,否则继续执行s301。s304,对接收到的输入数据中超出第一门限的部分数据进行持久化备份。本发明实施例中,持久化备份处理可以由数据备份模块执行。第一门限的具体形式可以是数据大小例如1gb的数据量,也可以是数据的项目数(或者称数据元组的个数)等等,本发明实施例对此不作限定。第一门限可以是系统预设的,第一门限的确定标准可以是根据经验、计算单元的处理能力或在第一计算单元出现故障时系统可接受的数据丢失程度确定的。第一门限还可以由用户根据自己的需要进行修改、设定或定义。为了进一步提升备份的效率,降低备份数据的总量,本发明实施例的计算单元,还可以根据用户对于数据重要性的定义,进行选择性备份。此外,对数据进行选择性持久化备份可以不通过设置门限的方式,第一计算单元将第一接收数据选择性持久化备份到持久化备份设备中,还可以通过以下形式实现:第一计算单元根据用户定义的数据备份规则,对第一接收数据进行选择,并备份到持久化备份设备中。当然,数据备份规则也可以由系统预定义或者设置为系统默认的规则,本发明实施例对此不作限定。应理解,对第一接收数据进行选择性持久化备份是为了降低备份数据的总量,对第一接收数据进行选择性持久化备份在部分实施例中不是必需的。数据的选择性备份具体可以由计算单元通过调用数据备份api实现,例如可以通过调用功能函数backupitem()来实现。s204,在第一计算单元将接收的数据分配给相应的计算模块后,第一计算单元向该第二计算单元反馈确认信息,确认信息用于指示该第二计算单元根据该确认信息,删除该第二发送缓存中缓存的该第一接收数据。应理解,步骤204是为了指示上游的计算单元删除缓存中的相应数据,以及时释放缓存空间而做出的改进,因此步骤204在部分实施例中不是必需的。当计算单元为工作节点时,反馈确认信息可以由如图2所示的上游线程实现,上游线程对应为反馈模块。在本发明的其它实施例中,计算单元可以为计算进程。第二计算单元可以为第一计算单元所属的工作节点的计算进程,也可以为其他工作节点的计算进程。当第二计算单元不为第一计算单元的工作节点的计算进程时,反馈确认信息可以由第一计算单元的工作节点的上游进程来实现,上游线程对应为反馈模块。当第二计算单元为第一计算单元所属的工作节点的计算进程时,反馈确认信息可以通过tipc或zmq实现,此时tipc或zmq对应为反馈模块。反馈确认信息具体可以由计算单元通过调用反馈响应api实现,例如可以通过调用功能函数sendfeedbackitem(item&feedback)来实现。具体而言,本发明实施例的下游备份的方案与传统采用上游备份的方案的主要区别在于:如图4a所示,传统的上游备份的方案,上游的计算单元(例如发送方工作节点)会把发送的数据全部持久化备份到持久化备份设备(例如,分布式的内存或硬盘)中,如a1所示。继而,上游的计算单元将数据发送到下游的计算单元(例如接收方工作节点),如a2所示。下游的计算单元处理数据,如a3所示。下游的计算单元处理完成后,向上游的计算节点反馈ack信息,如a4所示。下游的计算单元向上游的计算节点反馈ack信息后,上游的计算单元才按需删除缓存的相关数据,如a5所示。一来,上游的计算单元及对应的发送缓存会频繁备份大量数据(所有数据);二来,缓存空间不能及时释放,影响了上游的计算单元接收并处理新数据的速度,从而影响了整个流水线的处理效率。在容错恢复时,需要通过上游的计算单元及对应的发送缓存重发数据,进行数据和状态信息的恢复,会影响上游的计算单元,很大程度地降低流水线处理的效率和性能。如图4b和图5所示,本发明实施例的下游备份的方案,当前的计算单元(即第一计算单元,例如接收方工作节点)的接收缓存(buffer)接收上游的计算单元(例如发送方工作节点)输出的处理后的数据作为输入数据,如b1所示。当前的计算单元进行数据备份并处理数据,如b2和b3所示。当前的计算单元不需等待数据处理完成,就可以反馈ack信息给上游的计算单元,如b4所示。上游的计算单元删除缓存中的相应数据,如b5所示。这样,缓存空间可以及时释放,提高了上游的计算单元释放空间、接收并处理新数据的速度,从而更加高效的利用了分布式流处理系统的流水线处理能力,提升了系统整体的吞吐率。如图5所示,对第一接收数据进行选择性持久化备份的具体实现方式可以如下:为第一计算单元的接收缓存(即第一接收缓存)设置第一门限,当第一接收缓存中缓存的数据量超过第一门限l后,对超出第一门限的部分数据进行持久化备份。这样在大于第一门限时才进行存储,而不是所有的数据都需要备份,降低了持久化存储的频率(i/o开销)和存储数据量,也可以进一步提高系统进行流水线处理的效率和性能。应理解,本发明实施例中,使得当第一接收缓存中缓存的数据量超过第一门限l的原因可以是计算单元拥塞导致的,也可以是其他原因导致的,本发明实施例对此不作限定。优选地,在进行持久化备份时可以生成备份信息,对所备份的数据进行标识,例如记录所备份的数据的数据编号或数据内容等,以在后续进行容错恢复时便于查找数据。s205,第一计算单元对该第一接收数据进行计算处理,生成第一发送数据和多个第一状态信息,该第一发送数据为为对所述第一接收数据完成计算处理后形成的数据,该多个第一状态信息用于指示对该第一接收数据进行计算处理的过程中形成的多个第一中间状态。其中,计算处理具体可以是由计算线程完成的。本发明实施例中将进行计算处理的硬件或软件统称为计算模块。计算处理具体可以由计算单元通过调用数据处理api实现,例如可以通过调用功能函数processdata()来实现。应理解,本发明实施例中的第一状态信息表示的是在计算处理的各中间阶段,第一接收数据被处理后的中间的状态,例如可以包括中间处理结果以及中间处理结果对应的数据的编号等,还可以包括其他内容。第一状态信息可以是每隔一定的处理时间获取一次,也可以是每处理一定数量的第一接收数据元组获取一次,本发明实施例对此不作限定。s206,对多个第一状态信息中的至少一个第一状态信息进行持久化备份。具体地,对该m个第一状态信息中的n个第一状态信息进行持久化备份,其中,m和n为正整数,n小于或等于m。具体地,对第一状态信息进行持久化备份可以由状态备份模块实现。具体而言,一种具体的实现是将每次获得的第一状态信息均进行备份,此时,n等于m。另一种具体的实现中,第一状态信息中包括处理过程中该第一接收数据被处理得到的中间结果;对该m个第一状态信息中的n个第一状态信息进行持久化备份,可以包括:根据当前时刻持久化备份设备中存储的最新的状态信息中的最新的中间结果与该m个第一状态信息中每一个第一状态信息中的中间结果的差异和预设的第二门限,确定上述每一个第一状态信息是否需要进行持久化备份,当需要时进行持久化备份,不需要时不进行持久化备份。最终从结果看是将该m个第一状态信息中的n个第一状态信息进行持久化备份。如图2所示,该过程可以认为是对第一状态信息的选择性持久化备份。该具体实现的步骤加上s201和s205,可以认为是状态备份的流程,可以由状态备份模块执行。图6示出了本发明实施例的状态备份的示意性流程图。如图6所示,状态备份的流程600可以包括:s601,获取输入数据,即从上游的计算单元的发送缓存中或从数据源节点获取数据。s602,对该第一接收数据即输入数据进行计算处理,生成第一发送数据和m个第一状态信息。s603,判断每个第一状态信息中中间结果与当前持久化备份的最新的状态信息中的最新的中间结果的差异(divergence)是否大于第二门限θ。是,即差异>θ时,则执行s604,否则继续执行s601。s604,对差异大于第二门限的第一状态信息进行持久化备份。具体地,目前得到的第一状态信息例如为目标状态信息,目标状态信息为多个第一状态信息中的任意一个第一状态信息。应理解,状态差异的比较可以依照现有技术的算法或函数,也可以由用户定义具体的计算规则,本发明实施例对此不作限定。目标状态信息中的目标中间结果与当前持久化备份的最新的状态信息中的最新的中间结果的差异可以调用功能函数。例如,可以设计一个状态差异比较api(即功能函数statedivergence())计算差异,当差异大于第二门限时,调用状态备份api(即调用功能函数backupstate())。对当前的目标状态信息进行持久化备份。为了进一步减少第一状态信息的备份的总数据量,可以将状态差异比较api(调用功能函数statedivergence())的定义开放给用户,即可以由用户指定需要备份的重要阶段,或者可以由用户指定计算差异时中间结果的各部分的权重等。另外,还可以由用户根据需求指定第二门限的大小。应理解,本发明实施例中,第一状态信息是随着计算单元的计算处理逐步得到的,在处理第一接收数据期间在不同的时刻可能会处理得到多个第一状态信息。不同时刻处理得到的第一状态信息代表了第一接收数据在处理过程中被处理得到的不同的第一中间状态。在一个简单的例子中,第一接收数据为一篇30页的文章,计算处理为对统计上述文章中的“用户”一词出现的次数。第一状态信息中至少包括两部分内容,一是目前文章被处理到的页数,二是文章被处理到的页数处,“用户”一词出现的次数。其中,对第一接收数据的处理过程中,多个第一状态信息中的一个第一状态信息可以是,当文章被处理完5页的时候,“用户”一词出现的次数为10次;多个第一状态信息中的另一个第一状态信息可以是,当文章被处理完10页的时候,“用户”一词出现的次数为12次;多个第一状态信息中的又一个第一状态信息可以是,当文章被处理完15页的时候,“用户”一词出现的次数为21次,等等,还可以有更多的第一状态信息。假设当前持久化备份的最新的状态信息为当文章被处理完5页的时候,“用户”一词出现的次数为10次,则最新的中间结果为10,假设第二门限为3。对于“当文章被处理完10页的时候,“用户”一词出现的次数为12次“这一第一状态信息而言,中间结果12与持久化备份的最新的中间结果10的差异为2,小于第二门限3,则不对“当文章被处理完10页的时候,“用户”一词出现的次数为12次“这一第一状态信息进行持久化备份。对于“当文章被处理完15页的时候,“用户”一词出现的次数为21次“这一第一状态信息而言,中间结果21与持久化备份的最新的中间结果10的差异为11,大于第二门限3,则对“当文章被处理完15页的时候,“用户”一词出现的次数为21次“这一第一状态信息进行持久化备份。应理解,通常中间结果间并不是类似于上述例子中描述的“次数”这样简单的形式,二是复杂的向量或者矩阵或者其他形式。此时中间结果间的差异也会变得复杂,例如是向量的每个元素的差异、矩阵的每个维度的差异,等等。本发明实施例中,可以通过归一化等手段对差异进行简化,或者将差异进行量化,而使得这个差异是可衡量可与第二门限相比较的,本发明对具体的处理手段不作限定。此外,对第一状态信息进行选择性持久化备份可以不通过设置门限的方式,第一计算单元将多个第一状态信息选择性持久化备份到持久化备份设备中,还可以通过以下形式实现:第一计算单元根据用户定义的状态备份规则,对多个第一状态信息进行选择,并备份到持久化备份设备中。当然,状态备份规则也可以由系统预定义或者设置为系统默认的规则,本发明实施例对此不作限定。通过上述对第一状态信息进行选择性持久化备份的流程的执行,可以减少状态备份的频率和总数据量。应理解,对第一状态信息进行选择性持久化备份是为了降低备份第一状态信息的总量,对第一状态信息进行选择性持久化备份在部分实施例中不是必需的。应注意的是,本发明实施例的对数据备份的流程设置第一门限的方案和对状态备份的流程设置第二门限的方案可以分别进行实施,优选地,为数据备份的流程设置第一门限,同时为状态备份的流程设置第二门限,以使得数据备份和状态备份相匹配。本发明实施例设置第一门限和/或第二门限的目的是通过引入有界的误差,减少每个计算单元持久化备份操作的频度和总数据量,在尽量保证整个系统性能和分析准确率的情况下实现分布式流处理的容错管理。本发明可选的一个实施例提供了一种分布式流处理系统中近似容错处理的方案,能够基于状态的差异和不同的用户定义门限进行持久化备份和分布式恢复,不会对所有数据及其处理后对应的所有状态进行持久化备份,而是根据用户定义的门限,通过引入有界误差,降低状态信息和数据的备份频率,同时平衡系统性能、分析准确度和高可靠性。s207,将该第一发送数据缓存在第一发送缓存中,并通过该第一发送缓存向第三计算单元发送该第一发送数据,其中,该第三计算单元位于该第一计算单元的下游。至s207,第一计算单元完成了对第一接收数据的处理。在本发明的一个实施例中,当计算单元为工作节点时,发送第一发送数据可以由如图2所示的下游线程实现。在本发明的其它实施例中,计算单元可以为计算进程。第三计算单元可以为第一计算单元所属的工作节点的计算进程,也可以为其他工作节点的计算进程。当第三计算单元不为第一计算单元的工作节点的计算进程时,获取数据可以由第一计算单元的工作节点的下游进程来实现。当第三计算单元为第一计算单元所属的工作节点的计算进程时,发送第一发送数据可以通过tipc或zmq实现。当然还可以使用其他的通信方式进行数据传输,本发明实施例对此不作限定。数据的发送具体可以由计算单元调用数据发送api实现,例如可以通过调用功能函数senddataitem(item&feedback)来实现。本发明实施例的处理数据的方法还可以实现迭代计算。具体地,方法200还可以包括:第一计算单元获取并在第一接收缓存中缓存第三发送数据,该第三发送数据为该第三计算单元进行计算处理后形成的数据;将该第三发送数据作为该第一接收数据,通过该第一计算单元对该第一接收数据进行计算处理。这样,数据处理可以实现一跳反馈(one-hopfeedback),使计算单元中位于下游的计算单元处理后的数据能够反馈到上一跳的计算单元。再通过对现有的迭代算法的分析和抽象,能够实现有效地支持迭代计算的数据分析。上文描述了在系统正常的状态下进行数据处理和备份的流程,在此基础上,当系统中有计算单元出现故障时,则需要对系统进行容错恢复,可以由容错恢复模块执行,以出现故障的为第四计算单元,用来替代第四计算单元的新的计算单元为第一计算单元的角度来进行描述。图7示出了本发明实施例的容错恢复的示意性流程图。如图7所示,容错恢复的流程700可以包括:s701,控制器通过对计算单元集群的监控。s702,判断是否有故障的计算单元存在。是则执行s703;否则执行s701。s703,控制器在发现故障计算单元,即第四计算单元后,指派新的计算单元(例如,第一计算单元)进行容错恢复。换个角度说,第一计算单元接收控制器发送的恢复指示信息,该恢复指示信息用于指示第一计算单元替代出现故障的第四计算单元进行计算处理。s704,第一计算单元从持久化备份设备中获取最新的状态信息,当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成多个第二状态信息和第二发送数据,所述多个第二状态信息用于指示对所述第二接收数据进行所述计算处理的过程中形成的多个第二中间状态,所述多个第二状态信息中的每个第二状态信息包括对所述第二接收数据进行所述计算处理的过程中得到的中间结果,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述多个第二状态信息选择性持久化备份到所述持久化备份设备中;所述第一计算单元向第三计算单元发送所述第二发送数据。具体而言,新的计算单元,即第一计算单元将会调用获取状态api(即调用功能函数recoverstate(state&state)),获取最近一次系统持久化备份的状态信息,即从持久化备份设备中获取所存储的最新的状态信息;第一计算单元根据上述最新的状态信息,确定是需要从第二计算单元中获取数据还是需要从持久化备份设备中获取数据。当根据最新的状态信息确定需要从第二计算单元中获取数据时,第一计算单元可以通过调用数据接收api,从第二计算单元中获取第一接收数据,并替代第四计算单元进行后续的工作。当根据最新的状态信息确定需要从持久化备份设备中获取数据时,第一计算单元可以通过调用获取数据api(即调用功能函数recoveritem(item&item)),从持久化备份设备中获取持久化备份的第二接收数据,由于第二接收数据就是从持久化备份设备中获取的,因而对其不需再进行选择性持久化备份。第一计算单元通过调用数据处理api,对第二接收数据进行计算处理,生成多个第二状态信息和第二发送数据;第一计算单元通过调用选择性备份功能,将多个第二状态信息选择性持久化备份到持久化备份设备中;第一计算单元向第三计算单元发送第二发送数据。应理解,此时如果第一计算单元的接收缓存中第二接收数据的数据量小于第一门限l,第一计算单元可以继续从第二计算单元中获取第一接收数据,将第二接收数据和第一接收数据进行数据处理。s705,为了避免重复处理数据带来的不一致性以及性能影响,所有分布式流处理系统中的数据,可以采用全局唯一的编号,当计算单元发现数据的编号小于当前最近状态对应的数据的编号时,执行s706;否则,执行s707。s706,丢弃数据,不作处理。s707,对数据进行正常的处理,即只处理新的未处理数据(编号大于当前编号的数据)。在本发明实施例中,同一个计算单元多次出现故障,可能会造成累积效应,使得该计算单元严重影响系统的整体性能和效率。为此,计算单元可以进行如下配置,如果一个计算单元,(例如第一计算单元)在预设的时间段内发生多于或等于预设次数的故障,第一计算单元减小第一门限的值和第二门限的值。例如,第一计算单元的初始化门限分别为,第一门限l=l,第二门限θ=θ。则在一个具体的例子中,t时间段内再次出现1次故障时,可以调整门限为为原来的一半,即第一门限第二门限在k个t时间段内,每个t时间段出现1次故障时,可以调整门限为第一门限第二门限可以理解,调整门限的值的具体实现方式有很多,上述实现方式仅为举例而非限定。还应理解,当第一计算单元在预设的时间段内故障次数减少时,可以适当增大门限的值,本发明实施例对此不作限定。调整门限具体可以由计算单元调用调整门限api实现。在本发明实施例中,当采用选择性持久化备份的方案时,数据备份模块和状态备份模块分别对数据和状态信息进行选择性持久化备份,可以认为数据备份模块和状态备份模块为选择性备份模块的子模块。相应地,前文中涉及的数据备份api(例如backupitem())、状态差异比较api(例如statedivergence())和状态备份api(例如,backupstate())三个api可以形成选择性备份功能。应理解,数据备份、状态差异比较和状态备份等功能也可以封装在一起形成一个api,即选择性备份功能也可以为一个api。或者,状态差异比较和状态备份功能可以封装在一起形成一个api,选择性备份功能包括状态差异比较和状态备份功能封装形成的api和数据备份api,共两个api。或者,如上文所述,选择性备份功能包括数据备份api、状态差异比较api、和状态备份api,共三个api,本发明实施例对选择性备份功能中api的划分不作限定。综上所述,本发明实施例给出了下游备份的方案的详细实现过程。当着重从选择性持久化备份的角度来看时,处理数据的方法,可以包括:第一计算单元接收第二计算单元发送的第一接收数据,该第二计算单元位于该第一计算单元的上游;该第一计算单元将该第一接收数据选择性持久化备份到持久化备份设备中;该第一计算单元对该第一接收数据进行计算处理,生成多个第一状态信息和第一发送数据,该多个第一状态信息用于指示对该第一接收数据进行计算处理的过程中形成的多个第一中间状态,该多个第一状态信息中的每个第一状态信息包括对该第一接收数据进行计算处理的过程中得到的中间结果,该第一发送数据为对该第一接收数据完成计算处理后形成的数据;该第一计算单元将该多个第一状态信息选择性持久化备份到该持久化备份设备中;该第一计算单元向第三计算单元发送该第一发送数据,该第三计算单元位于该第一计算单元的下游。该处理数据的方法对数据和状态信息进行选择性持久化备份,可以提升备份的效率,降低备份数据和状态信息的总量,从而能够更加高效的利用系统的处理能力,提升系统整体的吞吐率。一种方案中,所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中,可以包括:所述第一计算单元根据用户定义的数据备份规则,对所述第一接收数据进行选择,并备份到所述持久化备份设备中;所述第一计算单元将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中,可以包括:所述第一计算单元根据用户定义的状态备份规则,对所述多个第一状态信息进行选择,并备份到所述持久化备份设备中。这种方案将选择性持久化备份的规则开放给用户,由用户定义数据备份规则和/或状态备份规则,可以进一步提升备份的效率。另外一种方案中,在所述第一计算单元接收第二计算单元发送的第一接收数据之后,所述方法还可以包括:所述第一计算单元在所述第一计算单元的接收缓存中缓存所述第一接收数据;所述第一计算单元将所述第一接收数据选择性持久化备份到持久化备份设备中,包括:如果所述第一计算单元的接收缓存中缓存的数据量大于预设的第一门限,所述第一计算单元将所述第一接收数据中超出所述第一门限的第一部分数据持久化备份到所述持久化备份设备中;所述第一计算单元将所述多个第一状态信息选择性持久化备份到所述持久化备份设备中,包括:如果所述多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻所述持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第二门限,所述第一计算单元将所述目标状态信息持久化备份到所述持久化备份设备中,所述目标状态信息为所述多个第一状态信息中的任意一个第一状态信息。该方案对数据和第一状态信息设置备份的门限,可以进一步提升备份的效率,降低备份数据和第一状态信息的总量,提升系统整体的吞吐率。在一种可选的方案中,在所述第一计算单元完成对所述第一接收数据的计算处理之前,所述方法还可以包括:所述第一计算单元向所述第二计算单元反馈确认信息,所述确认信息用于指示所述第二计算单元根据所述确认信息,删除所述第二计算单元中缓存的所述第一接收数据。该方案由处于下游的计算单元进行数据备份,下游的计算单元不需等待计算处理完成,就可以反馈确认信息给上游的计算单元,指示上游的计算单元删除缓存中的相应数据,缓存空间可以及时释放,能够提高上游的计算单元释放空间、接收并处理新数据的速度,从而更加高效的利用系统的处理能力,可以提升系统整体的吞吐率。相对于着重选择性持久化备份的处理数据的方法,第一计算单元可以包括接收模块、第一计算模块、发送模块和选择性备份模块,以实现上述的相应功能。其中,选择性备份模块可以包括数据备份模块和状态备份模块两个子模块,以分别实现数据的选择性持久化备份和状态信息的选择性持久化备份。第一计算单元还可以包括接收缓存、发送缓存等,以对第一接收数据或第一发送数据进行缓存。第一计算单元还可以包括处理模块,以调整第一门限的值和第二门限的值。第一计算单元还可以包括容错恢复模块,以实现容错恢复的过程。第一计算单元还可以包括反馈模块,以向第二计算单元反馈确认信息。当着重从下游备份的角度来看时,处理数据的方法,可以包括:第一计算单元接收并在所述第一计算单元的接收缓存中缓存第二计算单元发送的第一接收数据,所述第二计算单元位于所述第一计算单元的上游;所述第一计算单元将所述第一接收数据持久化备份到持久化备份中;所述第一计算单元向所述第二计算单元反馈确认信息,所述确认信息用于指示所述第二计算单元根据所述确认信息,删除所述第二计算单元中缓存的所述第一接收数据;所述第一计算单元对所述第一接收数据进行计算处理,生成第一发送数据,所述第一发送数据为对所述第一接收数据完成计算处理后形成的数据;所述第一计算单元将所述第一发送数据缓存在所述第一计算单元的发送缓存中,并向第三计算单元发送所述第一发送数据,所述第三计算单元位于所述第一计算单元的下游。该处理数据的方法由处于下游的计算单元进行数据备份,下游的计算单元不需等待计算处理完成,就可以反馈确认信息给上游的计算单元,指示上游的计算单元删除缓存中的相应数据,缓存空间可以及时释放,能够提高上游的计算单元释放空间、接收并处理新数据的速度,从而更加高效的利用系统的处理能力,可以提升系统整体的吞吐率。在一种可选的方案中,所述第一计算单元将所述第一接收数据持久化备份到持久化备份中,可以包括:如果所述第一计算单元的接收缓存中缓存的数据量大于预设的第一门限,所述第一计算单元将所述第一接收数据中超出所述第一门限的第一部分数据持久化备份到所述持久化备份设备中;所述方法还可以包括:在对所述第一接收数据进行计算处理的过程中,生成多个第一状态信息,所述多个第一状态信息用于指示对所述第一接收数据进行计算处理的过程中形成的多个第一中间状态,所述多个第一状态信息中的每个第一状态信息包括对所述第一接收数据进行计算处理的过程中得到的中间结果;如果所述多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻所述持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第二门限,所述第一计算单元将所述目标状态信息持久化备份到所述持久化备份设备中,所述目标状态信息为所述多个第一状态信息中的任意一个第一状态信息。该方案对数据和状态信息设置备份的门限,可以进一步提升备份的效率,降低备份数据和状态信息的总量,提升系统整体的吞吐率。在一种可选的方案中,所述第一计算单元将所述第一接收数据持久化备份到持久化备份中,包括:所述第一计算单元将所述第一接收数据的全部数据持久化备份到所述持久化备份设备中。该方案可以在下游备份的基础上最大限度的保证系统的可靠性和准确性。相对于着重下游备份的处理数据的方法,第一计算单元可以包括接收模块、第一接收缓存、第一计算模块、第一发送缓存、发送模块、反馈模块和数据备份模块,以实现上述的相应功能。其中,第一计算单元还可以包括状态备份模块,以实现状态信息的备份。第一计算单元还可以包括处理模块,以调整第一门限的值和第二门限的值。第一计算单元还可以包括容错恢复模块,以实现容错恢复的过程。在下游备份的方案中,所述方法还可以包括:如果所述第一计算单元在预设的时间段内发生多于或等于预设次数的故障,所述第一计算单元减小所述第一门限的值和所述第二门限的值。该方案可以防止由于同一个计算单元多次出现故障,造成累积效应,使得该计算单元严重影响系统的整体性能和效率。在下游备份的方案中,在所述第一计算单元接收第二计算单元发送的第一接收数据之前,所述方法还可以包括:所述第一计算单元接收控制器发送的恢复指示信息,所述恢复指示信息用于指示所述第一计算单元替代出现故障的第四计算单元进行工作;所述第一计算单元从所述持久化备份设备中获取所存储的最新的状态信息;当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成第二发送数据,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述第二发送数据缓存在所述第一计算单元的发送缓存中,并向所述第三计算单元发送所述第二发送数据。下面将对本发明实施例的下游备份的处理数据的方法进行深入的误差有界分析。其中,误差有界分析是指在对系统或方法的计算结果的准确性进行量化评估时,对系统或方法可能引入的误差进行分析,希望误差是有界的(即可控的),误差不能无限扩大。本发明的对数据备份设置第一门限,对状态备份设置第二门限的方案的核心,是引入系统设置的或用户可定义的有界误差,降低数据备份和状态备份的频率以及备份的数据量,在尽可能保证分布式流处理的准确性和处理性能的情况下,提供高可靠性支持。当前讨论的第一计算单元对输入数据进行处理后,产生处理后的数据(即第一发送数据),放入到第一发送缓存中,第一发送缓存将其中的数据发送给下游的计算单元(例如第三计算单元),并接收到第三计算单元的确认信息后逐步删除缓存的第一发送数据。为了支持误差有界分析,这里引入第三门限γ。第三门限γ的意义在于:假设第一发送缓存设置有第三门限γ,第一发送缓存中的数据量达到第三门限γ后,第一计算单元的处理将被阻塞,等待第一发送缓存中有数据被确认而删除后,才能继续向第一发送缓存中添加处理后数据。通过上述第三门限γ的设定,可以断定,第一计算单元输出处理后的数据,如果未接收到下游的计算单元(即第三计算单元)的确认信息就发生故障。在故障中丢失的数据的量,最多为第三门限的数值大小γ。下面,基于第一门限l、第二门限θ和第三门限γ对本发明实施例的数据处理系统进行误差有界分析,证明通过本发明实施例的处理数据的方法(即近似容错方案流程处理)后,整个数据处理系统处理数据的准确性仍然是有界和可控的。本发明实施例在数据处理系统中引入了三种不同的系统预设的或用户可定义的门限,分别是:第一门限l:计算单元中没有保存的最大的未处理数据数量;第二门限θ:当前生成的状态与当前持久化备份的状态的差异的门限;第三门限γ:计算单元中没有响应的最大处理后的输出数据数量。本发明实施例在进行误差有界分析时,提出了两项基本分析假设:1)分布式流处理系统中,丢失一个数据元组(dataitem),通常对分析的准确性带来有限的影响。例如,处理一个数据元组后,得到的中间状态,更新后带来的差异最多为α,输出的处理后的数据最多为β,(即处理一个数据元组对应两个常量α和β)。2)分析误差(error)通常在进行容错恢复时引入,虽然恢复处理的状态是最近一次备份的状态而不是理想状态(完全无数据和状态丢失的情况),但是这种误差可以通过处理足够大量的数据进行摊薄甚至忽略(例如,迭代算法通过不断迭代优化到全局最优解或局部最优解,在这个过程中由于数据丢失造成的误差最终会被摊薄)。通过上述设计和基本假设,本发明实施例从以下两方面对误差的有界性进行分析。一是实际状态和理想状态的差异(divergence);二是丢失的输出处理后的数据(outputitems)数量。下面,针对不同的容错场景,对误差的有界性给出详细的分析和证明。单个计算单元一次故障(singlefailure)分析该场景对应的是整个数据处理过程中,数据处理系统只检测到一个计算单元发生的一次故障(failure)的情况,其中的误差结合图8具体分析如下。1)实际状态与理想状态的差异分析:根据本发明实施例的方案,当前计算单元(例如第一计算单元)在故障发生之前,最近一次持久化存储的状态与理想状态最多差异为θ=θ;当前计算单元接收到但没有完成处理以及持久化存储备份的输入数据的数据量最大为l=l;因此,根据前文提到的基本假设,整体的状态差异由当前备份状态差异和丢失数据可能带来的状态差异两部分组成,最大为θ+l*α。2)输出数据的丢失数量分析:根据预设的第三门限的定义,当前计算单元中最多丢失γ=γ个没有确认(未回复ack信息)的输出处理后数据;对于当前计算单元接收的,没有处理的输入数据(最多为l=l个),处理后对应产生最多β个处理后输出数据;因此,整体输出数据的数量偏差最大为γ+l*β。单个计算单元多次故障(multiplefailures)分析该场景对应的是整个数据处理过程中,数据处理系统检测到一个计算单元发生的多次故障的情况。在这种场景下,数据处理系统近似分析的目标是,误差的界线(errorbound)与故障发生的次数无关。由于多次发生故障时,将会产生累积效应,假设故障发生次数为k,本发明实施例可以通过合理设置三个参数门限来保证整体误差的有界性。初始化计算单元的三个门限分别为:第一门限第二门限和第三门限假设每次出现故障后,系统降低计算单元的门限值为原来的一半,那么在k次故障后,三个门限将变为:第一门限第二门限和第三门限上述方案采用的启发性的假设是:如果一个分布式流处理系统足够可靠,那么可以尽量少甚至不做备份;反之,如果分布式流处理系统可靠性低,则必须通过频繁的备份,牺牲性能来保证系统的可靠性。通常情况下,相对于正常处理,故障发生的频率还是相对较少的,因此,本发明实施例的方案能最大限度的平衡系统的可靠性与性能。在上述门限设置下,采用等比级数收敛性可以证明如下。1)实际状态与理想状态的差异分析:引用上述结论后,证明其结果与单个计算单元一次故障的场景相同,计算单元的最大状态差异为θ+l*α。2)输出数据的丢失数量分析:同样引用上述级数收敛性证明,数据量偏差与单个计算单元一次故障的场景也相同,为γ+l*β。因此,在单个计算单元多次故障情况下,整体误差与故障次数无关,是有界可控的。多个计算单元多次故障分析该场景对应的是整个数据处理过程中,数据处理系统检测到多个计算单元多次故障的情况。在这种场景下,数据处理系统近似分析的目标是,误差的界线(errorbound)与故障发生的次数无关和发生的计算单元个数无关。对此本发明实施例的设计采用很小的初始化门限。例如,针对计算单元的并行度为n的情况,每个计算单元的初始化门限为:针对有m个计算单元进行流水线式处理的场景,对第i个计算单元设置门限为:则,采用类似上述级数收敛性证明方法得到结果如下。1)实际状态与理想状态的差异分析:引用上述结论后,证明其结果与与单个计算单元一次故障的场景相同,最大状态差异为θ+l*α。2)输出数据丢失数量分析:同样引用上述级数收敛性证明,数据量偏差与单个计算单元一次故障的场景也相同,为γ+l*β。因此,在多个节点多次故障的情况下,整体误差有界,且与计算单元个数和故障次数无关。下面讨论应用本发明实施例的方案的实验验证结果。将本发明实施例的方案在亚马逊可扩展计算云(amazonelasticcomputecloud,amazonec2)集群上进行了验证。部署控制器(controller)和备份服务器(backupserver)在4核中央处理器(centralprocessingunit,cpu),16gb随机存取存储器(random-accessmemory,ram)的节点上,同时部署每个工作节点(worker)在各个32核cpu,60gbram节点上。在实验测试中,考虑了5种不同的流处理方法和算法,包括:全局搜索正则表达式和打印(globallysearcharegularexpressionandprint,grep);wordcount;大象流检测(heavyhitterdetection,hhdetection);onlinejoin和实时(online)逻辑回归(logisticregression,lr)。其中,后三种算法分别用来对应三种典型的数据处理:数据同步(datasynopsis)、流数据库查询(streamdatabasequeries)和在线机器学习(onlinemachinelearning)。将整个处理流程流水化式分为两个阶段:上游处理阶段(upstreamstage),读取源文件,处理数据并发送输出到下游进行进一步处理;下游处理阶段(downstreamstage),算法处理和分析。每个上游处理和下游处理阶段都包含一个或多个上游或下游工作节点。对每一个实验测试,都执行20次,并且采用平均值作为最终结果,并与开源平台sparkstreaming和storm进行详细对比。实验1设置三个门限参数分别为θ=10k,l=1k,γ=1k,实现近似容错方案,并与风暴(storm)和火花流(sparkstreaming)框架上的实现进行对比。图9a和图9b示出了本发明实施例的方案与现有开源的方案的性能对比。图9a中所示结果表明,进行grep处理时,本发明实施例的近似容错的方案对比sparkstreaming和storm分别实现8倍和40倍的性能增益。大幅的性能增益主要由于本发明实施例的方案极大的降低了持久化备份的开销并采用了更加高效简洁的备份方案。为了进行更加公平的对比,在本发明实施例的框架中,实现了现有的容错方案,包括迷你批处理(mini-batch)和上游备份(upstreambackup)。图9b结果表明,本发明实施例的近似容错的方案能实现更高的吞吐量增益。mini-batch和upstreambackup方案,吞吐量都低于0.4gb/s,而本发明实施例在不同算法处理场景(grep和wordcount)下分别实现3.48gb/s和1.78gb/s吞吐量,提升8.7倍和4.45倍。该结果表明,本发明实施例的方案在提供可靠性保障同时,极大的保持了现有分布式流处理系统的吞吐量。实验2以wordcount算法为例,对比各个门限参数对实验结果的影响。固定γ=1k,变动θ和l,需要注意的是,当θ和l足够大的时候,可以分别关闭状态备份和数据备份(相当于允许丢失非常多的状态信息或数据)。图10a至图10d给出了各个维度实验结果。图10a示出了本发明实施例的近似容错的方案在不同θ值设置的情况下,吞吐量随l的变化趋势,并且与关闭持久化备份功能(θ=inf)进行了性能对比,其结果表明,本发明方案在θ=10k设置时,对性能影响非常有限。图10b示出了不同θ设置时容错恢复所需的时间,在所有设置下,恢复时间都少于1s,远远好于当前已知的备份容错方案。图10c表明,在θ不同设置时,对于wordcount算法所需要备份的数据总量,θ>10后,备份的数据总量将小于30%,从而极大提升了系统整体吞吐量。图10d表明,增加θ门限值同样会降低备份数据的比例,因为增加θ后,计算单元有更多资源处理数据而不是参与备份操作,这样就会进一步减少没有处理的数据量,从而进一步减少需要备份的数据量。实验3从caida开放数据集中,获取了一组流数据,对本发明实施例的方案进行大象流检测(heavyhitterdetection)实验。在本实验中,我们定义大象流为源-目的ip地址对的总量超过10mb。采用经典的带有40gb流量大小跳动窗口count-minsketch方案在系统中实现,其中每个工作节点保存4行8k大小的count-minsketch数据结构状态。实验结果如图11a和图11b所示。图11a和图11b示出了系统吞吐量和采用本发明实施例的近似容错方案进行大象流检测准确度的关系。当关闭状态持久化备份功能,且没有故障出现时,整体吞吐量达到12.33gb/s,而分析的准确度达到98.9%。当采用本发明实施例的近似容错方案,并且设置θ=100k,l=1k时,整体吞吐量只下降了4.7%,在出现10次错误时,准确度仍然达到92.8%。而调整参数设置θ=10k,l=100时,吞吐量下降了大约15%,但是准确度提升到95.5%。实验结果充分说明本发明实施例的方案实现了对整体系统吞吐量、高可靠性、准确度非常好的平衡。实验4实时数据流关联(onlinejoin)。onlinejoin是流数据库查询的一个基本操作,本实验仍然采用caidaip数据包,进行两个数据流关联操作。关联的目标是返回与两个数据流同时匹配的目的ip地址和相应的时间戳,意味着这两个数据流都在同样的时间访问了同样的主机(host)。我们采用分布式关联算法,将关联操作实现在多个工作节点中,实验结果如图12a和图12b所示。如图图12a和图12b所示,在关闭持久化备份功能,并且没有故障发生的理想情况下,系统吞吐量达到6.96gb/s,而相对估计误差为9.1%。在本发明实施例的近似容错方案中,设置θ=100k,l=1k,10次故障出现时,系统吞吐量下降5.2%,相对估计误差上升11.3%,而设置θ=10k,l=100,10次故障出现时,系统吞吐量下降12%,相对估计误差上升10.6%。该结果同样说明了本发明实施例的方案对系统系能、分析准确度、高可靠性的良好平衡。实验5实时逻辑回归(onlinelogisticregression)算法是机器学习中的经典算法。本实验中,采用onlinelr对kddcup2012track2开放数据的广告点击率进行预测。我们将数据集均分为两部分,一半进行训练,一半进行测试,训练中,使用了分布式随机梯度下降(stochasticdradientdescent,sgd)技术,各个上游工作节点采用部分训练数据训练本地模型,然后有规律的(每隔1k个tuples)发送到同一个下有节点中,而每个上游节点将会存储模型参数到哈希表中,作为自身状态,状态的偏差定义为模型参数的欧氏距离。下游节点计算整体模型参数后,将全局参数通过一跳反馈机制,反馈给上游节点进行刷新。实验结果如图13a和图13b所示。如图13a和图13b所示,关闭持久化备份功能时,系统吞吐量为62ktuples/s,而当我们采用本发明实施例的近似容错方案,并且设置θ=10,l=1k,以及θ=1,l=100时,系统吞吐量几乎没有损失,原因是模型属于高维参数模型,有超过一百万维特征,因此引入了很大的计算量,这导致由于状态备份带来的性能下降变得不再明显。而在准确性方面,没有故障时,准确度达到94.3%,而在上述不同θ和l设置的容错方案中,10次故障情况下,准确度也能达到90.4%和92.9%,充分说明本发明实施例的方案的优势。实验6本实验中,将对本发明实施例实现的环状缓存(ringbuffer)和网络队列(networkqueue)的性能进行测试。上述两项技术实现分别对应线程间和工作节点间通信。实验结果如图14a和图14b所示。图14a示出了ringbuffer的吞吐量性能测试结果,在所有测试用例中,性能都在3gb/s以上,远远超出相应的网络带宽(10gb/s)。图14b示出了网络间通信的吞吐量性能(gb/s),由于竞争的原因,吞吐量会随着发送工作节点数目的增加而下降,但是当有10个发送工作节点时,吞吐量仍然能打到8gb/s,整体性能4倍于业界通用的zeromq开源方案。本发明实施例还提供了一种上游备份的处理数据的方法。该方法可以包括:第一计算单元接收第二计算单元发送的第一接收数据,所述第二计算单元位于所述第一计算单元的上游;所述第一计算单元对所述第一接收数据进行计算处理,生成多个第一状态信息和第一发送数据,所述多个第一状态信息用于指示对所述第一接收数据进行计算处理的过程中形成的多个第一中间状态,所述多个第一状态信息中的每个第一状态信息包括对所述第一接收数据进行计算处理的过程中得到的中间结果,所述第一发送数据为对所述第一接收数据完成计算处理后形成的数据;所述第一计算单元将所述第一发送数据和所述多个第一状态信息选择性持久化备份到持久化备份设备中;所述第一计算单元向第三计算单元发送所述第一发送数据,所述第三计算单元位于所述第一计算单元的下游。其中,接收第一接收数据、对第一接收数据进行计算处理生成多个第一状态信息和第一发送数据、将多个第一状态信息选择性持久化备份到持久化备份设备中以及向第三计算单元发送第一发送数据的过程的执行与下游备份的方案中相应的过程的执行是相同的,所调用的api也是类似的,此处不再赘述。第一计算单元将第一发送数据选择性持久化备份到持久化备份设备中与下游备份的方案中将第一接收数据选择性持久化备份到持久化备份设备中也是类似的。具体而言,一种具体的实现可以为:该第一计算单元将该第一发送数据和该多个第一状态信息选择性持久化备份到持久化备份设备中可以包括:所述第一计算单元根据用户定义的数据备份规则,对所述第一发送数据进行选择,并备份到所述持久化备份设备中;所述第一计算单元根据用户定义的状态备份规则,对所述多个第一状态信息进行选择,并备份到所述持久化备份设备中。当然,备份规则也可以由系统预定义或者设置为系统默认的规则,本发明实施例对此不作限定。另一种具体的实现可以为:在该第一计算单元完成对该第一接收数据的计算处理得到该第一发送数据之后,该方法还包括:该第一计算单元在该第一计算单元的发送缓存中缓存该第一发送数据;该第一计算单元将该第一发送数据和该多个第一状态信息选择性持久化备份到持久化备份设备中,包括:如果该第一计算单元的发送缓存中缓存的数据量大于预设的第三门限,该第一计算单元对该第一发送数据中超出该第三门限的第一部分数据持久化备份到该持久化备份设备中;如果该多个第一状态信息中的目标状态信息中的目标中间结果与当前时刻该持久化备份设备中存储的最新的状态信息中的最新的中间结果的差异大于预设的第四门限,该第一计算单元将该目标状态信息持久化备份到该持久化备份设备中,该目标状态信息为该多个第一状态信息中的任意一个第一状态信息。在本发明实施例的上游备份的方案中,所述方法还可以包括:如果所述第一计算单元在预设的时间段内发生多于或等于预设次数的故障,所述第一计算单元减小所述第三门限的值和所述第四门限的值。在本发明实施例的上游备份的方案中,在第一计算单元接收第二计算单元发送的第一接收数据之前,所述方法还包括:所述第一计算单元接收控制器发送的恢复指示信息,所述恢复指示信息用于指示所述第一计算单元替代出现故障的第四计算单元进行工作;所述第一计算单元从所述持久化备份设备中获取所存储的最新的状态信息;当所述第一计算单元根据所述最新的状态信息确定需要从所述第二计算单元中获取数据时,所述第一计算单元接收第二计算单元发送的第一接收数据,包括:所述第一计算单元根据所述最新的状态信息从所述第二计算单元中获取所述第一接收数据;当所述第一计算单元根据所述最新的状态信息确定需要从所述持久化备份设备中获取数据时,所述方法还包括:所述第一计算单元根据所述最新的状态信息从所述持久化备份设备中获取持久化备份的第二接收数据,所述第一计算单元对所述第二接收数据进行所述计算处理,生成多个第二状态信息和第二发送数据,所述多个第二状态信息用于指示对所述第二接收数据进行所述计算处理的过程中形成的多个第二中间状态,所述多个第二状态信息中的每个第二状态信息包括对所述第二接收数据进行所述计算处理的过程中得到的中间结果,所述第二发送数据为对所述第二接收数据完成所述计算处理后形成的数据;所述第一计算单元将所述多个第二状态信息选择性持久化备份到所述持久化备份设备中;所述第一计算单元向第三计算单元发送所述第二发送数据。相对于本发明实施例的下游备份的方案。第一计算单元可以包括接收模块、第一计算模块、发送模块和选择性备份模块,以实现上述的相应功能。其中,选择性备份模块可以包括数据备份模块和状态备份模块两个子模块,以分别实现数据的选择性持久化备份和状态信息的选择性持久化备份。第一计算单元还可以包括接收缓存、发送缓存等,以对第一接收数据或第一发送数据进行缓存。第一计算单元还可以包括处理模块,以调整第一门限的值和第二门限的值。第一计算单元还可以包括容错恢复模块,以实现容错恢复的过程。本发明实施例还提供了一种计算单元。计算单元可以是第一计算单元,其包括输入接口、输出接口、处理器和存储器,其中,所述输入接口,用于获取第一接收数据;所述存储器,用于缓存所述第一接收数据,或者缓存所述第一发送数据;所述处理器,用于对数据或状态信息进行持久化备份处理,向所述上游的计算单元反馈确认信息,生成第一发送数据和多个第一状态信息;所述输出接口,用于向下游的计算单元发送所述第一发送数据。应理解,存储器可以是缓存,用于缓存所述第一接收数据的可以是接收缓存,用于缓存所述第一发送数据的可以是发送缓存,接收缓存和发送缓存可以合一配置也可以单独配置。该第一计算单元用于完成本发明实施例的处理数据的方法,且该计算单元相应器件的功能可以与上文中的第一计算单元相应模块的功能项对应,该第一计算单元的各器件还可以具有其他的功能以完成上文中的处理数据的方法,此处不再赘述。本发明实施例还提供了一种处理数据的装置,为数据处理系统。数据处理系统可以是如图1所示的系统,其包括控制器110、持久化备份设备140、数据源节点120、输出目的节点130和至少一个第一计算单元(图1中具体示例为工作节点150、工作节点160、工作节点170和工作节点180),以用于完成本发明实施例的处理数据的方法。具体而言,该控制器,用于管理和维护该至少一个第一计算单元,发现故障第一计算单元,向替代该故障第一计算单元的替代第一计算单元发送恢复指示信息,以指示该替代第一计算单元替代该故障第一计算单元进行计算处理;该持久化备份设备,用于存储数据或该至少一个第一计算单元进行计算处理生成的状态信息;该数据源节点,用于向该至少一个第一计算单元中的最上游的第一计算单元发送待处理的数据;该输出目的节点,用于接收该至少一个第一计算单元中的最下游的第一计算单元发送的计算处理完成后形成的数据。最后,本发明实施例还给出了处理数据相关的应用程序编程接口(applicationprogramminginterface,api)。其中,主要的可以包括数据接收api(例如receivedataitem()),用于接收第一接收数据,或者说是从数据源节点或上游节点接收输入数据。数据处理api(例如processdata()),用于对第一接收数据进行计算处理,或者说是用于处理输入数据。选择性备份功能,用于将第一发送数据(或第一接收数据)和多个第一状态信息选择性持久化备份到持久化备份设备中,具体地,选择性备份功能可以包括数据备份api(例如backupitem())、状态差异比较api(例如statedivergence())和状态备份api(例如,backupstate())。数据发送api,向第三计算单元发送第一发送数据,例如senddataitem(item&feedback)。api还可以包括调整门限api,用于调整数据备份或状态信息备份的门限的值。反馈响应api,用于向第二计算单元(上游的计算单元)反馈确认信息,例如sendfeedbackitem(item&feedback)。获取状态api(例如recoverstate(state&state)),用于容错恢复时从持久化备份设备获取备份的状态信息。获取数据api(例如recoveritem(item&item)),用于容错恢复时获取备份的数据。文中,api也可以称为功能接口或功能函数。上文列举的api分列在表1和表2中。表1给出了本发明实施例的系统功能接口的定义的示例。表1系统功能接口的定义表2给出了本发明实施例的用户自定义功能接口的定义的示例。表1和表2的具体内容参见附录的api软件代码。表2用户自定义功能接口的定义附录:api软件代码本发明实施例给出分布式流处理系统和处理流程的api的定义,可以很大程度方便大数据实时流处理的标准化和统一化设计实现,为应用部署和用户可动态调整控制带来很大便利。当然本发明实施例的方法的各步骤也可以不通过调用api的方式实现,本发明实施例对此不作限定。应理解,本发明实施例中第一状态信息以及第二状态信息被存储在持久化备份设备中,均成为持久化备份设备中所存储的状态信息。还应理解,本发明各实施例提供的处理数据的方法,不仅针对分布式流处理系统,也可以类似地推广到onlinelearning,streammining等其他智能分析领域。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备,例如可以是个人计算机,服务器,或者网络设备等,执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1