消息蓄洪方法及装置与流程

文档序号:11582389阅读:403来源:国知局
消息蓄洪方法及装置与流程

本申请涉及计算机软件技术领域,尤其涉及一种消息蓄洪方法及装置。



背景技术:

消息中间件是一个用于系统或组件之间、提供可靠的异步通讯、降低系统耦合度、提高整个系统的可扩展性和可用性的一个组件,简单理解可以看作传话人。

消息中间件包括消息总线和消息客户端两部分。消息总线接收从一消息客户端发来的消息,以及将该消息发送给另一消息客户端,另一消息客户端接收该消息并推送给相应的处理系统进行处理。在这个过程中,发送消息的消息客户端为该消息的生产者,接收该消息的消息客户端为该消息的消费者。

在现有技术中,当消息较多消息总线处理不过来时,可以通过消息蓄洪库对处理不过来的消息进行蓄洪,等到有能力处理时发送该消息用以消费。具体地,消息蓄洪库通常是由多个数据库构成的集群,通过按照消息相关的指定标识,在集群中分数据库存储对应的消息(比如,将消息的序号取模映射向集群中的某个数据库,作为存储该消息的数据库),完成对消息的蓄洪。

但是,上述现有技术中的消息蓄洪方式导致集群中的每个数据库固定地对应于一些待蓄洪消息,若某个数据库不可用时,将会直接影响到对该数据库对应的待蓄洪消息的蓄洪操作,进而也影响到消息蓄洪库的可用性。



技术实现要素:

本申请实施例提供风险识别方法、装置及系统,用以解决如下技术问题:现有技术中的消息蓄洪方式导致集群中的每个数据库固定地对应于一些待蓄洪消息,若某个数据库不可用时,将会直接影响到对该数据库对应的待蓄洪消息的蓄洪操作,进而也影响到消息蓄洪库的可用性。

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

本申请实施例提供的一种消息蓄洪方法,包括:

获得待蓄洪消息;

确定可存储所述待蓄洪消息的数据库的集合,所述集合是通过对多个数据库进行可用性检测得到的;

通过在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,完成对所述待蓄洪消息的蓄洪。

本申请实施例提供的一种消息蓄洪装置,包括:

获得模块,获得待蓄洪消息;

确定模块,确定可存储所述待蓄洪消息的数据库的集合,所述集合是通过对多个数据库进行可用性检测得到的;

蓄洪模块,通过在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,完成对所述待蓄洪消息的蓄洪。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:不再像现有技术中按照标识分数据库蓄洪消息(每条待蓄洪消息与蓄洪该消息所要使用的数据库是相对固定,可以预计),而是可以基于预先或实时对各数据库进行的可行性检测,在经检测被认为可用的各数据库中选择数据库进行消息蓄洪,这种选择也可以是随机不固定的。因此,可以消除或减少消息蓄洪库的部分数据库不可用时对消息蓄洪的不利影响,有利于提高消息蓄洪库的可用性。

附图说明

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

图1为本申请实施例提供的一种消息中间件的原理示意图;

图2为本申请实施例提供的一种消息蓄洪方法的流程示意图;

图3为本申请实施例提供的一种实际应用场景下,数据库的一种架构图;

图4为本申请实施例提供的对应于图3的一种可用数据库集合示意图;

图5为本申请实施例提供的对应于图2的一种消息蓄洪装置的结构示意图。

具体实施方式

本申请实施例提供一种消息蓄洪方法及装置。

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

需要说明的是,上述的现有技术是以一定的场景为前提的。消息蓄洪通常通过队列(queue)来实现,具体地,经常通过apachekafka来实现。但在所述一定的场景下,由于开源协议或其他一些原因的限制,不能使用apachekafka,于是,在上述现有技术中,用数据库集群当作一个queue来实现消息蓄洪,进而导致了上述现有技术中的问题。

图1为本申请实施例提供的一种消息中间件的原理示意图。在图1中,有a~f共六个消息客户端,它们分别为对应的系统提供消息服务,当前,a~c为消息的生产者,d~f为消息的消费者。其中,a的消息通过消息总线发送给了d和e,b的消息虽然发给了消息总线但没有客户端消费,c的消息通过消息总线发送给了d和f。

