CN110231981A - 服务调用方法及装置 - Google Patents
服务调用方法及装置 Download PDFInfo
- Publication number
- CN110231981A CN110231981A CN201810184991.1A CN201810184991A CN110231981A CN 110231981 A CN110231981 A CN 110231981A CN 201810184991 A CN201810184991 A CN 201810184991A CN 110231981 A CN110231981 A CN 110231981A
- Authority
- CN
- China
- Prior art keywords
- destination service
- service
- thread
- thread pool
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请实施例公开了一种服务调用方法和装置,其中方法包括:接收目标服务的调用指令,通过第一线程池组中的第一线程池调用该目标服务,该第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;获取该目标服务的运行信息,该运行信息用于描述该目标服务的关键绩效指标;在该运行信息异常的情况下,将该目标服务迁移到目标线程池组。还公开了相应的装置。本申请通过合理地分配线程池,可以有效地隔离运行信息异常的服务,提高了系统的可靠性。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种服务调用方法以及装置。
背景技术
在微服务软件架构中,系统拆分为大量的微服务,微服务之间产生了复杂的调用依赖,可靠性会随依赖的微服务数量增多而下降。如:在一个依赖后端30个微服务的系统中,每个微服务的可靠性是99.99%,整体系统的可靠性是99.99%的30次方约等于99.7%。
在这种复杂的系统架构中,不可避免的会出现某个或某些服务失败,如当在高并发服务调用失败时,如果没有隔离措施,则系统就有可能被拖跨的风险,甚至出现雪崩效应。如图1所示,服务调用装置需要调用后端服务A、B、C、D…H、I、J、K等的情况下,当服务C出现故障时,如网络时延大、资源繁忙、暂时不可用等,会导致服务调用装置的调用线程出现阻塞(等待服务C的调用结果)。此时虽然其它服务仍正常,但由于服务调用装置的调用线程均在阻塞中而无法处理,从而导致整体失效,拖跨整个系统。
因此,如何保证服务调用的可靠性是亟待解决的问题。
发明内容
本申请实施例公开了一种服务调用方法及装置,通过合理地分配线程池,可以有效地隔离运行信息异常的服务,提高了系统的可靠性。
第一方面,本申请实施例公开了一种服务调用方法,包括:接收目标服务的调用指令,通过第一线程池组中的第一线程池调用所述目标服务,所述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;获取所述目标服务的运行信息,所述运行信息用于描述所述目标服务的关键绩效指标;在所述运行信息异常的情况下,将所述目标服务迁移到目标线程池组。
实施本申请实施例,可以在通过第一线程池组中的第一线程池调用目标服务的情况下,获取该目标服务的运行信息,从而在该目标服务的运行信息异常的情况下,将该目标服务从第一线程池组迁移到目标线程池组,进而将该目标服务进行隔离,能够有效地提高系统的可靠性。
在一个可选的实现方式中,所述运行信息异常的情况包括所述目标服务的并发量符合预设条件的情况,所述将所述目标服务迁移到目标线程池组包括:将所述目标服务迁移到第二线程池组。
在一个可选的实现方式中,所述将所述目标服务迁移到第二线程池组之后,所述方法还包括:在所述目标服务的并发量不符合所述预设条件的情况下,将所述目标服务从所述第二线程池组迁移到所述第一线程池组;或者,在所述目标服务的调用时延异常的情况下,或者,在所述目标服务的调用成功率异常的情况下,将所述目标服务从所述第二线程池组迁移到第三线程池组。
本申请实施例中,在目标服务的并发量较大的情况下,将该目标服务从第一线程池组迁移到第二线程池组,通过第二线程池组中的线程池来调用该目标服务,可以保证该目标服务独占该线程池,从而保证该目标服务不受其他影响,提高了成功率。另一方面,目标服务还可以从第二线程池组迁移到第三线程池组。根据目标服务的运行信息动态地对目标服务进行迁移,有效地实现了对目标服务的隔离功能,提高了系统的可靠性。
在一个可选的实现方式中,所述运行信息异常的情况包括所述目标服务的调用时延异常的情况,或者,所述运行信息异常的情况包括所述目标服务的调用成功率异常的情况,所述将所述目标服务迁移到目标线程池组包括:将所述目标服务迁移到第三线程池组;所述将所述目标服务迁移到目标线程池组之后,所述方法还包括:在所述目标服务的调用时延正常的情况下,且在所述目标服务的调用成功率正常的情况下,将所述目标服务从所述第三线程池组迁移到所述第一线程池组。
实施本申请实施例,通过为目标服务合理地分配线程池组,可以有效地隔离该目标服务,提高了系统的可靠性。
在一个可选的实现方式中,所述调用指令包括第一标识,所述接收目标服务的调用指令之后,所述方法还包括:通过第四线程池组中的第二线程池调用所述目标服务,所述第四线程池组包括至少一个线程池,每个线程池包括至少一个线程。
实施本申请实施例,在调用指令包括第一标识的情况下,通过第四线程池组中的第二线程池调用该目标服务,相应地,在该调用指令不包括该第一标识的情况下,通过第一线程池组中的第一线程池调用该目标服务,从而可以更好地管理该目标服务,依据调用指令是否包括第一标识来为该目标服务分配不同的线程池组。
在一个可选的实现方式中,所述目标服务的并发量符合预设条件的情况包括:所述目标服务的并发量较大;所述目标服务的调用时延异常的情况包括:所述目标服务的调用时延大于时延阈值,或者,所述目标服务的调用时延较长;所述目标服务的调用成功率异常的情况包括所述目标服务的调用成功率小于成功率阈值,或者,所述目标服务的调用成功率较低。
本申请实施例中,通过进一步限定关键绩效指标,可以有效地实现对目标服务的监控,从而一旦监控到目标服务的关键绩效指标异常,便可以将目标服务从第一线程池组迁移到其他线程池组,进而对该目标服务进行隔离观察,以减少对其他服务的影响,有效地保证了系统的高可靠性。
在一个可选的实现方式中,在将所述目标服务迁移到所述第二线程池组的过程中,或者,在将所述目标服务迁移到第三线程池组的过程中,依据空闲分配原则为所述目标服务分配线程池。
实施本申请实施例,可以进一步地实现对目标服务的隔离,避免对其他服务的影响。
在一个可选的实现方式中,在通过所述第四线程池组调用所述目标服务的过程中,依据空闲分配原则为所述目标服务分配线程池。
第二方面,本申请实施例还提供了一种服务调用装置,包括:
接收单元,用于接收目标服务的调用指令;调用单元,用于通过第一线程池组中的第一线程池调用所述目标服务,所述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;获取单元,用于获取所述目标服务的运行信息,所述运行信息用于描述所述目标服务的关键绩效指标;迁移单元,用于在所述运行信息异常的情况下,将所述目标服务迁移到目标线程池组。
在一个可选的实现方式中,所述运行信息异常的情况包括所述目标服务的并发量符合预设条件的情况;所述迁移单元,具体用于将所述目标服务迁移到第二线程池组。
在一个可选的实现方式中,所述迁移单元,还用于在所述目标服务的并发量不符合所述预设条件的情况下,将所述目标服务从所述第二线程池组迁移到所述第一线程池组;或者,所述迁移单元,还用于在所述目标服务的调用时延异常的情况下,或者,在所述目标服务的调用成功率异常的情况下,将所述目标服务从所述第二线程池组迁移到第三线程池组。
在一个可选的实现方式中,所述运行信息异常的情况包括所述目标服务的调用时延异常的情况,或所述运行信息异常的情况包括所述目标服务的调用成功率异常的情况;所述迁移单元,具体用于将所述目标服务迁移到第三线程池组;所述迁移单元,还用于在所述目标服务的调用时延正常的情况下,且在所述目标服务的调用成功率正常的情况下,将所述目标服务从所述第三线程池组迁移到所述第一线程池组。
在一个可选的实现方式中,所述调用指令包括第一标识;所述调用单元,还用于通过第四线程池组中的第二线程池调用所述目标服务,所述第四线程池组包括至少一个线程池,每个线程池包括至少一个线程。
在一个可选的实现方式中,所述目标服务的并发量符合预设条件的情况包括:所述目标服务的并发量较大;所述目标服务的调用时延异常的情况包括:所述目标服务的调用时延大于时延阈值,或者,所述目标服务的调用时延较长;所述目标服务的调用成功率异常的情况包括所述目标服务的调用成功率小于成功率阈值,或者,所述目标服务的调用成功率较低。
在一个可选的实现方式中,在将所述目标服务迁移到所述第二线程池组的过程中,或者,在将所述目标服务迁移到所述第三线程池组的过程中,依据空闲分配原则为所述目标服务分配线程池。
在一个可选的实现方式中,在通过所述第四线程池组调用所述目标服务的过程中,依据空闲分配原则为所述目标服务分配线程池。
第三方面,本申请实施例还提供了一种服务调用装置,可以实现上述第一方面的服务调用方法。例如所述服务调用装置可以是芯片如基带芯片,或通信芯片等;或者,所述服务调用装置可以是设备如服务调用设备等,其中,该服务调用设备可以包括服务器等。所述服务调用装置可以通过软件、硬件或通过硬件执行相应的软件实现上述方法。
当上述服务调用方法中的部分或全部通过软件来实现时,服务调用装置包括:处理器和存储器;所述存储器,用于存储程序;所述处理器,用于执行所述存储器存储的程序,当所述程序被执行时,使得所述服务调用装置可以实现上述实施例提供的服务调用方法。
在一个可选的实现方式中,所述存储器可以是物理上独立的单元,也可以与所述处理器集成在一起。
在一个可选的实现方式中,当上述实施例的服务调用方法中的部分或全部通过软件实现时,所述服务调用装置也可以只包括处理器。用于存储程序的存储器位于所述服务调用装置之外,所述处理器通过电路或电线与所述存储器连接,用于读取并执行所述存储器中存储的程序。
其中,当所述服务调用装置为芯片时,接收单元可以是输入单元,比如输入电路或者输入通信接口。当所述服务调用装置为设备时,接收单元可以是接收器(也可以称为接收机)。
第四方面,本申请实施例还提供了一种微服务系统,所述微服务系统包括服务调用装置和服务提供装置,所述服务调用装置和所述服务提供装置通信连接,所述服务提供装置可用于为所述服务调用装置提供服务,所述服务调用装置可用于执行如第一方面所述的方法。
第五方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得所述计算机执行上述第一方面所述的方法。
第六方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得所述计算机执行第一方面所述的方法。
附图说明
图1是本申请实施例提供的一种服务调用的示意图;
图2是本申请实施例提供的微服务的系统架构示意图;
图3是本申请实施例提供的一种系统架构的对比示意图;
图4是本申请实施例提供的一种微服务的分布式架构示意图;
图5是本申请实施例提供的一种服务调用装置的结构示意图;
图6是本申请实施例提供的一种服务调用方法的流程示意图;
图7是本申请实施例提供的一种服务调用的场景示意图;
图8是本申请实施例提供的另一种服务调用方法的流程示意图;
图9是本申请实施例提供的一种服务调用的具体场景示意图;
图10是本申请实施例提供的一种服务调用装置的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
下面将对本申请实施例中的技术术语进行介绍。
线程池组(thread pool group):将系统中的若干个线程池进行分组,每个线程池组包含一个或多个线程池。本申请实施例中,线程池组可以包括第一线程池组和目标线程池组,具体地,该目标线程池组包括第二线程池组和第三线程池组。可选该,本申请实施例中,线程池组还可以包括第四线程池组。其中,第一线程池组可以为缺省公共线程池组,第二线程池组可以为大并发线程池组,第三线程池组可以为异常线程池组,第四线程池组可以为专用线程池组。可理解的是,上述系统可以为某个装置如服务调用装置中的系统,也可以为某个设备如服务调用设备中的系统等等。可理解的是,本申请实施例中,还可以包括其他线程池组等。
线程池(thread pool):一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。本申请实施例中,每个线程池组中至少包含一个线程池,每个线程池中至少包含一个线程。
线程(thread):一个相对独立的、可调度的执行单元,是系统独立调度和分派中央处理器(central processing unit,CPU)的基本单位。
多线程(multithreading):指从软件或者硬件上实现多个线程并发执行的技术。
微服务(micro service):一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为若干个微服务。该若干个微服务具体可以包括至少两个微服务等,本申请实施例不作限定。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序。具体地,本申请实施例中的微服务系统可参见图2所示的架构。
服务:可理解为独立的功能单元,实现与该功能单元对应的功能。
故障(fault):系统运行过程中出现不符合预期,不能执行规定功能的状态。本申请实施例中,故障可以表示调用时延或调用成功率出现异常等。
时延(delay):指发起服务调用到收到调用结果所需要的时间。本申请实施例中,将服务调用装置发起服务调用到接收到调用结果的时间称为调用时延,可理解,该调用时延可能还存在其他名称,因此不应将上述时延或调用时延理解为对本申请实施例的限定。
失败率(failure rate):服务调用失败的次数占总调用次数的百分比。相应地,成功率可以指服务调用成功的次数占总调用次数的百分比。本申请实施例中,将服务调用装置调用服务成功的次数占总调用次数的百分比称为调用成功率,可理解,该调用成功率可能还存在其他名称,因此不应将上述成功率或调用成功率理解为对本申请实施例的限定。
隔离(isolation):断绝往来,本申请实施例中指的是在多个服务调用场景下,使该多个服务相互不产生影响。如在多个服务调用的场景下,存在第一服务、第二服务以及第三服务,其中,在第一服务出现故障的情况下,将第一服务进行隔离,则可以使得第一服务与第二服务和第三服务之间不产生影响,可以理解,以上仅为示例,不应理解为对本申请实施例的限定。
哈希(hash):将任意的字符串映射到有限的值域中的一种算法。本申请实施例中,将多个服务名称映射到有限的线程池组中,从而实现将服务分配到某一线程池的目的。
图2是本申请实施例提供的一种微服务的系统架构示意图,如图2所示,该系统可包括服务提供装置201和服务调用装置202。其中,该服务提供装置201通过开发服务以及向服务注册中心申请注册服务,从而为服务调用装置202提供服务。具体地,该服务调用装置202在需要调用服务的情况下,通过线程调用服务。可理解的是,服务调用装置中也可能用于为其他装置提供服务,或者为该服务调用装置自己提供服务等。图2仅为本申请实施例提供的一种示例,在具体实现中,也可能由服务调用装置提供服务以及调用服务,因此,不应将图2所示的示意图理解为对本申请实施例的限定。
具体地,微服务即是把一个大型的单个应用程序和服务拆分为数个甚至数十个的微服务,可扩展单个组件。为了更形象地说明微服务,参见图3,图3是本申请实施例提供的一种系统架构对比示意图。如图3所示,左边的图示出的是传统服务的架构,右边的图示出的是微服务的架构,从中可以看出微服务可以有效的拆分应用,将应用拆分地更独立,相互之间影响更小。可理解的是,在具体实现中,还可以存在其他形式的微服务架构,因此图3所示的系统架构对比仅是为了说明微服务与传统服务的区别而做出的示例,不应将图3所示的微服务理解为对本申请实施例的限定。
更进一步地,参见图4,图4是本申请实施例提供的一种微服务的分布式架构示意图,如图4所示,服务调用装置需要调用服务U,而服务U又依赖于服务X,以及服务X依赖于服务C。因此,在具体实现中,服务调用装置可以直接调用服务U,也可以间接调用服务U。可理解的是,图4所示的示意图中,服务C与服务X或服务Y等,可能运行在同一个装置中,也可能运行在不同的装置中等,本申请实施例对于服务调用装置所调用的各个服务是否运行在同一个装置中不作限定。本申请实施例中,服务调用装置调用目标服务可以理解为直接调用目标服务,也可以理解为间接调用目标服务等,本申请实施例不作限定。
图5示出了一种简化的服务调用装置的结构示意图。便于理解和图示方便,图5中,服务调用装置以服务器500作为例子。如图5所示,服务器包括处理器、存储器、有线或无线网络接口以及输入输出接口。处理器主要用于对通信协议以及通信数据进行处理,以及对服务器进行控制,执行软件程序,处理软件程序的数据等。例如该处理器可用于支持服务器执行图6至图9所描述的方法。存储器主要用于存储软件程序和数据。有线或无线网络接口主要用于接收或发送信号。输入输出接口,例如触摸屏、显示屏,键盘等主要用于接收用户输入的数据以及对用户输出数据。需要说明的是,有些种类的服务器可以不具有输入输出装置。
当服务器开机后,处理器可以读取存储器中的软件程序,解释并执行软件程序的,处理软件程序的数据。当需要通过有线或无线网络接口发送数据时,处理器对待发送的数据进行处理后,将待发送的数据通过有线或无线网络接口向外发送。
为便于说明,图5中仅示出了一个存储器和处理器。在实际的服务器产品中,可以存在一个或多个处理器和一个或多个存储器。存储器也可以称为存储介质或者存储设备等。存储器可以是独立于处理器设置,也可以是与处理器集成在一起,本申请实施例对此不做限制。
作为一种可选的实现方式,处理器可以为CPU主要用于对整个服务器进行控制,执行软件程序,处理软件程序的数据。可选的,该处理器还可以是网络处理器(networkprocessor,NP)或者CPU和NP的组合。处理器还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。存储器可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器也可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器还可以包括上述种类的存储器的组合。
可理解的是,在处理器包括NP和CPU时,该NP和CPU也可以是各自独立的处理器,通过总线等技术互联。可理解的是,服务器还可以包括多个中央处理器以增强其处理能力,服务器的各个部件可以通过各种总线连接。服务还可以包括多个NP等,本申请实施例不作限定。上述中央处理器也可以表述为中央处理电路或者中央处理芯片。对通信协议以及通信数据进行处理的功能可以内置在处理器中,也可以以软件程序的形式存储在存储器中,由处理器执行软件程序以实现基带处理功能。
在本申请实施例中,可以将具有收发功能的有线或无线网络接口视为服务器的接收单元和发送单元(也可以统称为收发单元501),将具有处理功能的处理器视为服务器的处理单元502。如图5所示,服务器包括收发单元501和处理单元502。收发单元也可以称为收发器、收发机、收发装置等等。处理单元也可以称为处理器,处理单板,处理模块、处理装置等。
例如,在一个实施例中,收发单元501用于执行图6所示实施例中的步骤601。处理单元502用于执行图6所示实施例中的步骤602和步骤603。又例如,在一个实施例中,处理单元502还可用于执行图10所示的调用单元1002和迁移单元1004所执行的方法。又如处理单元502还可用于执行图10所示的获取单元1003所执行的方法。
具体地,收发单元501,可用于接收目标服务的调用指令;处理单元502,可用于通过第一线程池组中的第一线程池调用上述目标服务,上述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;处理单元502,还用于获取上述目标服务的运行信息,上述运行信息用于描述上述目标服务的关键绩效指标;处理单元502,还用于在上述运行信息异常的情况下,将上述目标服务迁移到目标线程池组。可选的,处理单元502,具体用于将上述目标服务迁移到第二线程池组。可选的,处理单元502,具体用于在上述目标服务的并发量不符合预设条件的情况下,将上述目标服务从上述第二线程池组迁移到上述第一线程池组;或者,在上述目标服务的调用时延异常的情况下,或者在上述目标服务的调用成功率异常的情况下,将上述目标服务从上述第二线程池组迁移到第三线程池组。可选的,处理单元502,具体用于将上述目标服务迁移到上述第三线程池组。
可理解,对于收发单元501和处理单元502的具体实现方式还可以参考图6所示的实现方式,这里不再详述。
可理解,图5所示的服务器仅为服务调用装置的一个示例,不应将图5所示的服务器理解为对本申请实施例的限定。
为了实现服务的隔离,一般会采用独立的线程池来调用不同的服务,从而来减少相互之间的影响,保证系统的可靠性。采用上述方案,服务调用装置在调用服务时,可以为每个服务分配一个线程池,如服务C出现故障,则只会影响线程池C,其它线程池不受影响。但是上述方案并不适合海量服务调用的场景。一方面,服务调用装置创建的线程池数量会随后端所依赖的服务数量呈线性增长,然而服务调用装置支持的线程池数量是有限的,如可能会受限于内存大小、CPU性能等,当后端依赖的服务数量较大时,则不适用。另一方面,线程数量较多时会增加CPU的调度开销,可能存在若干服务的并发量比较小的情况,相互影响也不大,此场景下创建很多的线程反而会增加CPU调度开销。因此,本申请实施例提供了一种服务调用方法,不仅可以应用于海量服务调用的场景,还可以提高系统可靠性。
图6是本申请实施例提供的一种服务调用方法的流程示意图,该服务调用方法可应用于图5所示的服务调用装置,如图6所示,该服务调用方法至少包括:
601、接收目标服务的调用指令,通过第一线程池组中的第一线程池调用上述目标服务,上述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程。
本申请实施例中,目标服务可以为与服务调用装置相互连接的任意一个或至少两个服务,或者,该目标服务也可以为与服务调用装置间接连接的任意一个或至少两个服务。举例来说,如图4所示,服务C用于为该服务调用装置提供服务,服务调用装置需要调用服务C时,该服务调用装置可以直接接收该服务C的调用指令,也可以通过调用服务X后间接调用服务C。其中,服务C可能运行于服务调用装置中,也可能运行于其他装置中,服务X可能运行于该服务调用装置中,也可能运行于与该服务调用装置连接的其他装置中。
具体地,上述第一线程池组可以为缺省公共线程池组,或者称为公共线程池组等,本申请实施例对于该第一线程池组的具体名称不作限定。可理解的是,第一线程池可以为第一线程池组中的任意一个线程池,服务调用装置可以通过该第一线程池中的一个或至少两个线程来调用该目标服务。可理解的是,本申请实施例对于服务调用装置具体使用几个线程来调用该目标服务不作限定。
其中,在通过第一线程池组调用目标服务时,服务调用装置可以依据哈希分配原则为目标服务分配线程池。对于哈希分配原则的介绍如Index=Key%N,其中Key为服务的哈希值,N为线程池组内的线程池数量,Index为线程池组内线程池的下标,如线程池取值可为[1,N]。更形象地,线程池数量为7,各个服务的哈希值为18,75,60,43,54,90,46,则可得到各个服务的线程池下标为18%7=4;75%7=5;60%7=4;43%7=1;54%7=5;90%7=6;46%7=4。即各个服务所分配的线程池分别为4,5,4,1,5,6,4。可理解的是,服务的哈希值可以由用户自主设置,也可以由服务调用装置自动设置等,本申请实施例不作限定。
602、获取上述目标服务的运行信息,上述运行信息用于描述上述目标服务的关键绩效指标。
本申请实施例中,运行信息为服务调用装置调用目标服务的运行信息,该运行信息可以为目标服务的关键绩效指标(key performance indicator,KPI),该KPI可以用于衡量目标服务的异常指标。具体地,该目标服务的运行信息可以包括目标服务的并发量,该目标服务的并发量可以理解为单位时间内发生调用次数总和。即该并发量为该服务调用装置单位时间内调用该目标服务的次数。以及该目标服务的运行信息还可以包括目标服务其他的KPI,如该运行信息还可以包括该目标服务的调用时延或调用成功率(或调用失败率)等等,本申请实施例对于该运行信息中具体所包含的信息不作唯一性限定。具体地,该KPI可以由服务调用装置自主设置,也可以由用户设置等,本申请实施例不作限定。
具体地,该服务调用装置可以实时地获取该目标服务的运行信息。或者,为了避免对CPU的消耗,该服务调用装置也可以以预定周期来获取该目标服务的运行信息等。可选的,该预定周期可以在服务调用装置出厂设置时设置,也可以由用户自主设置等,本申请实施例对于该预定周期如何设置不作限定。
603、在上述运行信息异常的情况下,将上述目标服务迁移到目标线程池组。
本申请实施例中,运行信息异常的情况即目标服务的KPI异常的情况,该目标线程池组可以用来隔离运行信息异常的服务。从而来提高系统的可靠性。然而在具体实现中,运行信息异常的情况可以包括很多种情况,因此,本申请实施例中目标线程池组还可以根据运行信息来确定,在该运行信息为并发量的情况下,该目标线程池组可以为第二线程池组,从而通过第二线程池组中的线程池来调用该目标服务。在该运行信息为调用时延或调用成功率的情况下,该目标线程池组则可以为第三线程池组,从而通过第三线程池组中的线程池来调用该目标服务。
具体地,在运行信息异常的情况为目标服务的并发量符合预设条件的情况下,上述将上述目标服务迁移到目标线程池组包括:将上述目标服务迁移到第二线程池组。
具体地,在运行信息的调用时延异常的情况下,或者,在上述目标服务的调用成功率异常的情况下,上述将目标服务迁移到目标线程池组包括:将上述目标服务迁移到第三线程池组。
具体地,上述目标服务的并发量符合预设条件的情况包括:上述目标服务的并发量较大;
上述目标服务的调用时延异常的情况包括:上述目标服务的调用时延大于时延阈值,或者,上述目标服务的调用时延较长;
上述目标服务的调用成功率异常的情况包括:上述目标服务的调用成功率小于成功率阈值,或者,上述目标服务的调用成功率较低。
本申请实施例中目标服务的并发量较大,具体可以理解为第一线程池组中的所有服务中,除了并发量最小的服务之外,其余服务的并发量均可以称为并发量较大。或者,也可以理解为第一线程池组中的所有服务中,除了并发量最小的X个服务之外,其余服务的并发量均可以称为并发量较大,其中,X为大于1的整数,且X小于第一线程池组中的服务总数。或者,目标服务的并发量较大具体可以理解为在从大到小排序时目标服务的并发量的排序较高,也就是说,服务调用装置可以将第一线程池组内的所有服务如M个服务的并发量从大到小进行排序,在目标服务的并发量的排序在前N1个(即topN1)的情况下,该服务调用装置可以将目标服务迁移到第二线程池组,其中M大于N1。可以理解的是,以上仅为一种排序方法,不应理解为对本申请实施例的限定。或者,本申请实施例中,目标服务的并发量较大也可以理解为目标服务的并发量的优先级较高,即可以将第一线程池组内的所有服务的并发量进行排序,从而依据排序来确定各个服务的并发量的优先级,若目标服务的并发量的优先级较高,则可以确定该目标服务的并发量符合预设条件。本申请实施例中,优先级可为并发量从大到小排序的优先级,并发量的优先级较高可以表示第一线程池组内的所有服务如M个服务的并发量从大到小进行排序,目标服务的并发量排序在前N1个,M大于N1。其中,N可以自主设置等,本申请实施例不作限定。具体地,优先级较高还可以理解为除了优先级最低的一个并发量或X个并发量,其余的并发量均可以称为优先级较高。可理解的是,在利用排序的方式来衡量目标服务的并发量是否符合预设条件时,服务调用装置不仅需要获取目标服务的并发量,还需要获取第一线程池组内的其他服务的并发量。本申请实施例中,使用排序的方式来确定目标服务的并发量是否满足预设条件,可以有效保证第一线程池组中并发量排序靠前的服务迁移到第二线程池组,避免设置并发量阈值来确定目标服务的并发量是否大于该并发量阈值,而造成在不同时间存在不同数量的服务迁移到第二线程池组,进而无法统一规划确定第二线程池组中线程池的数量,而导致第二线程池组的利用率较低的情况出现。
可理解的是,以上所示的方法是在无服务迁移到第二线程池组的情况下所示出的方法,在第二线程池组已有服务占用的情况下,则在获取所有服务的并发量时,获取的是第一线程池组和第二线程池组中的所有服务的并发量。其中具体的实现方式,可以参考前述实施例,这里不再赘述。
本申请实施例中,第二线程池组可以为大并发线程池组,可用于运行并发量较大的服务,从而保证该并发量较大的服务不受其他影响,提高服务调用的成功率。服务调用装置将目标服务迁移到第二线程池组之后,便可以通过第二线程池组中的线程池来调用该目标服务。
本申请实施例中,目标服务的KPI还可以包括:目标服务的调用时延和/或目标服务的调用成功率。相应地,KPI异常的情况可以包括:目标服务的调用时延大于时延阈值,或目标服务的调用时延较长。如时延阈值可以为500ms,则若目标服务的调用时延大于500ms,则可以将目标服务迁移到第三线程池组。其中,时延阈值可以在服务调用装置出厂时设置,也可以由用户设置等,本申请实施例不作限定。调用时延较长具体可以理解为在从大到小排序时目标服务的调用时延的排序较高,也就是说,第一线程池组中的所有服务如M个服务的调用时延从大到小进行排序,目标服务的调用时延的排序在前N2个(topN2),M大于N2。可理解的是,该N2可以与N1相同,也可以不同,本申请实施例不作限定。或者,调用时延较高也可以理解为调用时延的优先级较高。调用时延的优先级表示第一线程池组内的所有服务的调用时延从大到小排序的优先级。目标服务的调用时延的优先级较高可以表示第一线程池组内的所有服务如M个服务的调用时延从大到小的顺序排序,目标服务的调用时延排序在前N2个,M大于N2。或者,调用时延的优先级较高还可以理解为除了优先级最低的调用时延,其余调用时延均可以称为优先级较高。
相应地,KPI异常的情况还可以包括:目标服务的调用成功率小于成功率阈值,或目标服务的调用成功率较低。或者,在以调用失败率衡量KPI是否异常时,该KPI异常的情况还可以包括:目标服务的调用失败率小于失败率阈值,或者目标服务的调用失败率较高。如成功率阈值可以为60%,即在目标服务的调用成功率小于60%的情况下,该服务调用装置便可以将目标服务迁移到第三线程池组。其中,成功率阈值和失败率阈值可以在服务调用装置出厂时设置,也可以由用户设置等,本申请实施例不作限定。其中,调用成功率较低可以理解为从大到小排序时目标服务的调用成功率的排序较低,或者,调用成功率的排序靠后。具体可以理解为第一线程池组中的所有服务如M个服务的调用成功率从大到小进行排序,目标服务的调用成功率的排序在后N3个。其中,该N3与N1或N2的关系,本本申请实施例不作限定。或者,调用成功率较低也可以理解为调用成功率的优先级较低,调用成功率的优先级表示第一线程池组内的所有服务的调用成功率从高到低的顺序排序的优先级。目标服务的调用成功率的优先级较低可以表示第一线程池组内的所有服务如M个服务的调用成功率从高到低的顺序排序,目标服务的调用成功率排序在后N3个,M大于N3。或者,调用成功率的优先级较低可以理解为除了优先级最高的调用成功率,其余调用成功率均可以称为优先级较低。对于调用失败率的优先级可以参考调用成功率的优先级描述,这里不再赘述。可理解的是,在利用排序的方式来衡量目标服务的KPI是否异常时,服务调用装置不仅需要获取目标服务的KPI,还需要获取第一线程池组内的其他服务的KPI。可理解的是,对于调用成功率或调用时延中未详尽描述的实现方式,还可以参考并发量的相关描述,这里不再一一详述。
可理解的是,以上所示的方法是在无服务迁移到第三线程池组的情况下示出的方法,在第三线程池组中已有服务占用的情况下,则在获取所有服务的调用时延或调用成功率时,可以获取第一线程池组、第二线程池组和第三线程池组中所有服务的调用时延或调用成功率。其中具体的实现方式,可以参考前述实施例,这里不再赘述。
本申请实施例中,第三线程池组可以为异常线程池组,可用于隔离观察KPI异常的服务。服务调用装置将目标服务迁移到第三线程池组之后,便可以通过第三线程池组中的线程池来调用该目标服务。
在具体实现中,在将目标服务迁移到第二线程池组之后,该目标服务的并发量可能会动态改变,如并发量变小,这时,若继续通过第二线程池组中的线程调用目标服务,则可能会影响第二线程池组的利用率,因此,本申请实施例还提供了一种服务调用方法,如下所示:
上述将上述目标服务迁移到第二线程池组之后,上述方法还包括:
在上述目标服务的并发量不符合上述预设条件的情况下,将上述目标服务从上述第二线程池组迁移到上述第一线程池组;
或者,在上述目标服务的调用时延异常的情况下,或者,在上述目标服务的调用成功率异常的情况下,将上述目标服务从上述第二线程池组迁移到第三线程池组。
可理解,本申请实施例中,在目标服务从第二线程池组迁移到第三线程池组时,该目标服务的并发量可能已经变小,也可能未发生变化,但是不管该目标服务的并发量为多少,只要该目标服务的调用时延和/或调用成功率发生异常,便可以将该目标服务迁移到第三线程池组。
其中,对于目标服务从第二线程池组迁移到第一线程池组的情况下,由于该第二线程池组中存在该目标服务,因此目标服务的并发量不符合预设条件,可以为将第一线程池组和第二线程池组中的所有服务即M个服务的并发量从大到小排序时,该目标服务的并发量不在前N1个。可理解的是,目标服务的并发量不符合预设条件还可以为目标服务的并发量优先级较低,具体可以理解为第一线程池组中和第二线程池组中所有服务如M个服务的并发量从大到小排序,目标服务的并发量排序不在前N1个。其中,该服务调用装置所获取的并发量为第二线程池组中和第一线程池中的所有服务的并发量排序。可以理解的是,对于并发量不符合预设条件,或者,调用时延异常,或者调用成功率异常的实现方式,还可以参考前述实施例,这里不再赘述。可理解的是,在目标服务从第一线程池组迁移到第二线程池组之后,该目标服务的并发量可能会改变,如该目标服务的并发量已经不符合预设条件,但是该目标服务的调用时延或调用成功率异常。这时,服务调用装置便可以将目标服务从第二线程池组迁移到第三线程池组,从而隔离该目标服务。可理解的是,在从第二线程池组迁移到第三线程池组的情况下,在利用排序方式来衡量调用时延或调用成功率时,该服务调用装置可获取第一线程池组、第二线程池组和第三线程池组中所有服务的调用时延或调用成功率。
具体地,在将上述目标服务迁移到上述第二线程池组的过程中,或者,在将上述目标服务迁移到上述第三线程池组的过程中,依据空闲分配原则为上述目标服务分配线程池。具体地,服务调用装置可以依据空闲分配原则来为目标服务分配线程池。举例来说,第二线程池组中包含三个线程池如线程池1、线程池2和线程池3,且线程池1已被其他服务占用,则在将目标服务迁移到第二线程池组时,服务调用装置可以将该目标服务迁移到线程池2或线程池3。也就是说,在为目标服务分配线程池时,该服务调用装置可以将该目标服务迁移到空闲的线程池或未被其他服务占用的线程池。依据空闲分配原则来分配线程池,可以实现一对一的分配关系,从而可以进一步地实现对目标服务的隔离,避免对其他服务的影响。
可选的,上述将上述目标服务迁移到第三线程池组之后,上述方法还包括:
在上述目标服务的调用时延正常的情况下,且在上述目标服务的调用成功率正常的情况下,将上述目标服务从上述第三线程池组迁移到上述第一线程池组。
其中,目标服务的调用时延正常的情况可以包括:目标服务的调用时延不大于时延阈值,或目标服务的调用时延较短。目标服务的调用成功率正常的情况可以包括:目标服务的调用成功率不小于成功率阈值,或目标服务的调用成功率较高。举例来说,目标服务的调用时延较短,可以理解为在第一线程池组、第二线程池组和第三线程池组中的所有服务如M个的调用时延从大到小排序时,目标服务的调用时延的排序不在前N2个。可理解的是,目标服务的调用时延或调用成功率是否正常的衡量方法可以参考前述实施例的描述,这里不再赘述。
实施本申请实施例,可以在通过第一线程池组中的第一线程池调用目标服务的情况下,获取该目标服务的运行信息,从而在该目标服务的并发量符合预设条件的情况下,将该目标服务迁移到第二线程池组,通过第二线程池组中的线程池调用该目标服务;或者在该目标服务的调用时延或调用成功率异常的情况下,将该目标服务迁移至第三线程池组,通过第三线程池组中的线程池调用该目标服务。通过为目标服务合理地分配线程池,可以有效地隔离该目标服务,提高了系统的可靠性。
为了更形象地理解图6所示的服务调用方法,参见图7,图7是本申请实施例提供的一种服务调用的场景示意图。如图7所示,第一线程池组为缺省公共线程池组,第二线程池组为大并发线程池组,第三线程池组为异常线程池组。图7中示出了缺省公共线程池组、大并发线程池组和异常线程池组之间的迁移规则。其中,服务调用装置可以依据缺省公共线程池组中的服务的KPI来衡量是否需要将目标服务迁移到大并发线程池组或异常线程池组。以及依据缺省线程池组和大并发线程池组中所有服务的并发量来衡量是否需要将目标服务迁移到缺省公共线程池组。以及依据异常线程池组中服务的调用时延或调用成功率(或调用失败率)来衡量是否需要将目标服务迁移到缺省公共线程池组。以及依据大并发线程池组中服务的调用时延或调用成功率来衡量是否需要将目标服务迁移到异常线程池组。对于图7所示的具体迁移方法可以参考图6所示的服务调用方法,这里不再赘述。
图8是本申请实施例提供的另一种服务调用方法的流程示意图,如图8所示,该服务调用方法至少包括以下步骤:
801、接收目标服务的调用指令。
802、在上述调用指令不包含第一标识的情况下,通过第一线程池组中的第一线程池调用上述目标服务。
可理解的是,步骤802也可以为在上述调用指令不包含第一标识,且包含有第二标识的情况下,通过第一线程池组中的第一线程池调用目标服务。具体地,第二标识可以为与第一标识不同的标识等,本申请实施例不作限定。
803、在上述调用指令包含上述第一标识的情况下,通过第四线程池组中的第二线程池调用上述目标服务。
其中,第一标识可以由服务调用装置设置,也可以由用户设置等。举例来说,在一个微服务系统中,目标服务的调用次数很大,即在单位时间内目标服务的调用次数总和最多,则用户在调用目标服务时,该调用指令中便可以包含第一标识,从而使得服务调用装置通过第四线程池组调用目标服务。该第四线程池组可以为专用线程池组。可选的,该第一标识可以为重要标识(very important people,VIP)。
本申请实施例中,在通过第四线程池调用目标服务时,服务调用装置可以依据空闲分配原则为该目标服务分配线程池。可理解的是,第二线程池仅是为了区别第一线程池,并不是指第四线程池组中的第二线程池,因此,不应将第一线程池和第二线程池理解为对本申请实施例的限定。
804、获取上述目标服务的运行信息,上述运行信息用于描述上述目标服务的关键绩效指标。
805、在上述目标服务的并发量符合预设条件的情况下,将上述目标服务从上述第一线程池组迁移到第二线程池组;或者,在上述目标服务的调用时延或调用成功率异常的情况下,将上述目标服务从上述第一线程池组迁移到第三线程池组。
本申请实施例中,在通过第四线程池组调用目标服务时,该目标服务便可以长期占用该第四线程池组中的线程,直到该目标服务长时间没有被请求,或者,用户自主将该目标服务迁出。可理解的是,该目标服务没有被请求的时长可以动态配置,本申请实施例对于具体时长不作唯一性限定。在通过第一线程池组调用目标服务时,该目标服务便可以进行动态迁移,具体的实现方式可以参考图6所示的服务调用方法的描述,这里不再赘述。
实施本申请实施例,在调用指令包括第一标识的情况下,通过第四线程池组中的第二线程池调用该目标服务,相应地,在该调用指令不包括该第一标识的情况下,通过第一线程池组中的第一线程池调用该目标服务,从而可以更好地管理该目标服务,依据调用指令是否包括第一标识来为该目标服务分配不同的线程池组。
图9是本申请实施例提供的一种服务调用的具体场景示意图,如图9所示,其中,服务调用装置需要调用服务A、B、C、D、E、F,如服务A、B、C、D为普通服务,服务E、F为VIP服务。
具体地,各线程组内的分配的线程池数量如缺省公共线程池组为5个线程池,大并发线程池组为2个线程池;异常线程池组为3个线程池;专用线程池组为3个线程池。且在服务调用装置运行过程中,服务A和服务B的并发量会符合预设条件;服务C的KPI发生异常。
具体地的服务调用过程如下所示:
1)、服务调用装置携带服务名和标识发起服务调用。其中服务A、B、C、D的标识为false,服务E、F的标识为true。
2)、服务调用装置根据标识区分,将服务A、B、C、D、E、F分流到对应的线程池组并分配线程池发起服务调用。可理解的是,在服务A、B、C、D、E和F分别分配到线程池之后,如图9所示,服务B和服务C在同一个线程池,但是该服务B和服务C可能在不同的线程,或者,也可能在同一个线程,本申请实施例不作限定。由于服务A、B、C、D的标识为false,所以进入缺省公共线程池组。线程池组内有5个线程池,服务调用装置可以根据各服务的服务名称计算hash值,然后再模5取余,得到对应的线程池index,用该线程池发起服务调用。假设服务调用装置分配线程池之后,服务A对应线程池2、服务B和服务C对应线程池5(hash冲突或hash值相差为5的倍数)、服务D对应线程池3。由于服务E、F的标识为true,所以进入专用线程池组。线程池组内的线程池数量是3个,按空闲分配机制,申请空闲线程池发起服务调用。假设服务调用装置分配线程池之后,服务E对应线程池1、服务F对应线程池2。分配线程池后线程池1、2将为占用状态。服务E和服务F将长期占用该线程池,直到人为迁出或者长时间无请求老化迁出(时长可配),将服务E和服务F迁出之后,线程池1、2可恢复为空闲状态。
3)、服务调用装置周期性检测所有普通服务(服务A、B、C、D)的KPI指标,包括各服务调用时延和调用成功率等,可以理解,便于示例图9仅示出了调用时延。在某一周期,检测到服务C的调用时延大于500毫秒(可调),达到时延阈值,则将服务C迁移到异常线程池组进行隔离观察,以减少对其它服务的影响。其中,异常线程池组内的线程池选择规则同缺省公共线程池组,将服务C分配到线程池2中,直到服务C的恢复正常,再迁回缺省公共线程池组。
4)、服务调用装置周期性对所有普通服务(服务A、B、C、D)的KPI如并发量进行排序,得出并发量最大的两个服务如得到TOP2的服务A、B,则将服务A、B迁移到大并发线程池组,直到服务A、B的并发量跌出TOP2(或者发生故障)。将服务A和服务B迁移到大并发线程池组之后,依据空闲分配原则分配线程池,如服务A分配为线程池1、服务B分配为线程池2。可理解,在大并发线程池组中的服务A和B发生故障的情况下,可以将服务A和B迁移到异常线程池组。
5)、对于已经迁移到大并发线程池组和异常线程池组的服务,服务调用装置可以进行记录,后续服务调用时直接进入对应线程池组。
实施本申请实施例,一方面,实现了海量服务调用的故障隔离场景,保证了系统的高可靠性。另一方面,可以在线程池有限的情况下,动态迁移目标服务,大大减少了系统大量线程调度的开销。可理解的是,图9所示的服务调用方法中,未详尽描述的实现方式,还可以参考前述实施例,这里不再赘述。
图10是本申请实施例提供的一种服务调用装置的结构示意图,如图10所示,该服务调用装置至少包括:
接收单元1001,用于接收目标服务的调用指令;
调用单元1002,用于通过第一线程池组中的第一线程池调用上述目标服务,上述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;
获取单元1003,用于获取上述目标服务的运行信息,上述运行信息用于描述上述目标服务的关键绩效指标;
迁移单元1004,用于在上述运行信息异常的情况下,将上述目标服务迁移到目标线程池组。
可选的,上述运行信息异常的情况包括上述目标服务的并发量符合预设条件的情况;
上述迁移单元1004,具体用于将上述目标服务迁移到第二线程池组。
可选的,上述迁移单元1004,还用于在上述目标服务的并发量不符合上述预设条件的情况下,将上述目标服务从上述第二线程池组迁移到上述第一线程池组;
或者,上述迁移单元1004,还用于在上述目标服务的调用时延异常的情况下,或者,在上述目标服务的调用成功率异常的情况下,将上述目标服务从上述第二线程池组迁移到第三线程池组。
可选的,上述运行信息异常的情况包括上述目标服务的调用时延异常的情况,或上述运行信息异常的情况包括上述目标服务的调用成功率异常的情况;
上述迁移单元1004,具体用于将上述目标服务迁移到第三线程池组;
上述迁移单元1004,还用于在上述目标服务的调用时延正常的情况下,且在上述目标服务的调用成功率正常的情况下,将上述目标服务从上述第三线程池组迁移到上述第一线程池组。池
实施本申请实施例,可以在通过第一线程池组中的第一线程调池用目标服务的情况下,获取该目标服务的运行信息,从而在该目标服务的并发量符合预设条件的情况下,将该目标服务迁移到第二线程池组,通过第二线程池组中的线程池调用该目标服务;或者在该目标服务的调用时延或调用成功率异常的情况下,将该目标服务迁移至第三线程池组,通过第三线程池组中的线程池调用该目标服务。通过为目标服务合理地分配线程池,可以有效地隔离该目标服务,提高了系统的可靠性。
可选的,上述调用指令包括第一标识;上述调用单元1002,还用于通过第四线程池组中的第二线程池调用上述目标服务,上述第四线程池组包括至少一个线程池,每个线程池包括至少一个线程。
具体地,上述目标服务的并发量符合预设条件的情况包括:上述目标服务的并发量较大;上述目标服务的调用时延异常的情况包括:上述目标服务的调用时延大于时延阈值,或者,上述目标服务的调用时延较长;上述目标服务的调用成功率异常的情况包括:上述目标服务的调用成功率小于成功率阈值,或者,上述目标服务的调用成功率较低。
具体地,在将上述目标服务迁移到上述第二线程池组的过程中,或者,在将上述目标服务迁移到上述第三线程池组的过程中,依据空闲分配原则为上述目标服务分配线程池。
具体地,在通过上述第四线程池组调用上述目标服务的过程中,依据空闲分配原则为上述目标服务分配线程池。
其中,图10所示的服务调用装置可用于执行图6至图9所示的服务调用方法,具体实现方式可以参考图6至图9所示的服务调用方法,这里不再详述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriberline,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital versatiledisc,DVD))、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:只读存储器(read-only memory,ROM)或随机存储存储器(random access memory,RAM)、磁碟或者光盘等各种可存储程序代码的介质。
Claims (16)
1.一种服务调用方法,其特征在于,包括:
接收目标服务的调用指令,通过第一线程池组中的第一线程池调用所述目标服务,所述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;
获取所述目标服务的运行信息,所述运行信息用于描述所述目标服务的关键绩效指标;
在所述运行信息异常的情况下,将所述目标服务迁移到目标线程池组。
2.根据权利要求1所述的方法,其特征在于,所述运行信息异常的情况包括所述目标服务的并发量符合预设条件的情况;所述将所述目标服务迁移到目标线程池组包括:
将所述目标服务迁移到第二线程池组。
3.根据权利要求2所述的方法,其特征在于,所述将所述目标服务迁移到第二线程池组之后,所述方法还包括:
在所述目标服务的并发量不符合所述预设条件的情况下,将所述目标服务从所述第二线程池组迁移到所述第一线程池组;
或者,在所述目标服务的调用时延异常的情况下,或者,在所述目标服务的调用成功率异常的情况下,将所述目标服务从所述第二线程池组迁移到第三线程池组。
4.根据权利要求1所述的方法,其特征在于,所述运行信息异常的情况包括所述目标服务的调用时延异常的情况,或所述运行信息异常的情况包括所述目标服务的调用成功率异常的情况;所述将所述目标服务迁移到目标线程池组包括:
将所述目标服务迁移到第三线程池组;
所述将所述目标服务迁移到目标线程池组之后,所述方法还包括:
在所述目标服务的调用时延正常的情况下,且在所述目标服务的调用成功率正常的情况下,将所述目标服务从所述第三线程池组迁移到所述第一线程池组。
5.根据权利要求1所述的方法,其特征在于,所述调用指令包括第一标识,所述接收目标服务的调用指令之后,所述方法还包括:
通过第四线程池组中的第二线程池调用所述目标服务,所述第四线程池组包括至少一个线程池,每个线程池包括至少一个线程。
6.根据权利要求2或4所述的方法,其特征在于,所述目标服务的并发量符合预设条件的情况包括:所述目标服务的并发量较大;
所述目标服务的调用时延异常的情况包括:所述目标服务的调用时延大于时延阈值,或者,所述目标服务的调用时延较长;
所述目标服务的调用成功率异常的情况包括:所述目标服务的调用成功率小于成功率阈值,或者,所述目标服务的调用成功率较低。
7.根据权利要求2或4所述的方法,其特征在于,在将所述目标服务迁移到所述第二线程池组的过程中,或者,在将所述目标服务迁移到所述第三线程池组的过程中,依据空闲分配原则为所述目标服务分配线程池。
8.一种服务调用装置,其特征在于,包括:
接收单元,用于接收目标服务的调用指令;
调用单元,用于通过第一线程池组中的第一线程池调用所述目标服务,所述第一线程池组包括至少一个线程池,每个线程池包括至少一个线程;
获取单元,用于获取所述目标服务的运行信息,所述运行信息用于描述所述目标服务的关键绩效指标;
迁移单元,用于在所述运行信息异常的情况下,将所述目标服务迁移到目标线程池组。
9.根据权利要求8所述的装置,其特征在于,所述运行信息异常的情况包括所述目标服务的并发量符合预设条件的情况;
所述迁移单元,具体用于将所述目标服务迁移到第二线程池组。
10.根据权利要求9所述的装置,其特征在于,
所述迁移单元,还用于在所述目标服务的并发量不符合所述预设条件的情况下,将所述目标服务从所述第二线程池组迁移到所述第一线程池组;
或者,所述迁移单元,还用于在所述目标服务的调用时延异常的情况下,或者,在所述目标服务的调用成功率异常的情况下,将所述目标服务从所述第二线程池组迁移到第三线程池组。
11.根据权利要求8所述的装置,其特征在于,所述运行信息异常的情况包括所述目标服务的调用时延异常的情况,或所述运行信息异常的情况包括所述目标服务的调用成功率异常的情况;
所述迁移单元,具体用于将所述目标服务迁移到第三线程池组;
所述迁移单元,还用于在所述目标服务的调用时延正常的情况下,且在所述目标服务的调用成功率正常的情况下,将所述目标服务从所述第三线程池组迁移到所述第一线程池组。
12.根据权利要求8所述的装置,其特征在于,所述调用指令包括第一标识;
所述调用单元,还用于通过第四线程池组中的第二线程池调用所述目标服务,所述第四线程池组包括至少一个线程池,每个线程池包括至少一个线程。
13.根据权利要求9或11所述的装置,其特征在于,所述目标服务的并发量符合预设条件的情况包括:所述目标服务的并发量较大;
所述目标服务的调用时延异常的情况包括:所述目标服务的调用时延大于时延阈值,或者,所述目标服务的调用时延较长;
所述目标服务的调用成功率异常的情况包括:所述目标服务的调用成功率小于成功率阈值,或者,所述目标服务的调用成功率较低。
14.根据权利要求9或11所述的装置,其特征在于,在将所述目标服务迁移到所述第二线程池组的过程中,或者,在将所述目标服务迁移到所述第三线程池组的过程中,依据空闲分配原则为所述目标服务分配线程池。
15.一种服务调用装置,其特征在于,包括:处理器,存储器和收发器;其中,所述处理器、所述存储器和所述收发器通过线路互联,所述存储器中存储有程序指令;所述程序指令被所述处理器执行时,使所述处理器执行如权利要求1至7任意一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被服务调用装置的处理器执行时,使所述处理器执行如权利要求1至7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810184991.1A CN110231981B (zh) | 2018-03-06 | 2018-03-06 | 服务调用方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810184991.1A CN110231981B (zh) | 2018-03-06 | 2018-03-06 | 服务调用方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110231981A true CN110231981A (zh) | 2019-09-13 |
CN110231981B CN110231981B (zh) | 2022-12-13 |
Family
ID=67861804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810184991.1A Active CN110231981B (zh) | 2018-03-06 | 2018-03-06 | 服务调用方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110231981B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971680A (zh) * | 2019-11-22 | 2020-04-07 | 拉扎斯网络科技(上海)有限公司 | 通信方法、装置、系统、电子设备及可读存储介质 |
CN111782364A (zh) * | 2020-06-30 | 2020-10-16 | 北京达佳互联信息技术有限公司 | 服务调用方法、装置、电子设备及存储介质 |
CN112235428A (zh) * | 2020-12-16 | 2021-01-15 | 太平金融科技服务(上海)有限公司 | 调用请求处理方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1297198A (zh) * | 1999-11-18 | 2001-05-30 | 国际商业机器公司 | 管理计算环境线程池以避免死锁情况的方法、系统和程序产品 |
CN101176066A (zh) * | 2005-05-13 | 2008-05-07 | 英特尔公司 | 用于操作系统服务的透明支持 |
CN106330576A (zh) * | 2016-11-18 | 2017-01-11 | 北京红马传媒文化发展有限公司 | 容器化微服务自动伸缩及迁移调度的方法、系统和设备 |
US20170220281A1 (en) * | 2016-02-01 | 2017-08-03 | International Business Machines Corporation | Smart partitioning of storage access paths in shared storage services |
CN107341050A (zh) * | 2016-04-28 | 2017-11-10 | 北京京东尚科信息技术有限公司 | 基于动态线程池的服务处理方法和装置 |
CN107632889A (zh) * | 2017-06-28 | 2018-01-26 | 努比亚技术有限公司 | 一种实现服务降级的方法、设备及计算机可读存储介质 |
-
2018
- 2018-03-06 CN CN201810184991.1A patent/CN110231981B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1297198A (zh) * | 1999-11-18 | 2001-05-30 | 国际商业机器公司 | 管理计算环境线程池以避免死锁情况的方法、系统和程序产品 |
CN101176066A (zh) * | 2005-05-13 | 2008-05-07 | 英特尔公司 | 用于操作系统服务的透明支持 |
US20170220281A1 (en) * | 2016-02-01 | 2017-08-03 | International Business Machines Corporation | Smart partitioning of storage access paths in shared storage services |
CN107341050A (zh) * | 2016-04-28 | 2017-11-10 | 北京京东尚科信息技术有限公司 | 基于动态线程池的服务处理方法和装置 |
CN106330576A (zh) * | 2016-11-18 | 2017-01-11 | 北京红马传媒文化发展有限公司 | 容器化微服务自动伸缩及迁移调度的方法、系统和设备 |
CN107632889A (zh) * | 2017-06-28 | 2018-01-26 | 努比亚技术有限公司 | 一种实现服务降级的方法、设备及计算机可读存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971680A (zh) * | 2019-11-22 | 2020-04-07 | 拉扎斯网络科技(上海)有限公司 | 通信方法、装置、系统、电子设备及可读存储介质 |
CN110971680B (zh) * | 2019-11-22 | 2022-01-28 | 拉扎斯网络科技(上海)有限公司 | 通信方法、装置、系统、电子设备及可读存储介质 |
CN111782364A (zh) * | 2020-06-30 | 2020-10-16 | 北京达佳互联信息技术有限公司 | 服务调用方法、装置、电子设备及存储介质 |
CN112235428A (zh) * | 2020-12-16 | 2021-01-15 | 太平金融科技服务(上海)有限公司 | 调用请求处理方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110231981B (zh) | 2022-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11842208B2 (en) | Virtual provisioning with implementation resource boundary awareness | |
US10324749B2 (en) | Optimizing runtime performance of an application workload by minimizing network input/output communications between virtual machines on different clouds in a hybrid cloud topology during cloud bursting | |
US10013662B2 (en) | Virtual resource cost tracking with dedicated implementation resources | |
US20190258514A1 (en) | I/O Request Scheduling Method and Apparatus | |
CA2811020C (en) | Virtual resource cost tracking with dedicated implementation resources | |
US10203993B2 (en) | Method and system for continuous optimization of data centers by combining server and storage virtualization | |
US7519744B2 (en) | Method and apparatus for managing I/O paths on a storage network using priority | |
JP2011221660A (ja) | 管理方法及び管理装置 | |
CN110231981A (zh) | 服务调用方法及装置 | |
CN110287009A (zh) | 一种工作节点选择方法、装置、存储介质及服务器 | |
CN107944000A (zh) | 航班运价更新方法、装置、电子设备、存储介质 | |
US9514072B1 (en) | Management of allocation for alias devices | |
CN108762687A (zh) | Io服务质量控制方法、装置、设备及存储介质 | |
CN110750331B (zh) | 一种针对教育桌面云应用的容器集群调度方法及平台 | |
CN108696581A (zh) | 分布式信息的缓存方法、装置、计算机设备以及存储介质 | |
CN110287022A (zh) | 一种调度节点选择方法、装置、存储介质及服务器 | |
CN106406494B (zh) | 一种处理器调度的方法及终端 | |
US20200404047A1 (en) | Configurable connection reset for customized load balancing | |
US20180210650A1 (en) | Virtual machine storage management queue | |
CN108696373A (zh) | 虚拟资源分配方法、nfvo和系统 | |
CN106537323B (zh) | 存储设备访问调解 | |
US20180052715A1 (en) | Computer system including server storage system | |
CN109656714A (zh) | 一种虚拟化显卡的gpu资源调度方法 | |
CN107526529A (zh) | 用于虚拟机的方法和装置 | |
US10949089B2 (en) | Reconfiguring data objects using batch processing of concatenated components |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200218 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 210012 HUAWEI Nanjing base, 101 software Avenue, Yuhuatai District, Jiangsu, Nanjing Applicant before: HUAWEI SOFTWARE TECHNOLOGIES Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |