本发明公开一种定位服务超时的方法、装置和存储介质,方法包括:记录所述请求到达第一服务的时间,并转发所述请求至代理服务器;记录所述请求到达第一代理服务器的时间,并转发所述请求至第二服务;若第二服务即为目标服务,则记录所述请求到达第二服务的时间,并返回请求响应;记录所述请求响应到达第一代理服务器的时间,并返回所述请求响应至第一服务;记录所述请求响应到达第一服务的时间,并返回所述请求响应至客户端;记录所述请求响应到达客户端的时间;进行时间对比,定位服务超时位置。本发明用于实现超时问题发生位置的快速定位。
[if !supportLists]1. [endif]一种定位服务超时的方法,其特征在于,包括:
记录所述请求到达第一服务的时间,并转发所述请求至代理服务器;
记录所述请求到达第一代理服务器的时间,并转发所述请求至第二服务;
若第二服务即为目标服务,则记录所述请求到达第二服务的时间,并返回请求响应;
记录所述请求响应到达第一代理服务器的时间,并返回所述请求响应至第一服务;
记录所述请求响应到达第一服务的时间,并返回所述请求响应至客户端;
记录所述请求响应到达客户端的时间;
根据所述请求到达第一服务的时间、所述请求到达第一代理服务器的时间、所述请求到达第二服务的时间、所述请求响应到达第一代理服务器的时间、所述请求响应到达第一服务的时间及所述请求响应到达客户端的时间进行对比,定位服务超时位置。
[if !supportLists]2. [endif]根据权利要求1所述一种定位服务超时的方法,其特征在于,若第二服务不是目标服务,则记录所述请求达到第二服务的时间,并转发所述请求至第二代理服务器。
[if !supportLists]3. [endif]根据权利要求2所述一种定位服务超时的方法,其特征在于,所述方法进一步包括:记录所述请求到达第二代理服务器的时间,并转发所述请求至下一服务;在下一服务为目标服务时,记录所述请求到达目标服务的时间,并返回请求响应。
[if !supportLists]4. [endif]根据权利要求3所述一种定位服务超时的方法,其特征在于,在下一服务不为目标服务时,记录所述请求达到该下一服务的时间,并转发所述请求至下一代理服务器。
[if !supportLists]5. [endif]根据权利要求1所述一种定位服务超时的方法,其特征在于,所述方法进一步包括代理服务器配置,配置内容包括请求目录、请求标识、每一请求的转发目标、请求到达时间、请求响应到达时间。
[if !supportLists]6. [endif]根据权利要求1所述一种定位服务超时的方法,其特征在于,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,若T2与T3的时间记录一致,T2相对于T1的时间差大于预设时间,则第一服务发出有延迟,服务超时问题定位在第一服务。
[if !supportLists]7. [endif]根据权利要求1所述一种定位服务超时的方法,其特征在于,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,所述请求响应到达第一代理服务器的时间为T4、所述请求响应到达第一服务的时间为T5,若T1、T2和T3的时间记录一致,T4和T5的时间记录一致,T4相对于T3的时间差大于预设时间,则第二服务处理请求超时,服务超时问题定位在第二服务。
[if !supportLists]8. [endif]根据权利要求1所述一种定位服务超时的方法,其特征在于,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,所述请求响应到达第一代理服务器的时间为T4、所述请求响应到达第一服务的时间为T5,所述请求响应到达客户端的时间为T6,若T1、T2和T3的时间记录一致,T4和T5的时间记录一致,T4相对于T3的时间差在预设范围内,T6超出预设时间,则第一服务处理请求响应的返回逻辑有延迟,服务超时问题定位在第一服务。
[if !supportLists]9. [endif]一种定位服务超时的装置,用于实现权利要求1-8中任一项所述的方法,其特征在于,所述装置包括客户端、第一服务、至少一个下一级服务和至少一个代理服务器,其中,
所述客户端,用于发出请求和接收返回的请求响应,同时记录请求响应的返回时间;
所述第一服务,用于接收及转发请求,记录请求到达时间和请求响应到达时间;
至少一个所述代理服务器,用于接收及转发请求,并记录请求到达时间,以及接收及转发请求响应,并记录请求响应到达时间;
至少一个所述下一级服务,用于记录请求到达时间,基于请求执行业务逻辑并在执行完毕后返回请求响应。
[if !supportLists]10. [endif]一种存储介质,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行权利要求1-8中任一所述方法的步骤。
一种定位服务超时的方法、装置和存储介质
技术领域
本发明涉及计算机技术领域,具体为一种定位服务超时的方法、装置和存储介质。
背景技术
服务器端的后端服务通常会基于某个框架(比如spring)开发业务逻辑,在进入某个服务的业务逻辑前,由框架接收请求并进行参数封装,然后调用业务代码,如果直接在业务代码里通过打印日志记录请求进入时间,则在请求量大到一定程度时打印出的时间会产生误差。因为服务本身由于高并发的性能瓶颈会出现卡顿,这样服务自身记录时间就会存在延迟,而数据不准确导致无法作为问题定位的依据,进而无法判断请求真正进入后端服务的时间。
对于这种问题,目前比较常见的排查方法是网卡抓包方式,通过抓包工具(比如tcpdump)监听服务所在服务器的网卡,记录请求到达网卡的时间来确认请求是否发出。例如客户端A发出请求,当请求到达服务B时,抓包工具会记录请求到达服务B的时间,服务B继续请求服务C,此时抓包工具会继续记录服务C收到请求的时间,以及服务C返回请求后服务B收到请求返回的时间,最后根据服务B收到客户端A发出请求的时间、服务C收到服务B发出请求的时间和服务B收到服务C返回请求的时间三者之间的对比,确定以下3种情况:1、因为服务B发生了请求积压导致没有及时请求服务C导致超时;2、服务B发出了请求,并且请求到达了C,但是服务C没有来得及处理请求导致的超时;3、服务B请求了C,并且C在规定时间内返回了请求,但是B收到请求后,在后续处理结果数据超时,导致没有及时将结果返回给客户端导致超时。
前述网卡抓包方式中,由于抓包工具会记录经过网卡的所有数据,所以在请求量极大时,抓包工具抓到的数据包会非常大,而此时需要解析数据包,通过对比每个请求发出的时间和返回的时间来进行问题定位,导致效率非常低,且操作极为不便。如公开号CN111143179A的中国专利于2020年5月12日公开的一种定位性能瓶颈的方法,通过抓包工具对各个时刻分别进行结点抓包并统计分析来定位性能瓶颈结点,虽然实现了性能瓶颈定位,但是其抓包方式极大影响了工作效率。
发明内容
为克服上述现有技术的不足,本发明提供一种定位服务超时的方法、装置和存储介质,用于实现超时问题发生位置的快速定位。
根据本发明说明书的一方面,提供一种定位服务超时的方法,包括:
记录所述请求到达第一服务的时间,并转发所述请求至代理服务器;
记录所述请求到达第一代理服务器的时间,并转发所述请求至第二服务;
若第二服务即为目标服务,则记录所述请求到达第二服务的时间,并返回请求响应;
记录所述请求响应到达第一代理服务器的时间,并返回所述请求响应至第一服务;
记录所述请求响应到达第一服务的时间,并返回所述请求响应至客户端;
记录所述请求响应到达客户端的时间;
根据所述请求到达第一服务的时间、所述请求到达第一代理服务器的时间、所述请求到达第二服务的时间、所述请求响应到达第一代理服务器的时间、所述请求响应到达第一服务的时间及所述请求响应到达客户端的时间进行对比,定位服务超时位置。
上述技术方案针对多个服务之间存在依赖关系的系统架构,通过在服务之间增加代理服务器,由代理服务器获取准确的请求发出时间和请求返回时间,根据记录的请求或请求响应到达各服务与代理服务器的时间进行对比,确定超时问题发生的位置,实现服务超时的快速定位;相对于现有的抓包方式而言,该技术方案不受请求量的影响,在高请求量的情况下,也能实现服务超时的准确定位,极大提高了超时定位的准确率和效率。
进一步地,由于代理服务器只做请求转发功能,没有其他的业务逻辑,可以认为其不存在延迟,因此,通过代理服务器记录的请求发出时间和请求返回时间,可以准确知道请求何时发出以及请求响应何时返回,从而保证了通过时间对比确定服务超时问题的准确性。
作为进一步的技术方案,若第二服务不是目标服务,则记录所述请求达到第二服务的时间,并转发所述请求至第二代理服务器。
由于一个应用系统中通常有多个服务,服务与服务之间存在依赖关系,所以对于客户端发出的请求,可能需要多个服务之间的转发才能到达目标服务并执行请求所对应的业务逻辑,因此,需要通过多个代理服务器进行请求转发,以确保任意两个服务之间都具有代理服务器提供的请求到达时间和请求响应到达时间作为比对基准,进而保证通过时间比对定位服务超时问题的准确性。
作为进一步的技术方案,所述方法进一步包括:记录所述请求到达第二代理服务器的时间,并转发所述请求至下一服务;在下一服务为目标服务时,记录所述请求到达目标服务的时间,并返回请求响应。
对于需要多个相互依赖的服务来完成的请求,通过服务到代理服务器再到服务的逐级转发,将客户端的请求转发到目标服务,在此期间,可根据请求所对应的多个服务之间的依赖关系,进行代理服务器的配置,使得任意两个服务之间均通过代理服务器转发请求,且各代理服务器记录的请求达到时间和请求响应到达时间中包含请求标识,以在通过脚本进行时间比对时能够准确获取每个请求所对应的时间线,保证服务超时定位的准确性。
作为进一步的技术方案,在下一服务不为目标服务时,记录所述请求达到该下一服务的时间,并转发所述请求至下一代理服务器。
进一步地,所述请求具有请求标识,通过该请求标识能够识别出将要转发的下一服务,然后通过代理服务器转发的形式将当前请求转发至下一服务。
具体地的,第一代理服务器、第二代理服务器或下一代理服务器均指nginx代理服务器。
作为进一步的技术方案,所述方法进一步包括代理服务器配置,配置内容包括请求目录、请求标识、每一请求的转发目标、请求到达时间、请求响应到达时间。
具体地,所述请求目录包括需要转发的请求的数量。所述请求标识用于识别每一请求。所述每一请求的转发目标包括每一请求需要转发到的目标服务及转发过程中经过的每一服务。
作为进一步的技术方案,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,若T2与T3的时间记录一致,T2相对于T1的时间差大于预设时间,则第一服务发出有延迟,服务超时问题定位在第一服务。
由于第一代理服务器只做请求转发,不执行业务逻辑,因此认为其没有延迟,故在正常情况下,T1、T2和T3的时间记录一致,即,请求到达第一服务、第一代理服务器和第二服务的时间一致。
但是实际情况中,同一时刻到达第一服务的请求可能非常多,这就导致第一服务在接收到请求并转发的过程中,会出现超时现象;同样,同一时刻到达第二服务的请求也可能很多,导致第二服务接收到请求并执行业务逻辑然后返回请求响应的过程中,也会出现超时现象。
因此,客户端在发出请求时,会预设一个第一期望时间,第一服务将请求通过第一代理服务器转发至第二服务时,会预设一个第二期望时间,只要请求在该第二期望时间内返回第一服务并在该第一期望时间内返回客户端,都认为没有出现服务超时,否则认为出现了服务超时。
在认定出现服务超时后,根据第一服务、第一代理服务器、第二服务三方记录的请求到达时间,通过脚本进行数据分析和时间对比,定位服务超时的位置。
具体地,只要T2相对于T1的时间差在第一期望时间内,则认为第一服务在发出请求时没有出现服务超时。
作为进一步的技术方案,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,所述请求响应到达第一代理服务器的时间为T4、所述请求响应到达第一服务的时间为T5,若T1、T2和T3的时间记录一致,T4和T5的时间记录一致,T4相对于T3的时间差大于预设时间,则第二服务处理请求超时,服务超时问题定位在第二服务。
具体地,只要T4相对于T3的时间差在第二期望时间内,则认为第二服务在执行请求对应的业务逻辑时没有出现服务超时。
作为进一步的技术方案,记录所述请求到达第一服务的时间为T1,所述请求到达第一代理服务器的时间为T2,所述请求到达第二服务的时间为T3,所述请求响应到达第一代理服务器的时间为T4、所述请求响应到达第一服务的时间为T5,所述请求响应到达客户端的时间为T6,若T1、T2和T3的时间记录一致,T4和T5的时间记录一致,T4相对于T3的时间差在预设范围内,T6超出预设时间,则第一服务处理请求响应的返回逻辑有延迟,服务超时问题定位在第一服务。
具体地,由于请求响应返回第一服务后,第一服务会进行后续逻辑处理,因此会出现T1、T2、T3、T4和T5的时间对比均符合要求,而T6显示整体超时的情况,故此时可定位服务超时出现在第一服务处理返回逻辑上。
根据本发明说明书的一方面,提供一种定位服务超时的装置,用于实现所述的方法,所述装置包括客户端、第一服务、至少一个下一级服务和至少一个代理服务器,其中,
所述客户端,用于发出请求和接收返回的请求响应,同时记录请求响应的返回时间;
所述第一服务,用于接收及转发请求,记录请求到达时间和请求响应到达时间;
至少一个所述代理服务器,用于接收及转发请求,并记录请求到达时间,以及接收及转发请求响应,并记录请求响应到达时间;
至少一个所述下一级服务,用于记录请求到达时间,基于请求执行业务逻辑并在执行完毕后返回请求响应。
上述技术方案通过代理服务器实现任意两个相互依赖的服务之间的请求转发,同时记录请求到达代理服务器及其前后两个服务的时间,以及记录请求响应返回代理服务器及其前后两个服务的时间,并对记录的各时间进行对比分析,快速定位服务超时位置。
进一步地,考虑到微服务应用系统中,多个服务之间相互依赖,一个请求可能需要经过多个代理服务器的转发才能到达目标服务进行处理,因此需要配置多个代理服务器,确保任意两个服务之间均通过代理服务器转发,进而保证服务超时定位的准确性。
根据本发明说明书的一方面,提供一种存储介质,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行述方法的步骤。
与现有技术相比,本发明的有益效果在于:
[if !supportLists](1)[endif]本发明针对多个服务之间存在依赖关系的系统架构,通过在服务之间增加代理服务器,由代理服务器获取准确的请求发出时间和请求返回时间,根据记录的请求或请求响应到达各服务与代理服务器的时间进行对比,确定超时问题发生的位置,实现服务超时的快速定位;相对于现有的抓包方式而言,本发明不受请求量的影响,在高请求量的情况下,也能实现服务超时的准确定位,极大提高了超时定位的准确率和效率。
[if !supportLists](2)[endif]本发明根据服务与代理服务器所记录的请求到达时间和请求响应返回时间,通过脚本进行数据分析和时间对比,可以快速定位每次请求的超时瓶颈属于哪种类型,找到问题原因,然后能针对性的对服务进行性能优化,提升服务质量,降低超时情况。
附图说明
图1为根据本发明实施例的定位服务超时方法的流程示意图。
图2为根据本发明一实施方式的定位服务超时方法的流程示意图。
图3为根据本发明又一实施方式的定位服务超时方法的流程示意图。
图4为根据本发明另一实施方式的定位服务超时方法的流程示意图。
具体实施方式
以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述发实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
根据本发明说明书的一方面,提供一种定位服务超时的方法,如图1所示,包括以下步骤:
步骤1,客户端发出请求至第一服务。客户端在发出请求时,设置一第一期望时间,希望第一服务在第一期望时间内返回请求处理结果。
因为第一服务在同一时间可能会接收到多个请求,导致转发过程出现延迟,因此设置第一期望时间,只要第一服务在第一期望时间内返回请求处理结果,则认为该请求的处理过程没有出现服务超时。
步骤2,第一服务接收请求,记录请求到达时间,并转发请求至代理服务器。同时,第一服务设置一第二期望时间,希望代理服务器转发的下一服务能够在第二期望时间内返回请求处理结果。
优选地,上述代理服务器可以为nginx服务器。
因为代理服务器只做转发,不导致延迟,因此在理想情况下,认为请求达到nginx代理服务器的时间与请求到达第二服务的时间一致,而同一时刻到达第二服务的请求可能有多个(包括通过其他代理服务器转发的请求),导致第二服务在执行业务逻辑时出现超时,因此设置第二期望时间,只要第二服务在第二期望时间内返回请求处理结果,则认为第二服务的处理过程没有出现服务超时。
步骤3,代理服务器记录请求到达时间,并转发请求至第二服务。
步骤4,若第二服务即为目标服务,则第二服务记录请求到达时间,针对请求执行业务逻辑,并将执行结果作为请求响应返回至代理服务器。
由于微服务应用系统中,多个服务之间相互依赖,一个请求的执行可能需要多个服务的转发才能到达最终执行业务逻辑的目标服务位置,因此,在收到一个代理服务器转发的请求后,需要判断当前服务是否为目标服务,若不是,则需要根据请求中携带的请求标识得到下一个要转发的服务,然后通过另一代理服务器转发,直至到达最终的目标服务位置。
步骤5,代理服务器记录请求响应到达时间,并转发请求响应至第一服务。
步骤6,第一服务记录请求响应到达时间并返回请求响应至客户端,客户端接收请求响应,记录所述请求响应到达客户端的时间,并显示该请求的整个处理时间。
步骤7,根据所述请求到达第一服务的时间、所述请求到达第一代理服务器的时间、所述请求到达第二服务的时间、所述请求响应到达第一代理服务器的时间、所述请求响应到达第一服务的时间及所述请求响应到达客户端的时间进行对比,定位服务超时位置。
若第二服务不是目标服务,则记录所述请求达到第二服务的时间,并转发所述请求至第二代理服务器。
由于一个应用系统中通常有多个服务,服务与服务之间存在依赖关系,所以对于客户端发出的请求,可能需要多个服务之间的转发才能到达目标服务并执行请求所对应的业务逻辑,因此,需要通过多个代理服务器进行请求转发,以确保任意两个服务之间都具有代理服务器提供的请求到达时间和请求响应到达时间作为比对基准,进而保证通过时间比对定位服务超时问题的准确性。
进一步地,记录所述请求到达第二代理服务器的时间,并转发所述请求至下一服务;在下一服务为目标服务时,记录所述请求到达目标服务的时间,并返回请求响应。
对于需要多个相互依赖的服务来完成的请求,通过服务到代理服务器再到服务的逐级转发,将客户端的请求转发到目标服务,在此期间,可根据请求所对应的多个服务之间的依赖关系,进行代理服务器的配置,使得任意两个服务之间均通过代理服务器转发请求,且各代理服务器记录的请求达到时间和请求响应到达时间中包含请求标识,以在通过脚本进行时间比对时能够准确获取每个请求所对应的时间线,保证服务超时定位的准确性。
在下一服务不为目标服务时,记录所述请求达到该下一服务的时间,并转发所述请求至下一代理服务器。
进一步地,所述请求具有请求标识,通过该请求标识能够识别出将要转发的下一服务,然后通过代理服务器转发的形式将当前请求转发至下一服务。
具体地,第一代理服务器、第二代理服务器或下一代理服务器均指nginx代理服务器。
所述方法进一步包括代理服务器配置,配置内容包括请求目录、请求标识、每一请求的转发目标、请求到达时间、请求响应到达时间。
具体地,所述请求目录包括需要转发的请求的数量。所述请求标识用于识别每一请求。所述每一请求的转发目标包括每一请求需要转发到的目标服务及转发过程中经过的每一服务。
作为一种实施方式,例如客户端A请求服务B时,希望服务B能在规定时间(假设1s)内返回,服务B又依赖了服务C,此时服务B调用服务C时期望服务C能在规定时间(假设100ms)内返回。当同一时刻客户端A大量请求服务B时,会出现超时返回的情况,此时超时原因可能有以下几种:
如图2所示,客户端A发出的请求在服务B发生了积压,积压时间已经超过1s,此时1s后服务B再去请求服务C时,即使该请求到达了服务C,但是实际上该次请求已经超时。
上述实施方式中,代理服务器记录的请求到达时间已经超过服务B记录的请求发出时间1s,说明服务B发出有延迟。
如图3所示,客户端A发出的请求已经到达了服务B,服务B继续请求服务C,服务C收到了请求,但是处理时间过长,导致请求返回服务B的时间已经超过了100ms,该次请求整体还是超时。
上述实施方式中,代理服务器记录的请求返回时间已经超过服务C记录的请求到达时间200ms,说明服务C处理请求超时。
如图4所示,客户端A发出的请求已经到达了服务B,服务B继续请求服务C,服务C收到了请求并在规定时间100ms内返回了请求,服务B收到了请求但是由于服务B还有业务处理逻辑,导致没有在整体时间1s内返回请求给客户端A,该次请求整体超时。
上述实施方式中,代理服务器记录的请求返回时间和服务B记录的请求返回时间一致,但是客户端A显示整体超时,说明超时问题出在服务B处理服务C返回的请求结果的后续逻辑上,即超时瓶颈出现在服务B中处理返回逻辑。
根据本发明说明书的一方面,提供一种定位服务超时的装置,用于实现所述的方法,所述装置包括客户端、第一服务、至少一个下一级服务和至少一个代理服务器,其中,
所述客户端,用于发出请求和接收返回的请求响应,同时记录请求响应的返回时间;
所述第一服务,用于接收及转发请求,记录请求到达时间和请求响应到达时间;
至少一个所述代理服务器,用于接收及转发请求,并记录请求到达时间,以及接收及转发请求响应,并记录请求响应到达时间;
至少一个所述下一级服务,用于记录请求到达时间,基于请求执行业务逻辑并在执行完毕后返回请求响应。
通过代理服务器实现任意两个相互依赖的服务之间的请求转发,同时记录请求到达代理服务器及其前后两个服务的时间,以及记录请求响应返回代理服务器及其前后两个服务的时间,并对记录的各时间进行对比分析,快速定位服务超时位置。
进一步地,考虑到微服务应用系统中,多个服务之间相互依赖,一个请求可能需要经过多个代理服务器的转发才能到达目标服务进行处理,因此需要配置多个代理服务器,确保任意两个服务之间均通过代理服务器转发,进而保证服务超时定位的准确性。
根据本发明说明书的一方面,提供一种存储介质,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行述方法的步骤。
在本说明书的描述中,参考术语“一个实施方式”、“某些实施方式”、“示意性实施方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合所述实施方式或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案
网友评论