当消息总线接收到的消息超过其处理能力时,则可以进行消息蓄洪,等到有能力时再使消息被消费。

下面对本申请的方案进行详细说明。

图2为本申请实施例提供的一种消息蓄洪方法的流程示意图。从程序角度而言,该流程的执行主体包括但不限于:数据库的客户端或服务端、可以连接数据库或数据库集群的软件(比如,背景技术中的消息总线等),等等。从设备角度而言,该流程的执行主体可以包括但不限于可搭载上述程序的以下设备:个人计算机、大中型计算机、计算机集群、手机、平板电脑、智能可穿戴设备、车机,等等。

图2中的流程可以包括以下步骤:

s201:获得待蓄洪消息。

在本申请实施例中,对于背景技术中的场景,待蓄洪消息可以获取自消息总线,通常为消息总线来不及处理的消息;对于存在类似问题的其他场景,比如,拥塞的消息队列,则待蓄洪消息可以获取自消息队列的入口;等等。

本申请对待蓄洪消息具体包含什么内容,以及具体采用何种格式并不做限定,这些可以取决于待蓄洪消息所涉及的业务。比如,待蓄洪消息可以是即时通讯业务中的离线留言消息,可以是电子商务业务中的交易明细消息,可以是监控业务中的日志消息,等等。

s202:确定可存储所述待蓄洪消息的数据库的集合,所述集合是通过是对多个数据库进行可用性检测得到的。

在本申请实施例中,所述集合可以有多种具体表示形式,比如,列表、枚举类型数据、结构体等。

在本申请实施例中,可以有多个数据库用于存储待蓄洪消息,这些数据库通常以集群的形式工作,在实际应用中,由于种种原因,可能导致集群中的部分数据库暂时不可用,比如,机器故障、掉电、软件异常等,从而导致背景技术中的问题。

而本申请则可以预先得到或实时得到一个经检测具有可用性的数据库的集合,该集合是集群的一个子集。这种可用性检测可以是定时或不定时执行的,也即,可以执行多次,通过可用性检测,可以在对消息蓄洪前,就将检测时不具有可用性的数据库确定出来,不作为本次消息蓄洪所要使用的数据库,从而有利于提高消息蓄洪成功的概率,也有利于提高消息蓄洪库的可用性。

在本申请实施例中,数据库的可用性检测具有多种具体实施方式,在不同的具体实施方式,相应地,检测结果的可靠性可能不同。列举两种检测方式作为示例:可以针对数据库执行数据操作,比如,数据查询(select)操作、数据插入(insert)操作、数据更新(upadte)操作等;可以分析数据库最近的工作日志是否正常。

在本申请实施例中,步骤s202中所述的“确定集合”具体可以指:该集合已经由执行主体或者其他主体预先得到,在执行步骤s202,执行主体再确定接下来要使用的是该集合;所述的“确定集合”具体也可以指:该集合在执行步骤s202时尚未得到,而是在执行步骤s202中再实时地得到。前一种方式的优点是有利于提高本申请的方案的执行速度,后一种方式的优点是可用性检测的结果的时效性较好,有利于提高后续操作的可靠性。

s203:通过在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,完成对所述待蓄洪消息的蓄洪。

在本申请实施例中,在确定集合后,可以在集合中随机选择或者按照其他策略选择至少一个数据库存储待蓄洪消息。将待蓄洪消息在所选的数据库中存储完成也即表示对该待蓄洪消息蓄洪完成。

在具体实施时,可以针对每条待蓄洪消息执行一次图2的流程,也可以针对一批待蓄洪消息执行一次图2中的流程。

通过图2的方法,不再像现有技术中按照标识分数据库蓄洪消息(每条待蓄洪消息与蓄洪该消息所要使用的数据库是相对固定,可以预计),而是可以基于预先或实时对各数据库进行的可行性检测,在经检测被认为可用的各数据库中选择数据库进行消息蓄洪,这种选择也可以是随机不固定的。因此,可以消除或减少消息蓄洪库的部分数据库不可用时对消息蓄洪的不利影响,有利于提高消息蓄洪库的可用性。

基于图2的方法,本申请实施例还提供了该方法的一些具体实施方案,以及扩展方案,下面进行说明。

在本申请实施例中,对于步骤s202,可以预先或实时地、定时或不定时地按照如下方式,对多个数据库进行可用性检测得到所述集合:对所述多个数据库中的每个数据库执行数据操作,操作成功时确定该数据库可用;获得包含一个或多个被确定可用的数据库的所述集合。该方式可以有多种更具体的实施方案。

例如,可以在执行主体本地起一个线程,定时地(比如,每隔30秒)执行以下操作:查询消息蓄洪库对应的每个数据库中的至少一张数据表,如果查询成功,则可以认为该数据库当前可用。根据各次查询结果可以得到一张可用数据库列表(也即,上述集合),并可以对该列表定时维护。

又例如,可以随机从消息蓄洪库对应的各数据库中选择至少一个数据库,在选择的数据库中分别更新一条数据记录,如果更新成功,则可以认为该数据库当前可用,并将该数据库加入一张可用数据库列表中,并可以对该列表定时维护。

在本申请实施例中,对于步骤s203,所述在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,具体可以包括:在确定的所述集合中,随机选择至少一个数据库存储所述待蓄洪消息。此处,随机选择的优点的是:逻辑简单,且在待蓄洪消息数量较多时,有利于使各可用数据库的负载逐渐趋向均衡。

当然,前面也有提到,也可以采用随机以外的其他策略选择数据库,比如,可以轮流向集合中的各数据库中存储待蓄洪消息,等等。

在本申请实施例中,根据前面的说明可知,虽然在消息蓄洪前通过对数据库进行可用性检测确定了集合,但是,这种可用性检测通常都是预先执行的,其结果的时效性未必符合实际需求。也即,虽然在刚得到集合时,集合中的数据库是可用的,但在执行步骤s203时,集合中的数据库未必仍然可用的,这种情况的发生概率往往还会随这两个时间点间隔变远而增大。

针对这种情况,本申请的方案也提供了相应的应对措施。比如,对于步骤s203,在选择至少一个数据库后,存储所述待蓄洪消息前,还可以执行:再次检测所选择的数据库是否可用;若不可用,将其从所述集合中剔除,并在剔除后的所述集合中重新选择数据库;从而可以进一步地保证后续所选择数据库的可用性。为了防止混淆,将这次检测称为第二次可用性检测,而将步骤s202中所述的可用性检测称为第一次可用性检测。

第一次可用性检测与第二次可用性检测采用的具体实施方式可以相同,也可以不同。在实际应用中,第一次可用性检测通常是预先执行的,而第二次可用性检测是在执行步骤s203时实时执行的,因此,在执行效率和速度方面,对第二次可用性检测的要求相对更高,则第二次可用性检测相比于第一次可用性检测往往可以简单一些,以便于更高效更快速地执行。比如,若第一次可用检测需要对数据库中的多张表分别进行至少一次查询操作,则第二次可用检测可以只对数据库中的任一张表进行一次查询操作。

另外,若在步骤s203中选择了多个数据库,且通过第二次可用检测,检测出这多个数据库只有部分数据库不可用,并非全不可用,则也可以不重新选择数据库,而是在所选择的可用的数据库中存储待蓄洪消息。

在本申请实施例中,本申请的方案还提供了一种实际场景下,进行消息蓄洪的一些技术细节,这些技术细节有利于提高消息蓄洪库的可用性。下面进行说明。

在该实际应用场景下,上述的数据库为逻辑库,每个逻辑库由至少一主一备两个物理库支持。

为了便于理解,对“逻辑库”、“物理库”这两个概念进行解释。以计算机系统作为类比,“逻辑库”可类比于计算机系统中的文件系统,一般为用户提供有相应的可视界面,“物理库”可类比于存储该文件系统的数据物理区域(通常是硬盘上的某个分区),“物理库”为“逻辑库”提供底层硬件支持。为了保障逻辑库的可靠性,其对应的主备物理库一般在不同的机器上,如此,即使其中一台机器宕机,逻辑库仍然可能正常工作。

进一步地,对于步骤s203,在选择了数据库后,所述存储所述待蓄洪消息,具体可以包括:将所述待蓄洪消息存储在支持该数据库的主物理库和备物理库中。其中,将待蓄洪消息存储在备物理库可以由执行主体间接导致的,具体地,执行主体“将待蓄洪消息存储在主物理库”间接导致“主物理库将待蓄洪消息同步存储至备物理库中”。

图3为本申请实施例提供的该实际应用场景下,数据库的一种架构图。在图3中,示出了两个数据库(逻辑库),实际上也可能有更多的逻辑库。每个逻辑库由一主一备两个物理库支持,主备之间可以相互同步。在本申请实施例中,应用程序具体可以是图2中流程的执行主体。

在本申请实施例中,为尽量保证数据库的可靠性,当确定任一数据库的主物理库或备物理库不可用时(此时,主备功能实际已经失效),可以认为该数据库不可用(实际上该数据库可用,只是可靠性已经大打折扣,不如主备功能正常时的预期),若该数据库尚在集合中,则可以将其从集合中剔除。以下相关的实施例主要基于这样的前提进行说明。

图4为本申请实施例提供的对应于图3的一种可用数据库集合示意图。在图4中,集合的具体表现形式是列表,集合中包含了多个经过第一次可用性检测的数据库,每个数据库分别由一主一备两个物理库支持,图4中只示出了数据库1的主物理库和备物理库,其他几个数据库的省略未示出。当集合中任一个物理库被认为不可用时,可以将该物理库所支持的数据库从集合中剔除。

在上述前提下,自然地,可以当待蓄洪消息在该数据库的主物理库和备物理库中均存储成功时,才认为待蓄洪消息蓄洪成功。

进一步地,当所述待蓄洪消息在支持该数据库的主物理库和备物理库两者中的任一物理库中存储失败,且在所述两者中另一物理库中存储成功时(此时,待蓄洪消息被认为在该数据库中蓄洪失败),还可以执行:在所述集合中,选择另一数据库存储所述待蓄洪消息;根据在所述另一数据库存储所述待蓄洪消息的结果,对所述另一物理库中存储成功的所述待蓄洪消息进行处理。更具体地,若在所述另一数据库中存储成功,则可以删除在所述另一物理库中存储成功的待蓄洪消息,以避免后续重复消费。

在本申请实施例中,对于已蓄洪的消息,在消息总线有能力处理时随时有可能处理,也即,已蓄洪的消息后续将会被消费。所述的“消费”可以包括:已蓄洪的消息被从消息蓄洪库中读取出来,被发送给目标消息客户端。

进一步地,对于已消费的消息,可以将其从数据库中删除,也可以将其状态标记为“已消费状态”暂不删除,如此,可以避免重复消费。

在实际应用中,无论在要消费时读取消息,还是在消费后标记已消费状态,都有可能执行失败,这些不稳定因素带来了一些麻烦,本申请的方案针对此也提供了相应的应对措施,有利于提高消息蓄洪及后续消费的可靠性,下面具体说明。

在本申请实施例中,对于步骤s203,所述完成对所述待蓄洪消息的蓄洪后,还可以执行:在要消费已蓄洪的所述待蓄洪消息时,从存储所述待蓄洪消息的数据库中读取所述待蓄洪消息,以用于消费;若读取失败,重试或者读取其他数据库中其他已蓄洪的消息。

进一步地,所述读取所述待蓄洪消息后(读取成功后),还可以执行:在所述待蓄洪消息被消费后,将支持所述数据库的主物理库和备物理库中存储的所述待蓄洪消息的状态标记为已消费状态;

若确定所述主物理库和备物理库均标记失败(可以由于物理库不可用,或标记相关逻辑执行错误等原因导致),执行用于防止所述待蓄洪消息被重复消费的预定措施;比如,预定措施可以是重试标记直至成功,或者删除所述主物理库和备物理库中保存的该待蓄洪消息,等等;

