本申请涉及在线调试技术领域,特别涉及一种分布式系统的在线调试方法和系统。
背景技术:
传统的分布式系统中,主要是通过各个分布式节点的本地文件系统来写入日志式,这种方式对分析和解决分布式系统存在的问题而言,存在以下问题:
1、由于传统的日志系统,将日志存储在各个分布式节点本机上,而在分布式系统严格的权限要求下,不是所有人都有权限能够访问到各个分布式节点中存储的日志,因此,存在日志访问困难的问题。
2、由于分布式系统,在一次应用的响应过程中,可能经历很多部署在不同分布式节点的模块,而每个模块是独立生成并存储自己模块的日志,因此在一次响应过程中各个经历的模块的日志是独立存放的,因此,在调试时,需要调试人员从不同的模块上分别查找日志,非常不便。此外,由于分布式系统的并行特点,不同的模块上的日志的上下文相关性不明显,这也为调试带来了极大的困难。
3、分布式系统中的每个模块是以独立的集群的形式对外服务,集群内部由成百上千台机器组成。由于负载均衡的缘故,每次响应某一请求的机器都可能不一样,这就导致调试人员收集某次请求相关的日志十分困难、低效。
4、分布式系统每秒钟需要处理成百上千的请求,每次请求都会把系统内部运行状态输出到日志里,造成日志内容很快膨胀,因此,很难分辨某次请求的日志。而且传统的日志中多个进程会同时写这一份日志文件,这个也会导致日志中充斥着其他进程写入的跟该次响应无关的日志,更加不便于该次请求的日志的查找,导致了分析效率较低。
技术实现要素:
本申请旨在至少在一定程度上解决上述技术问题。
为此,本申请的第一个目的在于提出一种分布式系统的在线调试方法,降低了调试日志收集难度,提高了日志收集效率。
本申请的第二个目的在于提出一种分布式系统的在线调试系统。
为达上述目的,根据本申请第一方面实施例提出了一种分布式系统的在线调试方法,包 括以下步骤:第i分布式节点接收调试信息收集指令,其中,所述调试信息收集指令包括收集标识,其中,i为正整数;所述第i分布式节点根据所述调试信息收集指令进入在线调试模式,并收集调试信息;所述第i分布式节点将所述调试信息发送至服务器,其中,所述调试信息具有与所述调试信息收集指令对应的编号;所述第i分布式节点将所述调试信息收集指令发送至第i+1分布式节点。
本申请实施例的分布式系统的在线调试方法,可分布式系统中的分布式节点在接收包括收集标识的调试信息收集指令,进入在线调试模式,并收集调试信息,发送至服务器,通过收集标识的标识作用可有针对性地对调试信息进行收集,从而避免调试信息与其他运行日志信息相混淆,且能够大大降低日志膨胀的程度。此外,调试信息具有与调试信息收集指令对应的编号,从而可根据编号对不同调试信息收集指令对应调试信息进行区别,便于调试信息的收集、查找和关联。因此,本申请实施例降低了调试日志收集难度,提高了日志收集效率,且便于调试人员对调试信息进行整体分析,能够提高调试效率。
本申请第二方面实施例提供了一种分布式系统的在线调试系统,包括:多个分布式节点和服务器,其中,分布式节点用于接收调试信息收集指令,其中,所述调试信息收集指令包括收集标识,并根据所述调试信息收集指令进入在线调试模式,并收集调试信息,以及将所述调试信息发送至所述服务器,其中,所述调试信息具有与所述调试信息收集指令对应的编号,并将所述调试信息收集指令发送至下一分布式节点;所述服务器用于接收所述分布式节点发送的调试信息。
本申请实施例的分布式系统的在线调试系统,可分布式系统中的分布式节点在接收包括收集标识的调试信息收集指令,进入在线调试模式,并收集调试信息,发送至服务器,通过收集标识的标识作用可有针对性地对调试信息进行收集,从而避免调试信息与其他运行日志信息相混淆,且能够大大降低日志膨胀的程度。此外,调试信息具有与调试信息收集指令对应的编号,从而可根据编号对不同调试信息收集指令对应调试信息进行区别,便于调试信息的收集、查找和关联。因此,本申请实施例降低了调试日志收集难度,提高了日志收集效率,且便于调试人员对调试信息进行整体分析,能够提高调试效率。
本申请的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本申请一个实施例的分布式系统的在线调试方法的流程图;
图2为根据本申请另一个实施例的分布式系统的在线调试方法的流程图;
图3为根据本申请另一个实施例的分布式系统的在线调试示意图;
图4为根据本申请一个实施例的分布式系统的在线调试系统的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。
下面参考附图描述根据本申请实施例的分布式系统的在线调试方法和系统。
图1为根据本申请一个实施例的分布式系统的在线调试方法的流程图。
如图1所示,根据本申请实施例的分布式系统的在线调试方法,包括:
s101,第i分布式节点接收调试信息收集指令,其中,调试信息收集指令包括收集标识,其中,i为正整数。
分布式系统由多个分布式节点组成。每个分布式节点可用于处理服务器发送的请求。客户端用户可根据处理需求向服务器发送应用程序的业务请求或在线调试请求等。例如,对于业务请求来说,可根据各个分布式节点的空闲度分配相应的节点来处理该业务请求。而对于在线调试请求来说,可根据客户端请求向需要收集调试信息的节点发送调试信息收集指令。
服务器可根据客户端发送的请求向分布式系统中相应的分布式节点发送相应的指令,以通过各个分布式节点对对客户端的请求进行处理。其中,在线调试请求与业务请求不同,服务器对于客户端的业务请求向分布式系统发送相应的业务处理指令;对于客户端的在线调试请求向分布式系统发送相应的调试信息收集指令。
本申请的实施例中,为了区分应用程序的业务请求与在线调试请求,服务器在发送调试信息收集指令时,可为调试信息收集指令设置收集标识。从而各个分布式节点可根据接收到的请求是否包括该收集标识判断出接收到的是否为调试信息收集指令,后续可仅针对调试信息收集指令对应的日志进行收集,更加方便,提高信息收集的效率。
在本申请的一个实施例中,服务器可根据客户端的请求向分布式系统中相应的分布式节点发送调试信息收集指令,以进行调试,各个分布式节点在调试过程中或者调试完成时,可将调试信息收集指令发送至下一分布式节点,以对下一分布式节点进行调试。因此,第i分布式节点接收的调试信息收集指令可由服务器发送或由第i-1分布式节点发送。
s102,第i分布式节点根据调试信息收集指令进入在线调试模式,并收集调试信息。
当第i分布式节点接收到调试信息收集指令后,可进入在线调试模式,即根据当前指令进行的操作为在线调试,则可对当前的处理过程进行记录,得到调试信息。
具体地,在本申请的实施例中,每个分布式节点中设置有traceapi(traceapplicationprogramminginterface跟踪应用程序接口),分布式节点可通过traceapi收集调试信息。
s103,第i分布式节点将调试信息发送至服务器,其中,调试信息具有与调试信息收集指令对应的编号。
第i分布式节点在收集调试信息后,可将收集到的调试信息发送至服务器,以由服务器根据其他分布式节点收到的同一调试信息收集指令对应的调试信息。
其中,该编号可以是预设长度的字符串。举例来说,该编号可以是64位的数字串。每个编号对应一次在线调试,用于唯一标识异常调试信息。也就是说,无论在哪个分布式节点中的调试信息,只要是同一次在线调试的调试信息,都具有相同的编号。从而可根据调试信息的编号将不同分布式节点上的同一调试信息收集指令对应调试信息进行关联,便于调试人员对调试信息进行整体分析。
s104,第i分布式节点将调试信息收集指令发送至第i+1分布式节点。
第i分布式节点在完成调试后,可向其下一分布式节点(即第i+1分布式节点)发送调试信息收集指令,以控制第i+1分布式节点收集调试信息。
本申请实施例的分布式系统的在线调试方法,可分布式系统中的分布式节点在接收包括收集标识的调试信息收集指令,进入在线调试模式,并收集调试信息,发送至服务器,通过收集标识的标识作用可有针对性地对调试信息进行收集,从而避免调试信息与其他运行日志信息相混淆,且能够大大降低日志膨胀的程度。此外,调试信息具有与调试信息收集指令对应的编号,从而可根据编号对不同调试信息收集指令对应调试信息进行区别,便于调试信息的收集、查找和关联。因此,本申请实施例降低了调试日志收集难度,提高了日志收集效率,且便于调试人员对调试信息进行整体分析,能够提高调试效率。
进一步地,图2为根据本申请另一个实施例的分布式系统的在线调试方法的流程图。
如图2所示,根据本申请的分布式系统的在线调试方法,包括步骤s201-s204,步骤s201-s204与图1中步骤s101-s104相同,进一步地,还可包括以步骤s205-s209。
s205,第i+1分布式节点接收调试信息收集指令,其中,调试信息收集指令包括收集标识。
s206,第i+1分布式节点根据调试信息收集指令进入在线调试模式,并收集调试信息。
s207,第i+1分布式节点将调试信息发送至服务器,其中,调试信息具有与调试信息收集指令对应的编号。
s208,第i分布式节点将调试信息收集指令发送至第i+2分布式节点。
s209,服务器接收分布式节点发送的调试信息,并根据调试信息中的编号进行汇总以生成调试日志。
每个需要收集调试信息的分布式节点在收集调试信息后,可将收集到的调试信息发送至服务器。服务器可接收各个分布式节点发送的调试信息,并根据调试信息中的编号对调试信息进行汇总。具体地,可将相同编号的调试信息进行合并,生成该编号对应的调试日志。
本申请的实施例中,服务器可具有访问接口,客户端可通过该访问接口调取服务器中的调试日志。具体地,客户端可接收用户输入的调试信息收集指令对应的编号,并根据该编号调取服务器中相应的调试日志。
本申请的一个实施例中,调试日志为可标记扩展语言xml格式。从而,便于客户端从服务器读取调试日志后进行结构化展示,便于分析,进一步提升了调试效率。
下面通过以下应用场景对本实施例的分布式系统的在线调试方法进行说明。如图3所示,服务端的分布式系统由fe(frontend,前端)、merger(业务逻辑节点)、qr(queryrewrite,查询词改写节点)、dn(datanode,数据节点)、sn(searchnode,检索节点)和ors(onlinerankingsystem,在线打分系统)这六个节点组成。需要收集调试信息的各个节点(ors、sn、merger三个节点),可通过traceapi来收集调试信息,并在完成调试后,通过网络将收集到的调试信息发送到服务器traceserver(跟踪服务器)。
具体地,merger节点在接收到一个指令时,可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息(mergertrace信息),发送至traceserver。其中,merger节点在判断包括收集标识之后,或者在收集调试信息完成之后,可向sn节点发送指令。sn节点可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息(sntrace信息),发送至traceserver。sn节点在判断包括收集标识之后,或者在收集调试信息完成之后,可向ors节点发送指令。ors节点可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息(orstrace信息),发送至traceserver。
traceserver可将ors、sn、merger三个节点的调试信息进行合并,生成一次调试请求对应的完整调试日志进行存储。客户端可通过ui(userinterface,用户界面)根据用户输入的编号读取服务器中存储的相应的调试日志,并进行解析,并在解析后结构化展示。
本申请的实施例中,收集调试信息的节点可在各自的调试信息收集完成后,各自分别向服务器发送调试信息,从而避免了发生阻塞的可能,且与其他处理请求的处理结果并不一起返回,因此,不影响处理请求的处理结果的响应时间,也不会侵入其他处理请求的处理结果,服务器中的敏感信息不易泄漏,提高了数据的安全性。
本申请实施例的分布式系统的在线调试方法,可根据编号对不同调试信息收集指令对应调试信息进行区别,且各个分布式节点可将收集的调试信息发送至服务器,以便服务器根据调试信息的编号对调试信息进行汇总以生成调试日志,降低了调试日志收集难度,提高了日 志收集效率,且便于调试人员对调试信息进行整体分析,能够提高了调试效率。
与上述实施例提供的分布式系统的在线调试方法相对应,本申请还提出一种分布式系统的在线调试系统。
图4为根据本申请一个实施例的分布式系统的在线调试系统的结构示意图。
如图4所示,根据本申请实施例的分布式系统的在线调试系统,包括:多个分布式节点10和服务器20。
具体地,分布式节点10用于接收调试信息收集指令,其中,调试信息收集指令包括收集标识,并根据调试信息收集指令进入在线调试模式,并收集调试信息,以及将调试信息发送至服务器20,其中,调试信息具有与调试信息收集指令对应的编号,并将调试信息收集指令发送至下一分布式节点。
服务器20用于接收分布式节点发送的调试信息。
其中,多个分布式节点10属于同一分布式系统。每个分布式节点10可用于处理服务器发送的请求。客户端用户可根据处理需求向服务器20发送应用程序的业务请求或在线调试请求等。例如,对于业务请求来说,可根据各个分布式节点的空闲度分配相应的节点来处理该业务请求。而对于在线调试请求来说,可根据客户端请求向需要收集调试信息的节点发送调试信息收集指令。
其中,该编号可以是预设长度的字符串。举例来说,该编号可以是64位的数字串。每个编号对应一次在线调试,用于唯一标识异常调试信息。也就是说,无论在哪个分布式节点中的调试信息,只要是同一次在线调试的调试信息,都具有相同的编号。从而可根据调试信息的编号将不同分布式节点上的同一调试信息收集指令对应调试信息进行关联,便于调试人员对调试信息进行整体分析。
服务器20可根据客户端发送的请求向分布式系统中相应的分布式节点10发送相应的指令,以通过各个分布式节点10对对客户端的请求进行处理。其中,在线调试请求与业务请求不同,服务器20对于客户端的业务请求向分布式系统发送相应的业务处理指令;对于客户端的在线调试请求向分布式系统发送相应的调试信息收集指令。
本申请的实施例中,为了区分应用程序的业务请求与在线调试请求,服务器20在发送调试信息收集指令时,可为调试信息收集指令设置收集标识。从而各个分布式节点10可根据接收到的请求是否包括该收集标识判断出接收到的是否为调试信息收集指令,后续可仅针对调试信息收集指令对应的日志进行收集,更加方便,提高信息收集的效率。
在本申请的一个实施例中,服务器20可根据客户端的请求向分布式系统中相应的分布式节点10发送调试信息收集指令,以进行调试,各个分布式节点10在调试过程中或者调试 完成时,可将调试信息收集指令发送至下一分布式节点,以对下一分布式节点进行调试。
因此,第i分布式节点接收的调试信息收集指令可由服务器发送或由第i-1分布式节点发送。当第i分布式节点接收到调试信息收集指令后,可进入在线调试模式,即根据当前指令进行的操作为在线调试,则可对当前的处理过程进行记录,得到调试信息。第i分布式节点在收集调试信息后,可将收集到的调试信息发送至服务器20,以由服务器20根据其他分布式节点收到的同一调试信息收集指令对应的调试信息。
第i分布式节点在完成调试后,可向其下一分布式节点(即第i+1分布式节点)发送调试信息收集指令,以控制第i+1分布式节点收集调试信息。由此,可依次控制每个需要收集调试信息的分布式节点收集调试信息。且每个需要收集调试信息的分布式节点都将收集的调试信息发送至服务器20。服务器20可接收各个分布式节点发送的调试信息,并根据调试信息中的编号对调试信息进行汇总。具体地,服务器20可将相同编号的调试信息进行合并,生成该编号对应的调试日志。
本申请的实施例中,服务器20可具有访问接口,客户端可通过该访问接口调取服务器中的调试日志。具体地,客户端可接收用户输入的调试信息收集指令对应的编号,并根据该编号调取服务器中相应的调试日志。
本申请的一个实施例中,调试日志为可标记扩展语言xml格式。从而,便于客户端从服务器读20取调试日志后进行结构化展示,便于分析,进一步提升了调试效率。
下面通过以下应用场景对本实施例的分布式系统的在线调试方法进行说明。如图3所示,服务端的分布式系统由fe(frontend,前端)、merger(业务逻辑节点)、qr(queryrewrite,查询词改写节点)、dn(datanode,数据节点)、sn(searchnode,检索节点)和ors(onlinerankingsystem,在线打分系统)这六个节点组成。需要收集调试信息的各个节点(ors、sn、merger三个节点),可通过traceapi来收集调试信息,并在完成调试后,通过网络将收集到的调试信息发送到服务器traceserver(跟踪服务器)。
具体地,merger节点在接收到一个指令时,可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息,发送至traceserver。其中,merger节点在判断包括收集标识之后,或者在收集调试信息完成之后,可向sn节点发送指令。sn节点可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息,发送至traceserver。sn节点在判断包括收集标识之后,或者在收集调试信息完成之后,可向ors节点发送指令。ors节点可判断该指令中是否包括收集标识,如果包括,则进入在线调试模式,并收集调试信息,发送至traceserver。
traceserver可将ors、sn、merger三个节点的调试信息进行合并,生成一次调试请求对应的完整调试日志进行存储。客户端可通过ui(userinterface,用户界面)根据用户输入 的编号读取服务器中存储的相应的调试日志,并进行解析,并在解析后结构化展示。
本申请的实施例中,收集调试信息的节点可在各自的调试信息收集完成后,各自分别向服务器发送调试信息,从而避免了发生阻塞的可能,且与其他处理请求的处理结果并不一起返回,因此,不影响处理请求的处理结果的响应时间,也不会侵入其他处理请求的处理结果,服务器中的敏感信息不易泄漏,提高了数据的安全性。
本申请实施例的分布式系统的在线调试系统,可分布式系统中的分布式节点在接收包括收集标识的调试信息收集指令,进入在线调试模式,并收集调试信息,发送至服务器,通过收集标识的标识作用可有针对性地对调试信息进行收集,从而避免调试信息与其他运行日志信息相混淆,且能够大大降低日志膨胀的程度。此外,调试信息具有与调试信息收集指令对应的编号,从而可根据编号对不同调试信息收集指令对应调试信息进行区别,便于调试信息的收集、查找和关联。因此,本申请实施例降低了调试日志收集难度,提高了日志收集效率,且便于调试人员对调试信息进行整体分析,能够提高调试效率。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件 来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本申请的实施例,本领域的普通技术人员可以理解:在不脱离本申请的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本申请的范围由权利要求及其等同限定。