具体实施方式
在本申请实施例中,分布式系统中用于发送信息的服务器,先确定各待发送信息的标识,并将该标识发送至缓存区中,之后在根据标识发送各待发送信息时,每发送一条待发送信息便删除该缓存区中相应的标识,使得缓存区中存储的标识都是尚未发送过的待发送信息。当分布式系统切换服务器继续发送信息时,重新确定的服务器会再次确定需要发送的各待发送信息,并且同样确定当前各待发送信息的标识,在将该再次确定的标识发送至该缓存区后,对该缓存区中的各标识进行去重处理,使得该缓存区中不存在重复的标识,最后根据去重后的标识发送各待发送信息。可见本申请所述的方法,可以有效地避免待发送信息重复发送的情况,使得信息发送被延后的可能减少,提高了信息发送效率。
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的基于分布式环境的信息发送过程,具体包括以下步骤:
S101:分布式系统中的第一服务器确定各待发送信息的标识。
在本申请实施例中,由于是基于分布式系统的信息发送过程,所以该分布式系统首先要确定一个用于信息发送过程的服务器。通常情况下,该分布式系统为了保证任务执行的效率,在启动一个任务(如,本申请中所述的信息发送过程便可视为一个任务)时,会选择当前运行压力较小的服务器执行该任务。于是,在本身请中所述的第一服务器便是指该分布式系统选择的当前运行压力较小的、用于发送各待发送信息的服务器。
另外,在本申请中所述的待发送信息可以是查询信息,具体可以是向银行发送的对提现请求的结果进行查询的信息,本申请下面仅以待发送信息为向银行发送的对提现请求的结果进行查询的信息为例进行说明。
当该第一服务器被选择用于执行信息发送后,该第一服务器在确定各待发送信息时,可通过访问数据库确定各待发送信息。具体的,由于待发送信息为对提现请求的结果进行查询的信息,所以此时该第一服务器需要确定的是提现结果为未知的信息,并根据该提现结果未知的信息向对应的银行发送提现结果查询信息,所以该第一服务器可以在访问数据库时,可先确定一段时间内提现请求的提现结果为未知的提现请求,再根据各提现结果为未知的提现请求确定相应的查询提现请求的提现结果的信息,简称查询信息(即,待发送信息)。
进一步的,在本申请中所述的提现请求,一般由该分布式系统的服务器发送至银行,并根据该银行返回的提现结果确定该提现请求的结果。但是由于可能存在在发送提现请求后,没有接收到相应的提现结果的情况,所以此时该分布式系统可发送查询信息,以向该银行重复询问该提现请求的提现结果,直到确定该提现请求的提现结果为止。通过以上描述可知,即使发送过查询信息,该银行也可能不会返回相应的提现结果,需要该分布式系统反复发送查询信息,以尝试获得该提现请求的提现结果,所以本申请所述的查询信息存在两种情况:对该提现请求尚未发送过相应的查询信息的情况,以及对该提现请求已经发送过查询信息但是仍未得到提现结果的情况(即,待发送信息包括:尚未发送过的信息,以及已发送但是尚未接收到响应的信息)。
进一步的,由于每条待发送信息所包括的数据量较大,所以为了方便后续的操作,以减少该分布式系统中的数据交互、减轻该分布式系统的运行压力,该第一服务器还需要确定各待发送信息的标识。具体的,该第一服务器,针对每一个待发送信息,根据预设的命名规则,建立相应的标识,使得该分布式系统中的每一个服务器均可以根据该建立的标识确定对应的待发送信息。
例如,分布式系统确定当前由服务器A发送提现请求结果的查询信息,假设当前时间为北京时间17:00,则服务器A遍历数据库中的数据,并根据预设的条件:从当前时间开始往前30分钟之内(即,北京时间16:30~17:00这30分钟内)银行提现请求的结果为未知的信息,确定出100条待发送信息。根据预设的命名规则,确定各待发送信息的标识,进一步假设根据该命名规则确定的标识格式为:withdrawrsultquery_bankID_serialNo。其中,withdrawrsultquery表示该标识为对提现结果查询的信息、bankID表示查询发往的银行的标识、serialNo表示该提现请求的序列号,并且银行标识如表1所示。
银行名称 |
银行a |
银行b |
银行c |
银行d |
银行e |
bankID |
I |
II |
III |
IV |
V |
表1
再次假设,该服务器A确定的待发送信息中的提现请求的序列号为0~99,且均是发往银行b的。则该服务器A最终确定的各待发送信息的标识为:withdrawrsultquery_II_0~withdrawrsultquery_II_99。
需要说明的是,由于分布式系统是为了应对单一设备和软件的性能不能满足任务量的大量增长情形下的数据处理的需求而产生的技术,所以可见该分布式系统中可能会出现大量的待发送信息,而现有技术通常选用数据库来存储大量数据,所以该第一服务器可以通过访问数据库来确定各待发送信息。当然,第一服务器也可以通过其他方式确定各待发送信息,本申请并不做具体限定。
S102:所述第一服务器将所述标识发送到缓存区存储。
在本申请实施例中,该第一服务器在确定了各待发送信息的标识后,由于存在该第一服务器未能将全部待发送信息发送的情况,所以为了后续分布式系统在切换至第二服务器继续发送待发送信息时,该第二服务器可以确定该第一服务器发送了哪些待发送信息、还有哪些待发送信息未发送,该第一服务器还可将各待发送信息的标识发送至缓存区存储,以便该第二服务器可以通过访问该缓存区确定该第一服务器发送各待发送信息的情况。
另外,该缓存区可以是该第一服务器本地的缓存区、也可是该分布式系统的独立缓存区,只要后续步骤中该第二服务器可以访问该缓存区即可。
需要说明的是,一般为了提高发送效率,该分布式系统会有一套排队规则,使各待发送信息在按照该排队规则进行排序后的待发送信息队列的发送效率最高,但是,排队规则是什么、如何进行排队,本申请并不做具体限定。在本申请中,可以视为在该第一服务器将各标识发送至缓存区存储时,各标识是已经通过排队规则进行排列后,具有先后顺序的标识队列。
继续沿用上例,该服务器A将确定的100条待发送信息的标识发送至该分布式系统的缓存区中存储,并且各标识按照自身的提现请求的序列号由大到小的顺序排列,组成由100标识组成的标识队列。
S103:所述第一服务器根据缓存区中存储的标识,发送各待发送信息。
在本申请实施例中,由于接收各待发送信息的接收端也存在繁忙和空闲的状态,所以若是该第一服务器在该接收端繁忙时(即,接收端运行压力大时)向该接收端发送待发送信息的话,就有可能出现由于接收端繁忙而导致待发送信息被积压在接收端而没有被处理的情况。并且,若是该第一服务器发送信息的频率,超出了该接收端的处理信息的频率上限,则同样也会造成待发送信息在接收端的积压。于是,该第一服务器还可在发送各待发送信息之前,根据各待发送信息,确定接收各待发送信息的接收端(即,银行的服务器),并向该接收端发送询问信息,以便该第一服务器可以根据该接收端返回的应答信息,确定向该接收端发送各待发送信息的时间段,以及该待发送信息的发送频率,并根据该时间段和发送频率,发送各待发送信息。
另外,由于本申请中所述的提现请求可能是对不同银行发出的提现请求,所以各待发送信息的接收端就有可能不止一个,并且是不同银行的服务器。显然不同银行的服务器的空闲时间段很难完全一致,即,该第一服务器很难通过多个接收端返回的应答信息确定统一的发送各待发送信息的时间段,所以在本申请中,该第一服务器确定的各待发送信息的接收端可相同,即,各待发送信息均发送向同一个接收端,而该第一服务器也仅向该接收端发送询问信息。当然,该分布式系统也可以选择多个服务器分别执行对不同接收端的信息发送任务,则,即使每一个服务器均只负责向一个接收端发送信息,也可满足该分布式系统向多个接收端发送信息的需求。
进一步的,由于分布式系统存在切换服务器执行同一任务的模式,所以为了使切换后的服务器不会重复发送待发送信息,该第一服务器需要根据缓存区中存储的各标识发送相应待发送信息,并且,每发送一条待发送信息,则删除该缓存区中该已发送的待发送信息对应的标识。
继续沿用上例,由于服务器A确定各查询信息均是发送向银行b的,所以该服务器A需要向该银行b的服务器发送询问信息,假设该服务器A根据接收到该银行b服务器返回的应答信息,确定向该银行b的服务器发送各待发送信息信息的时间段为北京时间17:30~17:45、发送该待发送信息的频率为18秒一次,则该服务器A在北京时间17:30开始,以每18秒一次的频率向该银行b的服务器发送提现请求结果查询信息,并且删除该缓存区中相应的标识。如,北京时间17:30:00该服务器A发送标识为withdrawrsultquery_II_0的提现请求结果查询信息、北京时间17:30:18该服务器A发送标识为withdrawrsultquery_II_1的提现请求结果查询信息等等,直到北京时间17:45为止。则此时,该服务器一共发送了标识为送标识为withdrawrsultquery_II_0~withdrawrsultquery_II_49的50条提现请求结果查询信息,该缓存区中仍然剩余50个标识(即,标识为withdrawrsultquery_II_50~withdrawrsultquery_II_99的50个标识)。
S104:当切换到所述分布式系统中的第二服务器发送信息时,所述第二服务器确定各待发送信息的标识。
在本申请实施例中,该分布式系统为了保证信息的发送效率,所以当该第一服务器发送各待发送信息的时间超出在步骤S104中所述时间段时,切换到所述分布式系统中的第二服务器发送信息,或者当该第一服务器自身的状态满足预设条件时,切换到所述分布式系统中的第二服务器发送信息。
其中,在本申请中所述的发送各待发送信息的时间超出时间段,即接收端达到处理能力的上限,则继续发送待发送信息可能会造成待发送信息在接收端的积压,所以此时该分布式系统需要切换服务器继续如该第一服务器在步骤S101~步骤S103中的发送信息过程。
在本申请中所述的该第一服务器自身的状态满足预设条件,即该第一服务器达到了处理能力的上限(如,该第一服务器的运行压力达到预设的阈值),则可以确定该第一服务器不再适合发送各待发送信息,所以此时该分布式系统需要切换到运行压力较小的服务器继续如该第一服务器在步骤S101~步骤S103中的发送信息过程。
另外,由于在该第一服务器发送各待发送信息的同时,可能又新出现了其他需要发送的信息(即,新出现的待发送信息),则为了使该新出现的待发送信息可以较快的被发送,该分布式系统也可以周期性的切换服务器,以使得新出现的待发送信息无需长时间等待,便会被该分布式系统中的服务器确定标识,并且该缓存区中也会被及时的添入该标识。
进一步的,该第二服务器作为该分布式系统当前确定的用于发送信息的服务器,仍然需要如该第一服务器在步骤S101一样,通过访问该数据库,确定一段时间内提现请求的结果为未知的提现请求,再根据各提现请求结果为未知的提现请求确定相应的查询信息,并且该第二服务器根据与该第一服务器采用的命名规则相同的命名规则确定各待发送信息的标识。并且由于该标识是为了使得该分布式系统中的服务器均可根据同一个标识确定相同的信息,所以在本申请中,该分布式系统中不同服务器根据同一提现请求确定的标识是一样的。
需要说明的是,如在步骤S101中所述的原因,该第二服务器确定各待发送信息中,存在该第一服务器已发送但尚未接收到响应的信息,以及该第一服务器尚未发送过的信息。
继续沿用上例,服务器A根据缓存区中的各标识发送各查询信息直到北京时间17:45,此时由于发送时间已经超出银行b服务器接收信息的时间段,所以该分布式系统在北京时间17:45切换至运行压力较小的第二服务器(即,服务器B)继续发送信息。假设,由该服务器A发送的50条待查询信息中,前25条在发送后得到了该银行b的服务器返回的提现结果,后25条未得到银行b的服务器返回的提现结果(即,未接收到响应),且在北京时间17:30~17:45之间没有新增加的提现请求。则,该服务器B确定的查询信息标识(即,待发送信息的标识)为:withdrawrsultquery_II_25~withdrawrsultquery_II_49和withdrawrsultquery_II_49~withdrawrsultquery_II_99,一共75个标识,其中,withdrawrsultquery_II_25~withdrawrsultquery_II_49所对应的查询信息是需要重新发送的,withdrawrsultquery_II_49~withdrawrsultquery_II_99所对应的查询信息是尚未发送过的。
S105:所述第二服务器将所述第二服务器自身确定的标识添加到缓存区中,并将所述缓存区中保存的标识进行去重处理。
在本申请实施例中,该第二服务器若要继续发送信息,则首先需要将在步骤S104中确定的标识发送至该缓存区中,其中该缓存区与在步骤S102中所述的缓存区为同一个。于是当该第二服务器将自身确定的标识添加到缓存区后,为了避免重复发送各待发送信息,所以该第二服务器还需要对该缓存区中的标识进行去重处理。
具体的,当该第二服务器将标识发送至该缓存区存储后,该第二服务器需要遍历该缓存区中的标识,并将重复出现过的标识进行去重处理,使得该缓存区中的标识均为唯一的。
需要说明的是,在步骤S102中该第一服务器在将各标识发送至缓存区存储时,实际上也同样需要对该缓存区中的标识进行去重处理。
继续沿用上例,由于该服务器B在步骤S104中确定了75个标识,于是当该服务器器B发送自身确定的标识只缓存区后,该缓存区内一共存储有125个标识,其中包括:该服务器A发送的50条标识(即,withdrawrsultquery_II_49~withdrawrsultquery_II_99)、以及该服务器B发送的75条标识(即,withdrawrsultquery_II_25~withdrawrsultquery_II_49和withdrawrsultquery_II_49~withdrawrsultquery_II_99)。可见此时,该缓存区中出现了50条重复的标识,于是当该服务器B遍历该缓存区进行去重处理后,该缓存区中的标识为:withdrawrsultquery_II_49~withdrawrsultquery_II_99和withdrawrsultquery_II_25~withdrawrsultquery_II_49,所有标识在该缓存区中都是唯一的。
S106:所述第二服务器根据缓存区中去重处理后的标识,发送各待发送信息。
在本申请实施例中,当该第二服务器对该缓存区中的标识进行去重处理后,由于在步骤S103所述的原因,该第二服务器还需要根据各待发送信息,确定接收各待发送信息的接收端,再向该接收端发送询问信息,之后根据该接收端返回的应答信息,确定向该接收端发送各待发送信息的时间段,以及待发送信息的发送频率,最后根据该缓存区中去重处理后的标识、该时间段和发送频率,发送各待发送信息。
另外,若该第二服务器在该分布式系统切换服务器时,仍然未发送完各待发送信息,则该分布式系统会如步骤S104~步骤S106中所述的方法,先切换至其他服务器确定各待发送信息的标识,该服务器再将自身确定的标识添加到缓存区中,之后将该缓存区中保存的标识进行去重处理,最后该服务器根据缓存区中去重处理后的标识,继续发送各待发送信息,直到将全部待发送信息发送为止。
通过图1所示的基于分布式环境的信息发送方法,该分布式系统中用于发送信息的服务器均根据同一命名规则确定各待发送信息的标识,在将各标识发送至缓存区中存储后,还需对该缓存区中的标识进行去重处理,并且该用于发送信息的服务器在根据该缓存区中的标识发送各待发送信息时,每发送一条待发送信息便删除该缓存区中相应的标识,使得该分布式系统不论切换至哪个服务器发送信息,该切换后用于发送信息的服务器均可以通过该缓存区,确定之前用于发送信息的服务器发送了哪些信息、仍有哪些信息未发送。相对于现有方法,在本申请提供的方法中,由于当前用于发送信息的服务器还会对缓存区中的标识进行去重处理,所以可以有效避免信息重复发送的情况。进一步的,当出现信息已发送但是没有响应的情况是,该分布式系统在切换服务器后,该切换至的服务器可再次确定需要重复发送的信息,实现了信息的重复发送的目的。通过本方法可以有效地提高分布式系统的信息发送效率。
另外,通过本申请实施例提供的方法,该分布式系统不仅可以发送提现请求的提现结果的查询信息,还可以发送其他信息,如,话费查询信息、办理业务结果的查询信息等。
进一步的,为了提高信息发送效率以及接受端处理信息的效率,在本请中当该分布式系统中的服务器向接收端发送询问信息时,该询问信息中还可以携带待发送信息的数量信息,以使得该接收端可以通过待发送信息的数量,确定更加合理的时间段,则最终使得该服务器确定向该接收端发送各待发送信息的时间段更加合理。
继续沿用上例,假设在北京时间17:30,该服务器A向银行b的服务器发送了询问信息,其中携带有预计发送的待发送信息的数量信息(即,100条)。继续假设此时该银行b的服务器可以分别确定在北京时间17:31~17:34和北京时间17:45~18:00,分别有3分钟和15分钟的时间段可以用于接收信息。可见,若该服务器A在北京时间17:31~17:34执行发送信息任务的话,该银行b的服务器在只接收10条待发送信息时,该分布式系统就需要切换至服务器B继续发送信息,使得服务器的切换更加繁琐,分布式系统的运行效率降低,使得信息发送的效率也同步降低。而若该服务器A在北京时间17:45~18:00执行发送信息任务的话,该银行b的服务器便可一次接收处理50条待发送信息,该分布式系统的服务器切换不至于太过频繁,使得该发送信息任务的效率更高。
更进一步的,若该分布式系统中的服务器确定的待发送信息的数量太少时,该服务器继续执行待发送信息的发送任务就会使得服务器的运行效率很低,即,不值得为了少量的待发送信息执行一次信息发送任务。所以,在本申请中,为了使信息发送的效率更高,在该分布式系统中的服务器确定各待发送信息后,该服务器还可以判断各待发送信息的数量是否达到预设的阈值,若是,则继续执行发送信息的任务,若否,则不再执行发送信息的任务。
继续沿用上例,假设在步骤S104中,当切换至服务器B发送信息时,该服务器B确定的各待发送信息的数量为2,即,只有两个待发送信息,而预设的阈值为15,则该服务器B判断各待发送信息的数量未达到预设的阈值,不再执行信息发送任务,而等待该分布式系统分配其他任务。而这2个未发送的待发送信息,则可等待至下一次该分布式系统的服务器执行信息发送任务时,再被发送至银行b的服务器(即,接收端)。
基于图1所示的基于分布式环境的信息发送过程,本申请实施例还提供了一种基于分布式环境的信息发送装置,如图2所示。
图2是本申请实施例提供一种基于分布式环境的信息发送装置的结构示意图,具体包括:
标识模块201,用于确定各待发送信息的标识;
缓存去重模块202,用于将所述标识发送到缓存区存储,并将所述缓存区中保存的标识进行去重处理;
发送模块203,用于根据缓存区中存储的标识,发送各待发送信息,其中,每发送一个待发送信息,则删除所述缓存区中发送的待发送信息对应的标识。
所述待发送信息包括:尚未发送过的信息,以及已发送但尚未接收到响应的信息。
在本装置中,接收所述各待发送信息的接收端相同;
所述发送模块203还用于,在发送各待发送信息之前,根据各待发送信息,确定接收各待发送信息的接收端,向所述接收端发送询问信息,根据所述接收端返回的应答信息,确定向所述接收端发送各待发送信息的时间段,以及所述待发送信息的发送频率;在发送各待发送信息时,根据所述时间段和发送频率,发送各待发送信息。
所述装置还包括:
监测模块204,用于当监测到所述装置发送各待发送信息的时间超出所述时间段时,或者,当监测到所述装置自身的状态满足预设条件时,向所述装置所在的分布式系统中的第二服务器发送切换消息,以使所述分布式系统中的第二服务器发送信息。
所述待发送信息为对提现请求进行查询的信息。
具体的,上述如图2所示的基于分布式环境的信息发送装置可以位于分布式系统的服务器中。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。