本说明书涉及数据处理领域,特别地,涉及一种io请求处理方法、系统、及装置。
背景技术:
随着互联网技术的发展,多种在线金融服务应运而生,人们可以足不出户地完成各项金融服务的请求。线上操作给用户带来便利的同时,对于服务处理结果的准确性和及时性提出了更高的要求。每笔金融服务需要流经多个系统,在当前系统上结束的计算结果需要准确及时地写入下游系统。当下游系统的处理能力不足和/或状态异常时,需要上游系统进行配合重试或者限流。
因此,需要提供一种更可靠的io操作流控方法,使得上游系统可以和下游系统进行交互,确保计算的准确性和及时性。
技术实现要素:
本说明书实施例一方面提供一种io请求处理方法。所述方法可以包括以下操作:从io客户端获取io请求的相关信息,所述io请求的相关信息至少包括与所述io请求对应的下游设备的识别信息;根据所述下游设备的识别信息从io服务器获取与所述io请求对应的下游设备的状态信息;至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果;根据所述判断结果执行相应的io请求处理策略。
本说明书实施例一方面提供一种io客户端处理方法。所述方法可以包括以下操作:获取至少一个客户io端,将所述至少一个io客户端进行抽象和封装,得到对应于所述至少一个io客户端的io服务器;所述io服务器至少用于判断所述io客户端的请求能否被下游设备响应。所述io客户端和所述io服务器可以用于执行以下操作:从io客户端获取io请求的相关信息,所述io请求的相关信息至少包括与所述io请求对应的下游设备的识别信息;根据所述下游设备的识别信息从io服务器获取与所述io请求对应的下游设备的状态信息;至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果;根据所述判断结果执行相应的io请求处理策略。
本说明书实施例一方面提供一种io请求处理系统。所述系统包括io客户端和io服务器。所述io客户端用于发出至少一个io请求。所述io服务器,至少用于判断所述io请求是否被下游设备响应。所述io服务器包括信息获取单元、判断单元和执行单元。所述信息获取单元用于从io客户端获取io请求的相关信息,所述io请求的相关信息至少包括与所述io请求对应的下游设备的识别信息;并根据所述下游设备的识别信息获取与所述io请求对应的下游设备的状态信息。所述判断单元用于至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果。所述执行单元用于根据所述判断结果执行相应的io请求处理策略。
附图说明
本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书的一些实施例所示的io请求处理方法的示例性流程图;
图2是根据本说明书的一些实施例所示的io请求处理方法的示例性流程图;
图3是根据本说明书的一些实施例所示的io请求处理系统的示例性示意图;
图4是根据本说明书的一些实施例所示的io服务器的示例性框图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本说明书中所使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
应当理解的是,本说明书中所提到的系统及方法的应用场景仅仅是本说明书一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其他类似情景。
本说明书实施例所述的方法,可以通过感知响应io请求的下游设备的状态,对io请求进行联动流控。同时可以对下游设备的状态进行实时监控从而调控流控参数,确定流控准确性和及时性。另外,可以实现多级io请求处理。
图1是根据本说明书的一些实施例所示的io请求处理方法的示例性流程图。如图1所示,流程100可以包括以下操作。
步骤110,从io客户端获取io请求的相关信息。
在一些实施例中,所述io客户端可以是指用于发出或者执行io操作的端口、程序、逻辑等中的一种或多种的组合,例如:io客户端可以发出一个io请求,下游设备响应该io请求。所述io客户端可以在同一时间执行至少一个io操作。例如,一个io客户端可以包括一个或以上运算子(operator),每个运算子可以执行一个io操作。所述io请求可以是指用于请求io操作的指令和/或数据流。所述io客户端可以发出io请求,其下游设备可以执行对应的操作。在一些实施例中,所述io请求的相关信息可以包括与所述io请求对应的下游设备的识别信息。所述与所述io请求对应的下游设备可以是指在io请求对应的io操作下将要被写入或流入数据处理结果的设备。可以理解的是,一个io请求对应于一次io操作,而一次io操作总是伴随着一次数据处理或者访问。io操作可以是将数据处理的结果写入到某一个设备中,例如,下一个处理设备,或是存储设备比如hbase中。因此,对应于所述io请求的下游设备可以是需要数据写入的上述的某一个设备。所述识别信息可以是用于指示所述下游设备的信息。例如,可以接受数据写入的设备有三个,设备a、设备b和设备c。所述识别信息可以用于说明所述io请求对应的io操作需要将数据写入设备a,例如识别信息可以是设备a的编码信息:000001。
步骤120,根据所述下游设备的识别信息从io服务器获取与所述io请求对应的下游设备的状态信息。
在一些实施例中,所述io服务器可以是用于对io请求进行管控的设备或程序模块。作为示例,所述io服务器可以确定在预设的时间段内某一个或者多个下游设备能够响应的io请求的数量。同时,io服务器可以实时的调整在预设的时间段内能够被处理的io请求的数量。另外,io服务器还可以处理在预设时间段内超过该数量的io请求。例如,所述io服务器可以包括多个异步运算子(asyncoperator),所述异步运算子可以用于将因为流量控制未能被实时处理的io请求再次下发给下游设备。
在一些实施例中,所述下游设备的状态信息可以是用于指示当前时刻下游设备的能力和状态的信息。所述下游设备的能力可以是下游设备的数据吞吐量,或者可以理解为接受数据写入的速率。例如,同一时刻可以有多少个io请求被成功处理(对应的io操作的数据写入可以成功的写入所述下游设备)。所述下游设备的能力可以基于历史io操作的相关信息确定。例如,io操作的成功率、io操作的耗时等,可以被用于确定所述下游设备的能力。出于说明的目的,io操作的成功率越高,io操作的耗时越短,则在一定程度上反应了下游设备的能力越强。所述下游设备的状态可以包括正常、异常、限流等,用于指示下游设备在响应io请求时自身的状况。正常说明下游设备可以以原有能力(例如,数据吞吐能力)接收写入的数据。异常说明下游设备无法写入数据。限流说明下游设备可以以原有能力的一个百分比来接收写入的数据。
步骤130,至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果。
在一些实施例中,所述io请求能否被下游设备响应可以是指所述io请求对应的io操作可以将数据写入下游设备。在一些实施例中,所述判断所述io请求能否被所述下游设备响应可以包括多级判断。仅出于说明的目的,所述与io请求对应的下游设备的状态信息可以首先用于初步判断所述io请求能否被所述下游设备响应。作为示例,假若所述下游设备的状态是正常,则可以初步判定所述io请求能够被所述下游设备响应。假若所述下游设备的状态是异常,则可以初步判定所述io请求不能够被所述下游设备响应。假若所述下游设备的状态是限流,则可以根据所述下游设备响应的io请求数量是否达到限制值来判定所述io请求能否被所述下游设备响应。
在一些实施例中,当初步判断所述io请求能够被所述下游设备响应时,可以基于对应于当前处理时段的io请求处理阈值继续判定所述io请求能否被所述下游设备响应。所述当前处理时段可以是一个预设时间段,例如,1s、3s、5s等。由于所述下游设备的能力限制,为了防止在当前处理时段内过多io请求的处理导致超出下游设备的能力上限使设备崩溃,需要有请求数量的限制。因此,利用所述io请求处理阈值来限制在所述当前处理时段被处理的io请求的数量。当所述当前处理时段内已处理或正在处理的io请求已达到所述io请求处理阈值时,所述io请求可以被判定为不能被所述下游设备响应。在一些实施例中,所述io请求处理阈值可以基于所述下游设备的能力,以及所述io客户端所包括的运算子的数量确定。一般情况下,当下游设备的处理速率越高时,其阈值可以设定的越高。作为示例,下游设备的能力,与所述io客户端的数量(或io客户端中包含的运算子的数量)之间的比值,可以作为所述io请求处理阈值。另外,该阈值的设定与应用场景的实时性要求也相关,技术人员可以根据场景以及设备参数灵活调整阈值。例如:当下游设备的访问上限为1000,瞬时访问量达到800时,进入限流模式,此时可以只允许优先级比较高的io请求实时响应,其余的io请求则通过io服务器进行控制。
在一些实施例中,所述io请求处理阈值在确定后是可以调整的。例如,当所述下游设备的能力发生变化时,比如存储设备作为下游设备时,扩容后下游设备的能力增强,则所述io请求处理阈值可以增大。当下游设备突发异常时,则所述io请求处理阈值可以减小。
步骤140,根据所述判断结果执行相应的io请求处理策略。
基于步骤130的描述,所述判断结果可以是所述io请求能够被所述下游设备响应,以及所述io请求不能够被所述下游设备响应。对应不同的判断结果,所述io请求可以有不同的处理方式。仅作为示例,当所述判断结果为所述io请求能够被所述下游设备响应时,所述io请求可以由所述io客户端继续进行处理,例如,执行所述io请求对应的io操作以将数据写入下游设备。当所述io请求在被所述io客户端处理时,可以继续判断所述io请求是否处理失败,例如,io操作超时,或重试失败等。当判定为处理失败后,所述io请求可以被传输至所述io服务器并由其(例如,由异步运算子)处理。当判断结果为所述io请求不能够被所述下游设备响应时,所述io请求可以被传输至第一设备(例如,分布式存储系统)进行存储,并在适当的时机,例如,重新判断该io请求可以被所述下游设备响应后(比如所述下游设备的状态由异常变为正常、或所述下游设备的能力提升而使得所述io请求处理阈值增大),可以继续由所述io服务器读取并处理。关于处理所述io请求的具体的描述可以参考本说明图2部分,在此不再赘述。
应当注意的是,上述有关流程100的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程100进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。例如,流程100中的所有步骤可以在包括一组指令的计算机可读介质中实现。指令可以以电子流或电信号的形式传输。
图2是根据本说明书的一些实施例所示的io请求处理方法的示例性流程图。如图2所示,流程200可以包括以下操作。
步骤210,判断所述io请求能否被所述下游设备响应。
步骤210可以与流程100中的步骤130相同或类似,可以进行参考,在此不再赘述。当所述判断结果为所述io请求不能被所述下游设备响应时,流程200可以行进至步骤220。当所述判断结果为所述io请求能够被所述下游设备响应时,流程200可以行进至步骤240。
步骤220,传输所述io请求至第一设备进行存储。
在一些实施例中,所述第一设备可以是具备数据存储功能的设备,例如分布式存储存储系统比如hdfs等。当所述io请求不能被所述下游设备响应时,为了保持所述io请求不丢失,可以将所述io请求先进行存储。存储的方式可以是由io客户端以pub/sub(publish/subscribe,发布/订阅)模式将所述io请求转存至所述第一设备。
步骤230,重新判断所述io请求能否被所述下游设备响应,当所述io请求能够被所述下游设备响应后,从所述第一设备获取所述io请求并传输至所述io服务器或所述io客户端进行处理。
在一些实施例中,当所述io请求被存储后,如果所述下游设备在后续时间段内因为诸如能力提升、纠错成功使得状态由异常转变为正常等原因,可以响应更多的io请求,此时所述io请求可以重新被处理。这样可以保证io请求的可靠性。基于此,所述下游设备的状态信息可以持续被获取,并可以基于持续获取的下游设备的状态信息以判定所述io请求能否重新被响应。所述判定方法可以参考流程100中的步骤130。当所述io请求能够被所述下游设备响应后,其可以由所述第一设备传输至所述io服务器进行处理。例如,由所述io服务器的异步运算子进行处理,或由io客户端的运算子进行处理。传输方式可以是与所述io请求的存储方式类似,通过pub/sub模式将所述io请求传输至所述io服务器或所述io客户端,也可以是io服务器读取第一设备的信息。
步骤240,判断所述io请求是否处理失败。
当所述io请求可以被下游设备响应时,所述io客户端可以直接处理io请求。处理结果可以是成功,例如数据被成功写入所述下游设备,也可以是失败,例如操作超时或超时后重试失败。当所述io请求处理成功后,整个io请求的处理流程可以结束。当所述io请求处理失败后,流程200可以行进至步骤250。
步骤250,传输所述io请求至所述io服务器并由所述io服务器处理所述io请求。
在一些实施例中,由所述io客户端处理失败的io请求,可以被传输至所述io服务器进行处理。传输可以是直接传输。例如,藉由io客户端与io服务器之间的通讯连接由io客户端直接传输至所述io服务器。传输也可以是间接传输。例如,io客户端可以将处理失败的io请求通过pub/sub模式转存至所述第一设备。io服务器以pub/sub模式从所述第一设备中获取所述io请求。所述io客户端对于获取的io请求的处理,可以是使用,例如,异步运算子,进行。
在一些实施例中,io请求的处理失败可以是由于网络节点异常而导致处理失败。例如,由于vm网络异常导致操作超时且重试无法成功而导致io请求处理失败。在对io请求进行再处理时,io客户端可以选择新的vm网络对所述io请求进行处理,以保证处理成功。在一些实施例中,io客户端可以确定需要再处理的io请求的类型(例如,文本io(textio)、二进制io(binaryio)和原始io(rawio)等),并选择合适的处理部件(例如,适配的异步运算子)处理所述io请求。当io客户端要同时处理多个需要再处理的io请求时,可以将相同类型的io请求合并,并由适配的异步运算子处理合并的io请求。
应当注意的是,上述有关流程200的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程200进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。
图3是根据本说明书的一些实施例所示的io请求处理系统的示意图。
在一些实施例中,该io请求处理系统300可以用于联动流控io请求,例如,io请求处理系统可以获取下游设备的能力以确定io请求在当前是否能够被处理,如图3所示,io请求处理系统300可以包io客户端310以及io服务器320。
io客户端310可以用于发送和/或处理io请求。在一些实施例中,io客户端310可以包括至少一个运算子,例如,运算子310-1、运算子310-2、运算子310-3以及运算子310-4。所述运算子可以包括io端口、程序代码等,用于执行不同的io请求。在一些实施例中,一个或以上io客户端310可以被抽象和封装。在抽象和封装时,可以将与io服务器320的地址相关的信息写入。完成后,一个或以上的io客户端310可以对应于一个io服务器320。io客户端310可以与io服务器320进行通讯并获取io服务器提供的数据。例如,io客户端可以通过访问io服务器的地址以与io服务器交互。应当理解,为了说明方便,图3中只给出了一个io客户端310,也可以存在两个或以上的io客户端310。
io服务器可以用于对当前io请求的联动流控。所述io请求可以包括控制器322和多个异步运算子320-1至320-4。控制器322可以至少用于判断所述io客户端的清漆能否被下游设备响应。异步运算子320-1至320-4可以用于执行异步io操作(例如,处理io请求)。在一些实施例中,控制器322可以从io客户端获取io请求的相关信息,所述相关信息至少包括与所述io请求对应的下游设备的识别信息。基于下游设备的识别信息,控制器322可以获取与所述io请求对应的下游设备的状态信息。其后,控制器322可以至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果。根据所述判断结果,所述io请求可以被执行相应的io请求处理策略。
在一些实施例中,控制器322可以执行多级判断以确定所述io请求能否被所述下游设备响应。例如,控制器322可以基于所述与io请求对应的下游设备的状态信息初步判断所述io请求能否被所述下游设备响应。假若所述下游设备的状态是正常,则可以初步判定所述io请求能够被所述下游设备响应。假若所述下游设备的状态是异常,则可以初步判定所述io请求不能够被所述下游设备响应。假若所述下游设备的状态是限流,则可以根据所述下游设备响应的io请求数量是否达到限制值来判定所述io请求能否被所述下游设备响应。当初步判断所述io请求能够被所述下游设备响应时,控制器322可以基于对应于当前处理时段的io请求处理阈值继续判定所述io请求能否被所述下游设备响应。当所述当前处理时段内已处理或正在处理的io请求已达到所述io请求处理阈值时,所述io请求可以被判定为不能被所述下游设备响应。
在一些实施例中,当判定结束后,io服务器320和/或io客户端310可以基于判定结果对所述io请求进行处理。作为示例,当所述判断结果为所述io请求能够被所述下游设备响应时,所述io请求可以由io客户端310继续进行处理,例如,执行所述io请求对应的io操作以将数据写入下游设备。当所述io请求在被io客户端310处理时,可以继续判断所述io请求是否处理失败,例如,io操作超时,或重试失败等。当判定为处理失败后,所述io请求可以被传输至io服务器320并由其(例如,由异步运算子320-1至320-4)处理。当判断结果为所述io请求不能够被所述下游设备响应时,所述io请求可以被传输至第一设备(例如,分布式存储系统)进行存储,并在适当的时机,例如,重新判断该io请求可以被所述下游设备响应后(比如所述下游设备的状态由异常变为正常、或所述下游设备的能力提升而使得所述io请求处理阈值增大),可以继续由所述io服务器320读取并处理。
在一些实施例中,io请求处理系统300可以与第一设备400通信连接。第一设备400可以是具有数据存储功能的设备,可以用于存储当前处理时段无法被下游系统响应的io请求,和/或由io客户端310处理失败的io请求。示例性的第一设备400可以包括分布式存储系统、大容量存储器、可移动存储器、易失性读写存储器、只读存储器(rom)等或其任意组合。示例性的大容量储存器可以包括磁盘、光盘、固态磁盘等。示例性可移动存储器可以包括闪存驱动器、软盘、光盘、存储卡、压缩盘、磁带等。示例性的挥发性只读存储器可以包括随机存取内存(ram)。示例性的ram可包括动态ram(dram)、双倍速率同步动态ram(ddrsdram)、静态ram(sram)、闸流体ram(t-ram)和零电容ram(z-ram)等。示例性的rom可以包括掩模rom(mrom)、可编程rom(prom)、可擦除可编程rom(perom)、电子可擦除可编程rom(eeprom)、光盘rom(cd-rom)和数字通用磁盘rom等。在一些实施例中,第一设备400可以在云平台上实现。仅作为示例,所述云平台可以包括私有云、公共云、混合云、社区云、分布云、内部云、多层云等或其任意组合。
图4是根据本说明书的一些实施例所示的io服务器的示例性框图。如图4所示,所述io服务器可以包括获取单元410、判断单元420和执行单元430。
获取单元410可以用于从io客户端获取io请求的相关信息。在一些实施例中,所述相关信息至少包括与所述io请求对应的下游设备的识别信息。所述与所述io请求对应的下游设备可以是指在io请求对应的io操作下将要被写入或流入数据处理结果的设备。所述识别信息可以是用于指示所述下游设备的信息。例如,可以接受数据写入的设备有三个,设备a、设备b和设备c。所述识别信息可以用于说明所述io请求对应的io操作需要将数据写入设备a,例如识别信息可以是设备a的编码信息:000001。
获取单元410还可以根据所述下游设备的识别信息获取与所述io请求对应的下游设备的状态信息。在一些实施例中,所述下游设备的状态信息可以是用于指示当前时刻下游设备的能力和状态的信息。所述下游设备的能力可以是下游设备的数据吞吐量,或者可以理解为接受数据写入的速率。所述下游设备的状态可以包括正常、异常、限流等,用于指示下游设备在响应io请求时自身的状况。
判断单元420可以至少基于所述与io请求对应的下游设备的状态信息,判断所述io请求能否被所述下游设备响应,得到判断结果。在一些实施例中,判断单元420可以基于所述与io请求对应的下游设备的状态信息初步判断所述io请求能否被所述下游设备响应。假若所述下游设备的状态是正常,则可以初步判定所述io请求能够被所述下游设备响应。假若所述下游设备的状态是异常,则可以初步判定所述io请求不能够被所述下游设备响应。假若所述下游设备的状态是限流,则可以根据所述下游设备响应的io请求数量是否达到限制值来判定所述io请求能否被所述下游设备响应。当初步判断所述io请求能够被所述下游设备响应时,判断单元420可以基于对应于当前处理时段的io请求处理阈值继续判定所述io请求能否被所述下游设备响应。所述io请求处理阈值来限制在所述当前处理时段被处理的io请求的数量。当所述当前处理时段内已处理或正在处理的io请求已达到所述io请求处理阈值时,所述io请求可以被判定为不能被所述下游设备响应。
在一些实施例中,判断单元420可以对判断为不能够被下游系统响应的io请求进行持续判断。作为示例,判断单元420可以在一段时间后重新判断所述io请求能否被下游系统响应,例如,基于下游系统新的状态信息。
执行单元430可以根据所述判断结果执行相应的io请求处理策略。在一些实施例中,当所述io请求不能够被所述下游设备响应时,所述io请求可以被传输至第一设备(例如,分布式存储系统)进行存储,并在适当的时机,例如,重新判断该io请求可以被所述下游设备响应后(比如所述下游设备的状态由异常变为正常、或所述下游设备的能力提升而使得所述io请求处理阈值增大),io服务器可以获取所述io请求并由执行单元430进行处理。
在一些实施例中,执行单元430还可以处理由io客户端处理失败的io请求。处理失败的io请求,可以由io客户端直接传输至io服务器,并由执行单元430执行。处理失败的io请求,也可以先有io客户端转存至第一设备,并由io服务器获取由执行单元430执行。
关于io服务器的更具体描述,可以参考本说明书流程图部分。
本说明书实施例可能带来的有益效果包括但不限于:本说明书实施例所述的方法,可以通过感知响应io请求的下游设备的状态,对io请求进行联动流控。同时可以对下游设备的状态进行实时监控从而调控流控参数,确定流控的准确性和及时性。另外,可以实现多级io的能力。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、rf、或类似介质,或任何上述介质的组合。
本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等,常规程序化编程语言如c语言、visualbasic、fortran2003、perl、cobol2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或第一设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。
此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的第一设备或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。