发明内容
本申请实施例的目的是提供一种服务处理方法及装置,以提高计算机设备的服务处理效率。
为达到上述目的,本申请实施例是这样实现的:
本申请实施例提供了一种服务处理方法,包括:
为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
本申请实施例还提供了一种服务处理方法,包括:
为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
本申请实施例还提供了一种服务处理装置,包括:
第一建立模块,用于为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
第一确定模块,用于在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
第一熔断模块,用于熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
本申请实施例还提供了一种服务处理装置,包括:
第二建立模块,用于为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
第二确定模块,用于在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
第二熔断模块,用于熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
结果发送模块,用于获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
本申请实施例还提供了一种服务处理设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器:
为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
本申请实施例还提供了一种服务处理设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器:
为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
本申请实施例还提供了一种存储介质,用于存储计算机可执行指令,所述计算机可执行指令在被执行时实现以下流程:
为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
本申请实施例还提供了一种存储介质,用于存储计算机可执行指令,所述计算机可执行指令在被执行时实现以下流程:
为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
本实施例中,问题单元为引起第一线程池处于指定阻塞状态的数据存储单元,通过熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够使得基于问题单元执行线程时,不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为提高计算机设备的服务处理效率,本申请实施例提供了一种服务处理方法及装置、下面结合实施例进行详细介绍。
图1为本申请一实施例提供的服务处理方法的流程示意图,该方法应用于服务器端,可以由服务器执行,如图1所示,该方法包括:
步骤S102,为每个待处理的服务分别建立对应的线程池;其中,线程池中的线程基于多个数据存储单元被执行;
步骤S104,在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在第一线程池对应的多个数据存储单元中,确定引起第一线程池处于指定阻塞状态的问题单元;
步骤S106,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息。
本实施例中,问题单元为引起第一线程池处于指定阻塞状态的数据存储单元,通过熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够使得基于问题单元执行线程时,不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
本申请实施例中,为每个待处理的服务建立一个对应的线程池,该线程池用于实现对应的服务,且每个线程池中的线程均基于多个数据存储单元被执行。
图2为本申请一实施例提供的线程池和数据存储单元的对应关系示意图,如图2所示,以第一线程池为例,第一线程池对应A、B、C等多个数据存储单元,第一线程池中的线程基于该多个数据存储单元被执行具体为:在执行第一线程池中的线程的过程中,访问A、B、C等多个数据存储单元中存储的数据,以执行第一线程池中的线程。
本实施例中,为每个服务建立一个对应的线程池,能够实现各个服务之间的资源隔离,使得每个服务的处理过程不会影响到其他服务的处理过程。其中,服务的处理过程包括:服务对应的线程池中的线程被执行的过程。
上述步骤S104中,确定第一线程池处于指定阻塞状态可以通过以下方式a、b中的一种实现:
a、监测第一线程池的等待队列长度超过第一设定长度的时长是否达到第一设定时长,若达到,则确定第一线程池处于指定阻塞状态;
第一线程池具有对应的线程池容量,当线程数量超过第一线程池对应的线程池容量时,多余的线程就会进入第一线程池的等待队列中,若等待队列的长度长时间处于过长的状态,则说明处于等待状态的线程过多,第一线程池处于异常阻塞状态。基于此,本实施例中,监测第一线程池的等待队列长度超过第一设定长度的时长是否达到第一设定时长,若达到,则确定第一线程池处于指定阻塞状态,否则,确定第一线程池未处于指定阻塞状态。比如,监测第一线程池的等待队列长度超过50的时长是否达到10秒,若达到,则确定第一线程池处于指定阻塞状态。
b、监测第一线程池的等待队列长度超过第二设定长度的时长是否达到第二设定时长,若达到,则对第一线程池进行扩容处理,并监测扩容后的第一线程池的等待队列长度超过第三设定长度的时长是否达到第三设定时长,若到达,则确定第一线程池处于指定阻塞状态。
该方式中,监测第一线程池的等待队列长度超过第二设定长度的时长是否达到第二设定时长,若未达到第二设定时长,则不做处理,若达到第二时长,则对第一线程池进行扩容处理,以增大第一线程池对应的线程池容量,在扩容处理后,还监测扩容后的第一线程池的等待队列长度超过第三设定长度的时长是否达到第三设定时长,若到达,则确定第一线程池处于指定阻塞状态,否则,确定第一线程池未处于指定阻塞状态。
本实施例中,进行扩容处理时,增加的线程池容量可以依照实际情况确定,可以将第一线程池扩容到所允许的最大容量。第一设定长度、第二设定长度和第三设定长度可以相同可以不同,第一设定时长、第二设定时长和第三设定时长可以相同可以不同。
上述方式b中,通过对第一线程池进行扩容处理,能够避免服务器偶尔响应变慢对线程处理效率的影响,缓解线程池的线程等待情况,使得等待中的线程更快地得到处理,提高线程池的线程执行效率。
上述步骤S104中,在第一线程池对应的多个数据存储单元中,确定引起第一线程池处于指定阻塞状态的问题单元,具体为:
(1)确定第一线程池中当前被执行的线程;
(2)在第一线程池对应的多个数据存储单元中,将当前被执行的线程对应的数据存储单元,确定为引起第一线程池处于指定阻塞状态的问题单元。
通常情况下,当第一线程池处于指定阻塞状态时,说明第一线程池中当前被执行的线程出现了执行时间过长的问题,导致第一线程池阻塞。由于在执行第一线程池中的线程的过程中,需要访问对应的多个数据存储单元中的数据,以执行线程,因此能够理解,通常是执行当前被执行的线程的过程中,需要访问的数据存储单元出现了问题,数据存储单元响应变慢,导致第一线程池阻塞。基于此,本实施例中,首先确定第一线程池中当前被执行的线程,然后在第一线程池对应的多个数据存储单元中,确定当前被执行的线程对应的数据存储单元,当前被执行的线程对应的数据存储单元,即为,执行当前被执行的线程的过程中需要访问的数据存储单元,最后将当前被执行的线程对应的数据存储单元确定为问题单元。当当前被执行的线程对应的数据存储单元为多个时,问题单元也相应为多个。
以图2为例,第一线程池中当前正在被执行的线程为线程aa,执行线程aa的过程中,需要访问数据存储单元A中的数据,即,数据存储单元A为线程aa对应的数据存储单元,由于数据存储单元A出现问题,响应变慢,导致线程aa长时间未执行完成,引起第一线程池进入指定阻塞状态,则能够确定,数据存储单元A即为问题单元。
上述步骤S106中,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,具体地,设置问题单元的访问状态为不可访问状态,以熔断对问题单元的访问,熔断对问题单元的访问后,服务器不再对问题单元进行访问。基于问题单元的线程指的是需要访问问题单元中的数据被执行的线程,设置该线程的线程执行结果信息为服务熔断信息,服务熔断信息为表示服务被熔断的信息,如“服务超时”或“服务不可用”等。通过步骤S106,在基于问题单元执行线程时,能够不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
图3为本申请另一实施例提供的服务处理方法的流程示意图,该方法应用于服务器端,可以由服务器执行,如图3所示,本实施例中的方法在图1的基础上,还包括:
步骤S1081,在第一线程池中的线程被执行的过程中,确定第一线程的线程执行结果信息为服务熔断信息并发送出去,以及获取第二线程的线程执行结果信息并发送出去。
其中,第一线程为第一线程池中基于问题单元被执行的线程,第二线程为第一线程池中基于其他单元被执行的线程,其他单元为上述第一线程池对应的多个数据存储单元中除问题单元以外的单元,服务熔断信息和第二线程的线程执行结果信息不同。
具体地,当第一线程池中的第一线程基于问题单元被执行时,由于熔断了对问题单元的访问,因此无法对问题单元进行访问,并且由于设置了基于问题单元的线程执行结果信息为服务熔断信息,因此第一线程的线程执行结果信息为服务熔断信息。当第一线程池中的第二线程被执行时,由于没有熔断对对应的数据存储单元的访问,因此可以对对应的数据存储单元进行访问,以得到线程执行结果信息,由于第二线程对应的数据存储单元的访问没有被熔断,因此第二线程的线程执行结果信息不为服务熔断信息。
本实施例中,由于设置基于问题单元的线程执行结果信息为服务熔断信息,因此能够排除问题单元的干扰,持续执行第一线程池内的各个线程,并将各个线程的线程执行结果信息发送出去,从而缓解线程池的阻塞状态,提高线程执行效率,进而提高服务处理效率。并且,将服务熔断信息作为线程执行结果信息发送出去,能够使得服务请求设备如客户端获知服务被熔断,以起到服务熔断的告知作用。
图4为本申请另一实施例提供的服务处理方法的流程示意图,该方法应用于服务器端,可以由服务器执行,如图4所示,本实施例中的方法在图1的基础上,还包括:
步骤S1082,在问题单元对应的问题因素消除后,恢复对问题单元的访问。
一个具体的实施例中,步骤S1082在步骤S1081之后执行,即各步骤之间的顺序为步骤S102——步骤S104——步骤S106——步骤S1081——步骤S1082。当然,步骤S1082也可以在步骤S1081之前执行,本实施例不做限制。
能够理解,问题单元可能存在故障,导致对问题单元的访问响应时间过长,引起线程池阻塞,基于此,在熔断对问题单元的访问后,可以采用自动或人工的方式对问题单元对应的问题因素进行排查,并在问题单元对应的问题因素消除后,恢复对问题单元的访问,从而使得基于问题单元被执行的线程得到正常执行,正常执行指的是,以访问问题单元的形式执行线程。其中,问题单元对应的问题因素包括但不限于:软件程序故障、硬件故障、病毒感染等。
本实施例中的服务处理方法能够应用在聚合服务场景下,当应用在聚合服务场景下时,步骤S102中所列的各个待处理的服务共同组成针对服务请求设备的聚合服务。图5为本申请一实施例提供的聚合服务的场景示意图,如图5所示,聚合服务场景中,服务器中设置有多个线程池,每个线程池对应一个服务,每个线程池各自对应有多个数据存储单元,每个线程池中的线程基于各自对应的多个数据存储单元被执行,以实现各自对应的服务。其中,各个服务共同组成针对服务请求设备的聚合服务,上述第一线程池为上述多个线程池中的一个,服务请求设备可以为客户端。
具体地,聚合服务指的是由多个服务共同组成、每个服务对应的服务请求由服务请求设备一同发出,并由服务器一同向服务请求设备返回每个服务请求对应的处理结果信息的服务。服务器在对聚合服务进行处理时,服务器根据每个服务请求进行对应处理,得到对应的处理结果信息,服务器在获取到每个服务请求对应的处理结果信息后,再将多个处理结果信息一同返回至服务请求设备。
举例,聚合服务包括余额查询服务、基金查询服务和股票查询服务,客户端在接收到用户的查询操作后,一同向服务器发送余额查询请求、股票查询请求和基金查询请求,服务器根据上述请求,利用每个服务对应的线程池和数据存储单元,获取用户的余额数据、股票数据和基金数据,并将余额数据、股票数据和基金数据一同返回至客户端。
以获取余额数据为例,服务器根据余额查询请求,建立余额查询线程并投入对应的线程池中,服务器还利用线程池执行该线程,以从对应的数据存储单元中查询得到用户的余额数据。
基于上述聚合服务场景,本实施例还提供了一种服务处理方法,图6为本申请一实施例提供的服务处理方法的流程示意图,该方法应用于服务器端,如图6所示,该方法包括:
步骤S602,为每个待处理的服务分别建立对应的线程池;其中,各个待处理的服务共同组成针对服务请求设备的聚合服务,线程池中的线程基于多个数据存储单元被执行;
可选地,每个线程池中的线程均基于对应的多个数据存储单元被执行。
步骤S604,在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在第一线程池对应的多个数据存储单元中,确定引起第一线程池处于指定阻塞状态的问题单元;
步骤S606,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息;
步骤S608,获取第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的线程执行结果信息确定聚合服务的服务结果信息并发送出去;其中,第一线程池的线程执行结果信息包括服务熔断信息,其他线程池为多个线程池中除第一线程池以外的线程池。
上述步骤S604中,在第一线程池对应的多个数据存储单元中,确定引起第一线程池处于指定阻塞状态的问题单元,包括:确定第一线程池中当前被执行的线程,在第一线程池对应的多个数据存储单元中,将当前被执行的线程对应的数据存储单元,确定为引起第一线程池处于指定阻塞状态的问题单元。
该过程可以参考前述步骤S104的描述,这里不再重复。
上述步骤S608中,可以将第一线程池的线程执行结果信息和其他线程池的线程执行结果信息共同作为聚合服务的服务结果信息并发送至客户端,以使用户获取聚合服务的服务结果信息。
在聚合服务的场景下,为每个服务设置一个线程池,能够实现各个服务之间的资源隔离,提高服务处理效率,避免一个服务响应慢或不可用影响其他服务处理效率的问题。并且,在聚合服务的场景下,由于问题单元为第一线程池对应的数据存储单元,第一线程池对应聚合服务中的一个服务,因此问题单元也为聚合服务中的某个服务对应的数据存储单元。通过本申请实施例,在第一线程池阻塞时,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够达到在聚合服务中的某个服务对应的数据存储单元出现故障时,不访问该数据存储单元,并将服务熔断信息作为该服务的处理结果信息的效果,从而方便快速获取聚合服务中每个服务的处理结果信息,提高服务处理效率,避免由于某个服务的处理结果信息长时间无法获取,导致服务请求设备长时间获取不到聚合服务的服务结果信息,用户体验差的问题。
本申请实施例还以聚合查询服务为例,提供了一种具体的聚合服务场景,以说明上述服务处理方法的过程。
图7为本申请一实施例提供的聚合查询服务的场景示意图,包括客户端300、第一服务器400、余额服务器501、股票服务器502和基金服务器503、余额数据库601、股票数据库602和基金数据库603,第一服务器400用于执行上述的方法。第一服务器400包括余额线程池、股票线程池和基金线程池,各个线程池分别对应余额查询服务、股票查询服务和基金查询服务,各个服务共同组成聚合服务。余额服务器501用于从余额数据库601中查询余额数据,股票服务器502用于从股票数据库602中查询股票数据,基金服务器503用于从基金数据库603中查询基金数据,余额数据库601用于存储余额数据,股票数据库602用于存储股票数据,基金数据库603用于存储基金数据。第一线程池可以为余额线程池、股票线程池和基金线程池中的一个。
当客户端向第一服务器发送查询请求时,第一服务器在余额线程池中建立余额数据查询线程并执行,以得到用户的余额查询结果信息,在股票线程池中建立股票数据查询线程并执行,以得到用户的股票查询结果信息,在基金线程池中建立基金数据查询线程并执行,以得到用户的基金查询结果信息,第一服务器将用户的余额查询结果信息、股票查询结果信息和基金查询结果信息作为聚合服务的服务结果信息一同发送至客户端,客户端将接收到的余额查询结果信息、股票查询结果信息和基金查询结果信息一同提供给用户。
其中,第一服务器执行余额数据查询线程具体为,生成余额数据查询请求并发送至余额服务器,余额服务器根据该请求,从余额数据库中获取得到对应的余额数据,将余额数据作为余额查询结果信息返回至第一服务器,第一服务器在接收到余额查询结果信息时,确定余额数据查询线程执行完毕。第一服务器执行股票数据查询线程和基金数据查询线程的方式与该过程类似,不再重复。
本实施例中,余额数据库、股票数据库和基金数据库均包括多个表格,每个表格分别用于记录不同用户的余额数据、股票数据和基金数据,该多个表格即相当于前述的数据存储单元,通过对每个表格的访问得到余额数据、股票数据和基金数据。比如,第一线程池为余额线程池,则,余额数据库中的多个用于存储余额数据的表格,即相当于第一线程池对应的多个数据存储单元,通过对该多个数据存储单元的访问以执行第一线程池中的线程,得到余额数据。
当第一服务器确定某个线程池处于执行指定阻塞状态后,比如股票线程池处于指定阻塞状态,则第一服务器确定股票线程池正在执行的线程对应的目标用户,股票数据库中具有多个表格,股票数据库通过多个表格记录各个用户的股票数据,第一服务器预先记录有每个用户的股票数据所在的表格,第一服务器确定目标用户的股票数据所在的表格,将该表格确定为问题单元。
第一服务器熔断对问题单元的访问,并确定基于问题单元的线程执行结果信息为服务熔断信息,则,当第一服务器确定股票数据查询线程对应的待查询表格为问题单元时,第一服务器不再向股票服务器发送股票数据查询请求,直接将服务熔断信息作为股票查询结果信息,并将股票查询结果信息、余额查询结果信息和基金查询结果信息一同发送至客户端。用户在获取到以上查询结果信息时,能够通过服务熔断信息获知股票数据暂时无法查询。
当问题单元对应的问题因素消除后,第一服务器恢复对问题单元的访问。第一服务器在执行股票数据查询线程的过程中,当确定股票数据查询线程对应的待查询表格为恢复后的问题单元时,向股票服务器发送股票数据查询请求,并获取股票服务器对恢复后的问题单元进行访问后返回的股票查询结果信息。
综上,通过以上服务处理方法,能够缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。通过以上服务处理方法,应用在聚合服务场景下,能够方便快速获取聚合服务中每个服务的处理结果信息,提高服务处理效率,避免由于某个服务的处理结果信息长时间无法获取,导致服务请求设备长时间获取不到聚合服务的服务结果信息,用户体验差的问题。
对应上述的服务处理方法,本申请实施例还提供了一种服务处理装置,图8为本申请一实施例提供的服务处理装置的模块组成示意图,如图8所示,服务处理装置包括:
第一建立模块81,用于为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
第一确定模块82,用于在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
第一熔断模块83,用于熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
可选地,第一确定模块82具体用于:
监测所述第一线程池的等待队列长度超过第一设定长度的时长是否达到第一设定时长,若达到,则确定所述第一线程池处于指定阻塞状态;
或者,
监测所述第一线程池的等待队列长度超过第二设定长度的时长是否达到第二设定时长,若达到,则对所述第一线程池进行扩容处理,并监测扩容后的所述第一线程池的等待队列长度超过第三设定长度的时长是否达到第三设定时长,若到达,则确定所述第一线程池处于指定阻塞状态。
可选地,第一确定模块82具体用于:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
可选地,该装置还包括发送模块,用于:
在所述第一线程池中的线程被执行的过程中,确定第一线程的线程执行结果信息为所述服务熔断信息并发送出去,以及获取第二线程的线程执行结果信息并发送出去;
其中,所述第一线程为所述第一线程池中基于所述问题单元被执行的线程,所述第二线程为所述第一线程池中基于其他单元被执行的线程,所述其他单元为所述多个数据存储单元中除所述问题单元以外的单元,所述服务熔断信息和所述第二线程的线程执行结果信息不同。
可选地,该装置还包括恢复模块,用于:
在所述问题单元对应的问题因素消除后,恢复对所述问题单元的访问。
可选地,各个所述待处理的服务共同组成针对服务请求设备的聚合服务。
本实施例中,问题单元为引起第一线程池处于指定阻塞状态的数据存储单元,通过熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够使得基于问题单元执行线程时,不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
对应上述的服务处理方法,本申请实施例还提供了一种服务处理装置,图9为本申请一实施例提供的服务处理装置的模块组成示意图,如图9所示,服务处理装置包括:
第二建立模块91,用于为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
第二确定模块92,用于在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
第二熔断模块93,用于熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
结果发送模块94,用于获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
可选地,所述第二确定模块92具体用于:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
在聚合服务的场景下,由于问题单元为第一线程池对应的数据存储单元,第一线程池对应聚合服务中的一个服务,因此问题单元也为聚合服务中的某个服务对应的数据存储单元。通过本申请实施例,在第一线程池阻塞时,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够达到在聚合服务中的某个服务对应的数据存储单元出现故障时,不访问该数据存储单元,并将服务熔断信息作为该服务的处理结果信息的效果,从而方便快速获取聚合服务中每个服务的处理结果信息,提高服务处理效率,避免由于某个服务的处理结果信息长时间无法获取,导致服务请求设备长时间获取不到聚合服务的服务结果信息,用户体验差的问题。
本申请实施例还提供了一种服务处理设备,图10为本申请一实施例提供的服务处理设备的结构示意图。如图10所示,该服务处理设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器1001和存储器1002,存储器1002中可以存储有一个或一个以上存储应用程序或数据。其中,存储器1002可以是短暂存储或持久存储。存储在存储器1002的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对该服务处理设备中的一系列计算机可执行指令。更进一步地,处理器1001可以设置为与存储器1002通信,在该服务处理设备上执行存储器1002中的一系列计算机可执行指令。该服务处理设备还可以包括一个或一个以上电源1003,一个或一个以上有线或无线网络接口1004,一个或一个以上输入输出接口1005,一个或一个以上键盘1006等。
在一个具体的实施例中,该服务处理设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对服务处理设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
可选地,计算机可执行指令在被执行时,确定所述第一线程池处于指定阻塞状态,包括:
监测所述第一线程池的等待队列长度超过第一设定长度的时长是否达到第一设定时长,若达到,则确定所述第一线程池处于指定阻塞状态;
或者,
监测所述第一线程池的等待队列长度超过第二设定长度的时长是否达到第二设定时长,若达到,则对所述第一线程池进行扩容处理,并监测扩容后的所述第一线程池的等待队列长度超过第三设定长度的时长是否达到第三设定时长,若到达,则确定所述第一线程池处于指定阻塞状态。
可选地,计算机可执行指令在被执行时,所述在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元,包括:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
可选地,计算机可执行指令在被执行时,还包括:
在所述第一线程池中的线程被执行的过程中,确定第一线程的线程执行结果信息为所述服务熔断信息并发送出去,以及获取第二线程的线程执行结果信息并发送出去;
其中,所述第一线程为所述第一线程池中基于所述问题单元被执行的线程,所述第二线程为所述第一线程池中基于其他单元被执行的线程,所述其他单元为所述多个数据存储单元中除所述问题单元以外的单元,所述服务熔断信息和所述第二线程的线程执行结果信息不同。
可选地,计算机可执行指令在被执行时,还包括:
在所述问题单元对应的问题因素消除后,恢复对所述问题单元的访问。
可选地,计算机可执行指令在被执行时,各个所述待处理的服务共同组成针对服务请求设备的聚合服务。
本实施例中,问题单元为引起第一线程池处于指定阻塞状态的数据存储单元,通过熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够使得基于问题单元执行线程时,不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
在另一个具体的实施例中,该服务处理设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对服务处理设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
可选地,计算机可执行指令在被执行时,所述在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元,包括:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
在聚合服务的场景下,由于问题单元为第一线程池对应的数据存储单元,第一线程池对应聚合服务中的一个服务,因此问题单元也为聚合服务中的某个服务对应的数据存储单元。通过本申请实施例,在第一线程池阻塞时,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够达到在聚合服务中的某个服务对应的数据存储单元出现故障时,不访问该数据存储单元,并将服务熔断信息作为该服务的处理结果信息的效果,从而方便快速获取聚合服务中每个服务的处理结果信息,提高服务处理效率,避免由于某个服务的处理结果信息长时间无法获取,导致服务请求设备长时间获取不到聚合服务的服务结果信息,用户体验差的问题。
本申请实施例还提供了一种存储介质,用于存储计算机可执行指令,一个具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
为每个待处理的服务分别建立对应的线程池;其中,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,确定所述第一线程池处于指定阻塞状态,包括:
监测所述第一线程池的等待队列长度超过第一设定长度的时长是否达到第一设定时长,若达到,则确定所述第一线程池处于指定阻塞状态;
或者,
监测所述第一线程池的等待队列长度超过第二设定长度的时长是否达到第二设定时长,若达到,则对所述第一线程池进行扩容处理,并监测扩容后的所述第一线程池的等待队列长度超过第三设定长度的时长是否达到第三设定时长,若到达,则确定所述第一线程池处于指定阻塞状态。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元,包括:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,还包括:
在所述第一线程池中的线程被执行的过程中,确定第一线程的线程执行结果信息为所述服务熔断信息并发送出去,以及获取第二线程的线程执行结果信息并发送出去;
其中,所述第一线程为所述第一线程池中基于所述问题单元被执行的线程,所述第二线程为所述第一线程池中基于其他单元被执行的线程,所述其他单元为所述多个数据存储单元中除所述问题单元以外的单元,所述服务熔断信息和所述第二线程的线程执行结果信息不同。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,还包括:
在所述问题单元对应的问题因素消除后,恢复对所述问题单元的访问。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,各个所述待处理的服务共同组成针对服务请求设备的聚合服务。
本实施例中,问题单元为引起第一线程池处于指定阻塞状态的数据存储单元,通过熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够使得基于问题单元执行线程时,不再对问题单元进行访问,直接确定线程执行结果信息为服务熔断信息,从而缓解基于问题单元执行线程的耗时过长导致线程池阻塞的问题,提高线程执行效率,进而提高服务处理效率。
另一个具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
为每个待处理的服务分别建立对应的线程池;其中,各个所述待处理的服务共同组成针对服务请求设备的聚合服务,所述线程池中的线程基于多个数据存储单元被执行;
在确定建立的多个线程池中的第一线程池处于指定阻塞状态时,在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元;
熔断对所述问题单元的访问,并设置基于所述问题单元的线程执行结果信息为服务熔断信息;
获取所述第一线程池的线程执行结果信息和其他线程池的线程执行结果信息,根据获取的所述线程执行结果信息确定所述聚合服务的服务结果信息并发送出去;其中,所述第一线程池的线程执行结果信息包括所述服务熔断信息,所述其他线程池为所述多个线程池中除所述第一线程池以外的线程池。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述在所述第一线程池对应的多个数据存储单元中,确定引起所述第一线程池处于所述指定阻塞状态的问题单元,包括:
确定所述第一线程池中当前被执行的线程;
在所述第一线程池对应的多个数据存储单元中,将所述当前被执行的线程对应的数据存储单元,确定为引起所述第一线程池处于所述指定阻塞状态的问题单元。
在聚合服务的场景下,由于问题单元为第一线程池对应的数据存储单元,第一线程池对应聚合服务中的一个服务,因此问题单元也为聚合服务中的某个服务对应的数据存储单元。通过本申请实施例,在第一线程池阻塞时,熔断对问题单元的访问,并设置基于问题单元的线程执行结果信息为服务熔断信息,能够达到在聚合服务中的某个服务对应的数据存储单元出现故障时,不访问该数据存储单元,并将服务熔断信息作为该服务的处理结果信息的效果,从而方便快速获取聚合服务中每个服务的处理结果信息,提高服务处理效率,避免由于某个服务的处理结果信息长时间无法获取,导致服务请求设备长时间获取不到聚合服务的服务结果信息,用户体验差的问题。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。