若确定所述主物理库和备物理库中有一物理库标记失败,另一物理库标记成功,不执行所述预定措施;需要说明的是,这种情况下不执行预定措施通常是前提的,即:确定所述集合中其他数据库中,不存在尚未被标记已消费的所述待蓄洪消息。而若确定存在,则可以认为该待蓄洪消息已消费过,无需重复消费,可以将其状态标记为已消费状态。

上面对本申请实施例提供的消息蓄洪方法进行了说明,基于同样的发明思路,本申请实施例还提供了对应的装置,如图5所示。

图5为本申请实施例提供的对应于图2的一种消息蓄洪装置的结构示意图,虚线表示可选的模块,所述装置包括:

获得模块501,获得待蓄洪消息;

确定模块502,确定可存储所述待蓄洪消息的数据库的集合,所述集合是通过是对多个数据库进行可用性检测得到的;

蓄洪模块503,通过在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,完成对所述待蓄洪消息的蓄洪。

可选地,所述装置还包括:

检测模块504,通过对多个数据库进行可用性检测得到所述集合;具体地,所述检测模块504按照如下方式,对多个数据库进行可用性检测得到所述集合:

定时对所述多个数据库中的每个数据库执行数据操作,操作成功时确定该数据库可用;

获得包含一个或多个被确定可用的数据库的所述集合。

可选地,所述数据操作包括数据查询操作。

可选地,所述蓄洪模块503在确定的所述集合中,选择至少一个数据库存储所述待蓄洪消息,具体包括:

所述蓄洪模块503在确定的所述集合中,随机选择至少一个数据库存储所述待蓄洪消息。

可选地,所述装置还包括:

再检测模块505,在所述蓄洪模块503选择至少一个数据库后存储所述待蓄洪消息前,再次检测所选择的数据库是否可用;若不可用,将其从所述集合中剔除,并在剔除后的所述集合中重新选择数据库。

可选地,所述数据库为逻辑库,每个所述逻辑库由至少一主一备两个物理库支持;

所述蓄洪模块503在选择了数据库后,所述存储所述待蓄洪消息,具体包括:

所述蓄洪模块503将所述待蓄洪消息存储在支持该数据库的主物理库和备物理库中。

可选地,所述确定模块502确定可存储所述待蓄洪消息的数据库的集合后,当确定所述集合中的任一数据库的主物理库或备物理库不可用时,将该数据库确定为不可用并从所述集合中剔除。

可选地,所述蓄洪模块503当所述待蓄洪消息在支持该数据库的主物理库和备物理库两者中的任一物理库中存储失败,且在所述两者中的另一物理库中存储成功时,在所述集合中,选择另一数据库存储所述待蓄洪消息,根据在所述另一数据库存储所述待蓄洪消息的结果,对所述另一物理库中存储成功的所述待蓄洪消息进行处理。

可选地,所述装置还包括:

消费模块506,在所述蓄洪模块503完成对所述待蓄洪消息的蓄洪后,在要消费已蓄洪的所述待蓄洪消息时,从存储所述待蓄洪消息的数据库中读取所述待蓄洪消息,以用于消费;若读取失败,重试或者读取其他数据库中其他已蓄洪的消息。

可选地,所述消费模块506读取所述待蓄洪消息后,且在所述待蓄洪消息被消费后,将支持所述数据库的主物理库和备物理库中存储的所述待蓄洪消息的状态标记为已消费状态;若确定所述主物理库和备物理库均标记失败,执行用于防止所述待蓄洪消息被重复消费的预定措施;若确定所述主物理库和备物理库中有一物理库标记失败,另一数据库标记成功,不执行所述预定措施。

可选地,所述消费模块506若确定所述主物理库和备物理库中有一物理库标记失败,另一数据库标记成功,在所述不执行所述预定措施前,确定所述集合中其他数据库中,不存在尚未被标记已消费的所述待蓄洪消息。

本申请实施例提供的装置与方法是一一对应的,因此,装置也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述对应装置的有益技术效果。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1