业务请求处理方法和装置的制造方法_2

文档序号:8226139阅读:来源:国知局
,为业务请求重新分配一个当前状态为正常运行的数据库。
[0044]本领域技术人员可以根据实际需求设置中间件判断业务请求是否在执行过程中的具体判断规则,例如:为业务请求的执行过程设置一个时间周期,在该时间周期内中间件都可判定业务请求处于执行过程中。
[0045]中间判断处理业务请求的数据库发生故障的具体判断方式,也可以由本领域技术人员根据实际需求进行设置。优选地,将判断方式设置为:中间件接收到与数据库之间连接中断的消息,则判定该数据库发生了故障。
[0046]步骤S108:中间件将业务请求发送至重新分配的数据库进行处理。
[0047]由于重新分配的数据库能够正常运行,因此,在接收到业务请求时能够对该业务请求进行处理,返回相应的响应结果。
[0048]本实施例中对于中间件将业务请求发送至重新分配的数据库的具体过程不作具体限制。优选地,中间件选择一个与该数据库之间的空闲连接来发送该业务请求。
[0049]在针对处理集群中的数据库发生故障时相应的处理方案中,本领域技术目前多是针对数据库未执行的业务请求分配数据库的方案,而对于发生故障的数据库在故障时正在处理的业务请求的数据库再分配方案并未涉及。本实施例中记载的方法,正是一种解决数据库故障时正在处理的业务请求的数据库再分配的有效方法。
[0050]通过本实施例提供的业务请求处理方法,在应用和多个数据库之间设置中间件,由中间件拦截应用向数据库发送的业务请求,再由中间件将拦截到的业务请求发送至数据库进行处理,并存储该业务请求。这样,当中间件判断在该业务请求的执行过程中,处理该业务请求的数据库发生故障时,中间件可以为该业务请求重新分配一个正常运行的数据库来处理该业务请求。通过本实施例提供的业务请求处理方法,数据库发生故障时已进行处理但尚未处理完的业务请求可以由中间件重新分配正常运行的数据库来处理,一方面,由于业务请求被重新分配到集群中的数据库进行处理,因此,集群不会向应用返回业务请求失败的消息,相应地则不会影响用户的使用体验。另一方面,由于应用未接收到业务请求失败的消息,因此不会重复发送该业务请求,不会增加应用的负担。而中间件在判断出处理业务请求的数据发生故障时,可以及时将业务请求重新发送至集群中的其他正常运行的数据库,相较于现有的方案中需要向应用返回业务请求失败的消息后再由应用重新发送的业务请求而言能够缩短业务处理时间,因此,能够提升业务请求的处理效率。
[0051]实施例三
[0052]参照图3,示出了本发明实施例三的一种业务请求处理方法的步骤流程示意图。
[0053]本实施例的业务请求处理方法具体包括以下步骤:
[0054]步骤S202:中间件根据多个数据库可支持的连接的信息,生成连接池。
[0055]其中,中间件设置于应用和多个数据库之间。连接池用于管理多个数据库中各数据库可支持的连接。
[0056]需要说明的是,中间件可以为每个数据库分别建立一个连接池,也可以为多个数据库建立一个连接池。
[0057]中间件根据数据库可支持的连接的信息,生成连接池的一种可选的生成方式如下:中间件根据数据库可支持的连接的信息确定数据库可支持的连接上限;中间件在连接池中设置相同的数量的连接,并存储数据库可支持的连接的信息,以便中间件在建立与数据库之间的连接时,从连接池中选择一个空闲连接根据数据库可支持的连接的信息建立与数据库之间的连接。例如:数据库可支持的连接上限为50个连接,那么,中间件在连接池中建立50个连接,在连接池中存储数据库可支持的50个连接对应的连接信息。
[0058]采用上述优选的实现方式重复在中间件中为多个数据库分别建立连接池,即可完成中间件根据多个数据库可支持的连接的信息,生成连接池的过程。
[0059]中间件根据多个数据库可支持的连接的信息,生成连接池的另一种可选的生成方式如下:中间件根据各数据库可支持的连接的信息确定各数据库可支持的连接上限,在中间件中存储各数据库可支持的连接的连接信息;中间件在连接池中分别为各数据库设置与各数据库可支持的连接上限相同的数量的连接;并将连接池中分配给各数据库的连接进行标识以进行区分。
[0060]例如:多个数据库为两个分别标记为第一数据库与第二数据库的数据库,中间件根据第一数据库可支持的连接信息确定第一数据库可支持的连接的上限为50个连接,根据第二数据库可支持的连接信息确定第一数据库可支持的连接的上限为40个连接;中间件在连接池中建立90个连接;同时存储第一数据与第二数据库的可支持连接的连接信息;中间件将连接池中的50个连接标识为用于与第一数据库建立连接使用,将连接池中剩余的40个连接标记为用于与第二数据库之间建立连接使用。
[0061]中间件根据多个数据库可支持的连接的信息,生成连接池后,可以根据数据库的当前状态,将连接池中对应于各个数据库的各连接的连接状态设置为可用状态或不可用状态。优选地,当中间件判断数据库发生故障时,将连接池中对应于发生故障的数据库的所有连接的连接状态设置为不可用状态,当判断发生故障的数据库恢复正常运行时,将连接池中对应于恢复正常运行的数据库的所有连接的连接状态由不可用状态修改为可用状态。
[0062]例如:在中间件的连接池中为第一数据库建立50个连接,为第二数据库建立40个连接。当中间件判断第一数据库发生故障如:数据库宕机时,中间件将连接池中建立的与第一数据库的50个连接的连接状态设置为不可用状态,而另外的建立的与第二数据库之间的连接的连接状态仍为可用状态。通过根据数据库的当前状态设置连接池中与数据库对应的连接的连接状态,当中间件为业务请求分配连接时,则可通过判断连接池中的建立的与数据库之间的连接的当前状态来确定数据库是否发生了故障。
[0063]步骤S204:中间件拦截应用向数据库发送的业务请求。
[0064]优选地,中间件在拦截到应用向数据库发送的业务请求后,向应用返回业务请求被接受的消息。通过向应用返回业务请求被接受的消息,使得应用能够确认本次的业务请求已被成功受理,避免应用不断向数据库或中间件发送询问消息,减少应用的操作负担以及网络的信息交互负担。
[0065]步骤S206:中间件将业务请求发送至多个数据库中的一个当前状态为正常运行的数据库进行处理,并存储发送至数据库的该业务请求。
[0066]一种优选的中间件将业务请求发送至多个数据库中的一个当前状态为正常运行的数据库进行处理的方式为:中间件从多个当前状态为正常运行的数据库中选择一个数据库,获取自身的连接池中对应于选择的数据库的各个连接的状态信息;根据各个连接的状态信息,从至少一个可用连接中选择一个可用连接;将选择的可用连接的状态从可用状态更改为不可用状态,并使用选择的连接将业务请求发送至选择的数据库进行处理。
[0067]上述优选的实现方式中,中间件从多个当前状态为正常运行的数据库中选择一个数据库,目的是保证业务请求能够发送至正常运行的数据库。中间件从被选择的数据库在连接池中对应的连接中选择一个可用连接,目的是保证业务请求能够成功发送至该数据库。而将选择的可用连接的连接状态从可用状态更改为不可用状态,可以使中间件能够通过连接的连接状态快速高效地确定可用连接,从而快速高效为请求分配连接资源。假设,连接池中的某个连接已被占用,但是连接的状态仍为可用状态,这样,当应用需要选择连接发送业务请求时由于不能获知该连接被占用,仍可能调用该连接发送业务请求,将会导致业务请求发送失败。
[0068]需要说明的是,本领域技术人员可以根据实际需求设置中间件存储业务请求的具体方式。具体实现方式包括但不限于:第一种,将业务请求按照发送至数据库的时间进行分类存储,设置每5分钟为一个时间段,将5分钟内发送至数据库的所有业务请求存储在一块存储空间中;第二种,为每个应用分配一块存储空间,将拦截到的业务请求存储到发送该业务请求的应用对应的存储空间中;第三种,将发送至数据库的所有业务请求存储在一块存储空间中。
[0069]步骤S208:当中间件判断在业务请求的执行过程中,处理业务请求的数据库发生故障时,为业务请求重新分配一个当前状态为正常运行的数据库。
[0070]中间件判断在业务请求的执行过程中,处理业务请求的数据库发生故障的具体方式包括但不限于:
[0071]第一种,中间件在已将业务请求发送至数据库进行处理后,接收到与数据库之间连接中断的消息之前,未拦截到所述数据库返回的、对业务请求的响应结果,则中间件确定在业务请求的执行过程中,处理业务请求的数据库发生故障。
[0072]第二种,中间件在将业务请求发送至数据库进行处理后,在预定时间内未拦截到数据库返回的、对业务请求的响应结果,则确定在业务请求的执行过程中,处理业务请求的数据库发生故障。
[0073]其中,预定时间的具体设定可以由本领域技术人员根据实际需求进行设置,例如:将预定时间设置成业务请求发出后5秒。当然还可以是其他值,如10秒、8秒等。
[0074]中间件为业务请求重新分配一个当前状态为正常运行的数据库时,可以获取多个数据库的当前状态;根据获取的多个数据库的当前状态,确定当前状态为正常运行的至少一个数据库;从至少一个当前状态为正常运行的数据库中选择一个数据库。
[0075]对于数据库的当前状态,可以在连接池中标记各连接的连接状态的同时标记各数据库的当前状态,也可以在中间件中集中记录各数据库的当前状态。相应地,在获取数据库的当前状态时,中间件可以从连接池中获取各数据库的当前状态,可以从集中的存储的各数据库当前状态的相应位置获取该数据。
[0076]步骤S210:中间件将接池中对应于发生故障的该数据库的所有连接的连接状态设置为不可用状态。
[0077]需要说明的是,对于发生故障的该数据库的所有连接的连接状态设置的步骤,并不局限于在为业务请求重新分配一个当前状态为正常运行的数据库之后执行,该步骤可以在判断数据库发生故障后的任意时刻执行。
[0078]步骤S212:中间件获取连接池中对应于选择的数据库的各个连接的状态信息。
[0079]在中间件自身的连接池中为被选择的数据库分配有多个连接,而这些连接中有些可能已被发送至该数据库的业务请求占用,此时为不可用状态;而有些可能是处于空闲,此时为可用状态,而中间件仅能够通过可用连接将业务请求发送至该数据库,因此,需要获取各个连接的状态信息,来选择一个可用连接。
[0080]优选地,将被业务请求占用的连接的连接状态标记为不可用状态,将空闲的连接的连接状态
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1