CN113726834A - 消息路由的方法、装置、系统、设备及介质 - Google Patents
消息路由的方法、装置、系统、设备及介质 Download PDFInfo
- Publication number
- CN113726834A CN113726834A CN202010858123.4A CN202010858123A CN113726834A CN 113726834 A CN113726834 A CN 113726834A CN 202010858123 A CN202010858123 A CN 202010858123A CN 113726834 A CN113726834 A CN 113726834A
- Authority
- CN
- China
- Prior art keywords
- debugging
- debug
- agent
- request message
- application
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L67/025—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/566—Grouping or aggregating service requests, e.g. for unified processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/63—Routing a service request depending on the request content or context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种消息路由的方法。该方法应用于应用调试系统,应用调试系统用于调试在生产环境中运行的应用,应用调试系统包括路由子系统和至少一个交互子系统。该方法包括:路由子系统接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块,路由子系统路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。由此可以支持多个用户同时对应用的一个或多个子应用模块进行调试,提高调试效率。
Description
本申请要求于2020年05月26日提交中国国家知识产权局、申请号为202010456122.7、申请名称为“一种应用调试方法、装置、设备及介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及应用开发技术领域,尤其涉及一种消息路由的方法、装置、系统、设备以及计算机可读存储介质。
背景技术
应用是针对用户的某种特殊应用目的所编写的计算机程序的集合。应用从立项到交付给客户,通常会经历开发、测试、上线等多个阶段。其中,在开发、测试、上线的各个阶段往往会配置相应的环境,例如开发环境(development environment)、测试环境(testingenvironment)、应用环境(也称生产环境,production environment)。
开发人员常需要对应用进行调试,应用的调试包括利用人工或者编译的方式检测出应用的程序代码中的错误,进而可以根据调试过程中发现的错误对程序代码进行修正。目前,业界对应用的调试通常是通过集成开发环境(integrated developmentenvironment,IDE)在开发环境下对应用的程序代码进行调试。
然而,这种调试方法的调试效率比较低下,难以满足业务需求。
发明内容
本申请提供了一种消息路由的方法,可以实现在应用调试系统和应用之间实现安全可靠地传输调试消息,从而实现直接对应用进行调试,提高调试效率。而且,该方法支持多个用户同时对应用进行调试,进一步提高调试效率。本申请还提供了上述方法对应的装置、系统、设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种消息路由的方法。该方法具体由应用调试系统执行。应用调试系统用于调试在生产环境中运行的应用。应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。当应用为基于微服务架构(micro services architecture,MSA)的应用时,子应用模块也可以是一个或多个微服务。
应用调试系统包括路由子系统和至少一个交互子系统。路由子系统接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试所述应用的一个子应用模块,然后路由子系统路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理(agent)。
每个子应用模块对应的agent为与子应用模块同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。
路由子系统将不同用户进行调试产生的至少一个调试请求消息路由至至少一个子应用模块的agent,相当于路由至至少一个子应用模块。由此可以实现直接对应用进行调试,提高调试效率。并且该方法能够支持多个用户同时对一个或多个子应用模块进行调试,进一步提高调试效率。
在一些可能的实现方式中,每个交互子系统根据各自用户的调试操作产生对应的调试请求消息。由此可以实现多个用户同时对应用(具体是应用的同一子应用模块或不同子应用模块)进行调试,提高了调试效率。
在一些可能的实现方式中,用户的调试操作包括:用户通过交互子系统提供的图形用户界面(graphical user interface,GUI)进行的调试选择和调试启动操作,或者,用户通过所述交互子系统提供的命令用户界面(command user interface,CUI)发送的调试选择和调试启动操作。
其中,通过GUI向用户呈现应用的子应用模块,以便用户选择子应用模块进行调试,可以提高用户体验。当然,用户也可以直接通过CUI输入请求调试的子应用模块的标识以及相应的命令,从而启动调试,如此可以简化用户操作,提高调试效率。
在一些可能的实现方式中,所述生产环境包括至少一个节点。每个节点具有节点代理,也称作主机代理(host agent)。host agent为与应用同时部署在生产环境的代码块。host agent用于转发来自于节点上的子应用模块的消息或者向节点上的子应用模块转发消息。host agent运行时可以产生一个进程。该进程对应的程序代码可以随着应用的子应用模块包括的代码块部署到节点时被部署到节点。当节点上的子应用模块的进程启动时,host agent也随之启动。
如此,路由子系统可以将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的host agent,然后通过所述host agent将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的agent,从而实现多对多的消息路由,为多个用户同时调试应用提供帮助。
在一些可能的实现方式中,路由子系统包括多个调试代理。调试代理可以是基于调试适配器协议(debug adapter protocol,DAP)的代理。调试代理本质是一段程序代码,该程序代码被执行时产生一个进程或者线程。为了便于描述,可以将基于DAP的调试代理称之为DAP proxy,也可以简称为proxy。
至少一个调试请求消息包括第一调试请求消息。第一调试请求消息可以是至少一个调试请求消息中的任意一个。路由子系统在路由第一调试请求消息时,接收到该第一调试请求消息的proxy(具体为第一proxy)可以将所述第一调试请求消息广播至所述多个proxy,然后路由子系统中的与请求调试的第一子应用模块所在节点的host agent长连接的proxy(具体为第二proxy)将所述第一调试请求消息传输至请求调试的第一子应用模块所在节点的host agent。
如此可以保障交互子系统以及子应用模块的agent分别连接在不同proxy时,也能在交互子系统以及子应用模块之间安全可靠地传输调试消息。并且,当有些proxy下线时,也能重新连接至其他proxy,确保调试消息能够被正确地传输至相应的agent或者交互子系统。
在一些可能的实现方式中,第二proxy和请求调试的子应用模块所在节点的hostagent之间预先建立有长连接。例如,第二proxy和子应用模块所在节点的host agent之间建立web socket长连接。如此,路由子系统可以通过第二proxy和host agent之间的长连接传输调试请求消息。其中,通过上述长连接可以实现持续地传输调试请求消息,提高了调试效率。
在一些可能的实现方式中,所述路由子系统包括多个调试代理。所述生产环境包括至少一个节点。所述路由子系统接收所述至少一个交互子系统发送的调试请求消息之前,所述应用的至少一个子应用模块所在节点的host agent还可以向所述路由子系统中的至少一个proxy发送连接请求消息,该proxy可以根据连接请求消息建立与所述host agent的长连接。
其中,host agent可以随机选择至少一个proxy发送连接请求消息,与至少一个proxy建立长连接。当host agent与多个proxy建立长连接时,其中一个长连接可以作为主连接,剩余长连接可以作为备份连接,当主连接故障时,可以启用备份连接传输调试消息,保障消息能够正常传输,提高了整个系统的可用性。
在一些可能的实现方式中,至少一个子应用模块的agent接收到调试请求消息,还可以根据调试请求消息启动对至少一个子应用模块的调试,生成至少一个调试响应消息。路由子系统接收请求调试的至少一个子应用模块的代理agent的至少一个调试响应消息,路由子系统路由所述至少一个调试响应消息至对应的交互子系统。
如此,路由子系统可以实现将至少一个调试响应消息路由至相应的交互子系统,由此可以实现多个用户同时调试应用,提高调试效率。
第二方面,本申请提供了一种消息路由的装置。所述装置包括:
通信单元,用于接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块;
路由单元,用于路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述路由单元具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,所述装置包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由单元具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
在一些可能的实现方式中,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
在一些可能的实现方式中,所述装置包括多个调试代理,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述装置还包括连接单元;
所述通信单元还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
所述连接单元具体用于:
通过所述至少一个调试代理建立与所述节点代理的长连接。
在一些可能的实现方式中,所述通信单元还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
所述路由单元还用于:
路由所述至少一个调试响应消息至对应的交互子系统。
第三方面,本申请提供了一种应用调试系统。所述应用调试系统包括路由子系统和至少一个交互子系统,所述应用调试系统用于调试在生产环境中运行的应用;
所述交互子系统,用于向所述路由子系统发送调试请求消息,每个调试请求消息指示请求调试所述应用的一个子应用模块;
所述路由子系统,用于路由所述至少一个交互子系统发送的至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,每个交互子系统用于根据各自用户的调试操作产生对应的调试请求消息。
在一些可能的实现方式中,用户的调试操作包括:用户通过交互子系统提供的图形用户界面GUI进行的调试选择和调试启动操作,或者,用户通过所述交互子系统提供的命令用户界面CUI发送的调试选择和调试启动操作。
在一些可能的实现方式中,所述生产环境包括至少一个节点,所述路由子系统具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,所述路由子系统包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由子系统具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
在一些可能的实现方式中,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
在一些可能的实现方式中,所述路由子系统包括多个调试代理,所述生产环境包括至少一个节点,所述路由子系统还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
通过所述至少一个调试代理建立与所述节点代理的长连接。
在一些可能的实现方式中,所述路由子系统还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
路由所述至少一个调试响应消息至对应的交互子系统。
第四方面,本申请提供一种计算设备。所述计算设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算设备执行如第一方面或第一方面的任一种实现方式中的消息路由的方法。
第五方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备执行上述第一方面或第一方面的任一种实现方式所述的消息路由的方法。
第六方面,本申请提供了一种包含指令的计算机程序产品。当其在计算设备上运行时,使得计算设备执行上述第一方面或第一方面的任一种实现方式所述的消息路由的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种消息路由的方法的应用场景图;
图2A为本申请实施例提供的一种消息路由的方法的系统架构图;
图2B为本申请实施例提供的一种消息路由的方法的系统架构图;
图2C为本申请实施例提供的一种消息路由的方法的系统架构图;
图3为本申请实施例提供的一种消息路由的方法的流程图;
图4为本申请实施例提供的一种消息路由的方法的交互流程图;
图5为本申请实施例提供的一种消息路由的装置的结构示意图;
图6为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
应用(application,APP),是针对用户的某种特殊应用目的所编写的计算机程序的集合,具体可以是单一的应用程序或者多个应用程序的集合形成的应用软件。例如,在办公领域,应用可以是单一的文本编辑应用,也可以是文本编辑应用、表格编辑应用和图形编辑应用组成的应用。
应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。该子应用模块可以在生产环境中运行从而提供服务。其中,生产环境是指正式提供服务的环境。生产环境中包括至少一个节点,该节点是指服务器、终端计算设备等具有计算能力的计算节点。
对于功能繁多的复杂应用,开发人员可以采用微服务架构(micro servicesarchitecture,MSA)进行开发,以提高开发效率。其中,微服务架构是指将应用的功能模块拆分成独立的微服务。微服务是一个或者一组相对较小且独立的功能单元的集合。微服务之间通过接口调用实现数据交互。如此,可以实现应用的各个功能模块的解耦。当应用需要新增功能、删除功能或者修改功能时,开发人员增加、删除或者修改相应的微服务即可。子应用模块也可以是一个或多个微服务。微服务在生产环境中运行,从而提供相应的服务。
针对已部署在生产环境中的应用,如果出现运行异常等问题,通常还需要对应用进行调试。其中,调试是指通过各种手段如单步执行、设置断点、打印变量内容等手段,对应用的程序代码进行查错。
相关技术对已部署在生产环境中的应用的调试方法通常是将该应用的程序代码加载至集成开发环境(integrated development environment,IDE),通过IDE在开发环境下对应用的程序代码进行本地调试,在本地调试后,对确定的问题进行解决后再重新将应用部署上线。由于需要在开发环境下重现生产环境下应用运行所产生的异常,以及将应用的程序代码加载至IDE进行本地调试,并将调试完成的应用重现部署上线,极大地影响了应用的调试效率。
基于此,本申请提出了一种直接在生产环境中对应用进行调试的方法。该方法由应用调试系统执行。针对部署在生产环境中待调试的应用,应用调试系统接收用户输入或选择的多个子应用模块的标识,根据多个子应用模块的标识对多个子应用模块的代码块进行调试,然后向用户呈现调试结果。该方法支持支持用户一次选择多个待调试的子应用模块,对应用的多个子应用模块进行调试,提高了应用的调试效率。而且,用户可以直接在生产环境下调试,无需加载程序代码至IDE进行本地调试,也无需将调试完成的应用重新部署上线,进一步提高了调试效率。
其中,应用调试系统还支持多个用户同时对应用的同一子应用模块或不同子应用模块进行调试。在调试过程中,应用调试系统常常需要传输多个用户对子应用模块进行调试产生的调试消息,例如调试请求消息。如何将不同用户对不同子应用模块进行调试的调试请求消息安全可靠地传输至相应的子应用模块成为业界重点关注的问题。
有鉴于此,本申请实施例提供了一种消息路由的方法。该方法可以由应用调试系统执行。该应用调试系统可以用于调试在生产环境中运行的应用。其中,应用调试系统包括路由子系统和至少一个交互子系统。
路由子系统接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块,然后路由子系统路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理(agent)。
每个子应用模块对应的agent为与应用同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。路由子系统将不同用户进行调试产生的至少一个调试请求消息路由至至少一个子应用模块的agent,相当于路由至至少一个子应用模块。由此可以实现多个用户对多个子应用模块的调试,提高调试效率。
进一步地,应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在上述进程的线程进行交互,如此可以实现在生产环境直接对应用的子应用模块进行调试。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的消息路由的方法的应用场景进行介绍。
参见图1所示的消息路由的方法的应用场景图。在该场景中,应用调试系统100用于对部署在数据中心300上的至少一个应用200进行调试。其中,数据中心300提供生产环境,应用200部署在生产环境中。应用200包括多个子应用模块,每个子应用模块包括的代码块用于实现应用200的功能。
应用200的子应用模块可以分布式地部署在数据中心300的至少一个节点上。例如,在图1的示例中,应用200的n个子应用模块分布式地部署于数据中心的k个节点(也称作主机),其中,k小于等于n。需要说明,子应用模块可以直接部署在节点,即部署在物理机中,也可以部署在节点上的虚拟机或容器中。应用200的每个子应用模块部署在独立的容器中时,容器中运行的子应用模块可以通过容器的接口进行交互。
每个子应用模块具有agent。该agent可以通过代码注入的方式被创建。代码注入是一种向目标进程插入独立运行代码并使之运行的技术。代码注入一般可以配置环境变量(environment variables)实现。以Java平台为例,环境变量可以为JAVA_TOOL_OPTIONS,通过将环境变量赋值为待插入的代码文件的名称,例如export JAVA_TOOL_OPTIONS=“-agent-lib:hprof”,子应用模块(如微服务)的进程启动时,插入的代码文件中的代码被写入上述进程的虚拟内存空间,插入代码对应的线程也随着进程的启动而启动。作为宿主的进程未终止前,线程可以一直运行。
应用调试系统100包括路由子系统104和至少一个交互子系统102。至少一个交互子系统102中的每个交互子系统102可以根据各自用户的调试操作生成对应的调试请求消息。每个调试请求消息指示请求调试应用200的一个子应用模块。路由子系统104接收至少一个交互子系统102发送的至少一个调试请求消息,路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的agent。
在一些可能的实现方式中,每个子应用模块所在节点具有节点代理。该节点代理也称作主机代理(host agent)。host agent为与应用200同时部署在生产环境的代码块。host agent用于转发来自于节点上的子应用模块的消息或者向节点上的子应用模块转发消息。host agent运行时可以产生一个进程。该进程对应的程序代码可以随着应用200的子应用模块包括的代码块部署到节点时被部署到节点。当节点上的子应用模块的进程启动时,host agent也随之启动。
基于此,路由子系统104在路由调试请求消息时,可以将至少一个调试请求消息先传输至请求调试的至少一个子应用模块所在节点的host agent,然后路由子系统104通过host agent将至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的agent。
在一些可能的实现方式中,路由子系统104包括至少一个调试代理。调试代理可以是基于调试适配器协议(debug adapter protocol,DAP)的代理。调试代理本质是一段程序代码,该程序代码被执行时产生一个进程或者线程。为了便于描述,本申请实施例可以将基于DAP的调试代理称之为DAP proxy,也可以简称为proxy。
图1所示实施例以路由子系统104包括多个proxy进行示例说明。应用200的子应用模块所在节点的host agent在初始化时可以与一个proxy建立长连接。例如,host agent可以与一个proxy建立网页套接字(web socket)长连接。如此,路由子系统104可以通过proxy与host agent之间预先建立的长连接,传输调试请求消息至host agent,然后通过hostagent传输该调试请求消息至请求调试的子应用模块对应的agent。在一些实施例中,hostagent在初始化时也可以与多个proxy建立长连接。其中一个长连接作为主连接,剩余的长连接作为备份连接,如此保障消息路由的可靠性。
在一些可能的实现方式中,交互子系统102可以包括交互模块和调试适配器(debug adapter)。其中,交互模块用于提供用户界面,如图形用户界面(graphical userinterface,GUI)或命令用户界面(command user interface,CUI)等用户界面。用户可以通过上述用户界面进行调试操作。
例如,交互模块通过GUI向用户呈现应用200的子应用模块,用户可以通过GUI进行调试选择和调试启动操作。其中,调试选择包括选择调试的子应用模块。在一些实施例中,调试选择也可以包括调试类型,如断点调试、单步调试、变量跟踪等等。又例如,用户也可以通过CUI以命令的形式直接发送调试选择和调试启动操作。
交互模块可以是提供应用调试功能的集成开发环境(integrated developmentenvironment IDE)。该IDE不仅能够用于编辑应用200的程序代码,对开发过程中的程序代码进行调试,还能够对远程已上线的应用200进行调试。交互模块也可以是其他能够提供对已上线的应用200进行调试的功能的交互模块,例如加载有用于调试应用200的用户界面的浏览器或者专用于应用调试的交互模块。为了便于描述,后文以交互模块为IDE进行示例说明。
debug adapter实质上是一段程序代码。该程序代码可以插件形式提供给用户,用户可以在IDE中安装上述插件。该插件被执行时产生一个独立于IDE和编程语言框架的服务进程。debug adapter这一服务进程作为IDE和proxy的中间层,用于监听来自于IDE的调试操作,并与proxy建立长连接,例如websocket连接。该长连接可以用于传输调试消息,例如调试请求消息。
图1所示的应用调试系统100具有多种部署方式,接下来对应用调试系统100的部署方式进行详细说明。
在一些实现方式中,应用调试系统100的各个子系统可以分布式地部署于不同环境。例如,如图2A所示,交互子系统102可以部署在终端计算设备(例如台式机、笔记本电脑等用户终端)中,路由子系统104可以部署在云计算集群(包括至少一个云计算设备,例如云服务器等)中。当路由子系统104包括多个proxy时,这多个proxy可以集中部署在一个云计算设备,也可以分布式地部署在云计算集群的不同云计算设备。
在图2A的场景中,交互模块可以为本地IDE。其中,本地也称作本地设备。本地设备包括处于用于用户直接控制之下的终端计算设备(例如台式机、笔记本电脑等用户终端)。本地IDE是指以客户端形式安装在本地设备的IDE。在一些示例中,本地IDE可以包括visualstudio、eclipse等等。本地IDE可以安装插件,通过插件与debug adapter连接,从而对应用200进行调试。
在另一些实现方式中,应用调试系统100的各个子系统也可以部署于相同环境。例如,如图2B所示,交互子系统102和路由子系统104可以部署在同一云计算集群中。该云计算集群可以为一个云服务提供商提供的公有云。交互模块可以为云化IDE(cloud IDE)。路由子系统104可以形成cloud debugger,用于提供云调试服务。
云服务提供商可以将cloud debugger和cloud IDE整合成一个云服务提供给用户使用,也可以分别提供cloud IDE和cloud debugger两个云服务供用户使用。在一些情况下,云服务提供商可以将cloud debugger作为cloud IDE的增值服务,用户购买或者租赁该增值服务后,云服务提供商将其结合在cloud IDE中提供给用户使用。
当然,如图2C所示,交互子系统102和路由子系统104也可以部署在不同云计算集群中。不同的云计算集群可以是不同的云服务提供商提供的公有云。不同云服务提供商分别提供cloud IDE和cloud debugger给用户使用。
进一步地,应用调试系统100调试的应用200既可以与交互子系统102和/或路由子系统104部署在相同或不同的云计算集群,也可以独立地部署在任何数据中心(例如用户自有的数据中心),前述图2A、图2B、图2C示例性地展示应用200部署在数据中心300的情况,并不构成对本申请技术方案的限定。
另外,图2A、图2B、图2C仅仅是示例性地展示了应用调试系统100部署在不同环境或者部署在相同环境的一些具体示例。在一些实现方式中,应用调试系统100的各个模块还可以部署于其他环境,例如交互模块、debug adapter可以部署于终端计算设备或者云计算设备,proxy可以部署于边缘计算集群(包括至少一个边缘计算设备,例如边缘服务器)。
接下来,从路由子系统104的角度对本申请实施例提供的应用调试系统100中路由消息的方法进行详细介绍。
S302:路由子系统104接收至少一个交互子系统102发送的至少一个调试请求消息。
每个调试请求消息指示请求调试应用200的一个子应用模块。不同调试请求消息可以指示请求调试应用200的不同子应用模块。在一些实施例中,不同调试请求消息也可以指示请求调试应用200的同一子应用模块。
调试请求消息可以由交互子系统102根据各自用户的调试操作生成。其中,用户的调试操作包括用户通过交互子系统102提供的GUI进行的调试选择和调试启动操作。用户的调试操作也可以通过交互子系统102提供的CUI发送的调试选择和调试启动操作。
为了便于理解,以通过GUI进行调试示例说明。交互子系统102通过GUI向用户呈现应用200包括的子应用模块。用户通过GUI选择一个或多个子应用模块,然后通过触发GUI上的启动控件,启动对选中的一个或多个子应用模块的调试。交互子系统102(具体是交互模块)根据用户的调试操作产生调试请求消息。
调试请求消息中包括调试指令。当调试请求消息为针对一个子应用模块的首次调试操作产生的调试请求消息时,该调试指令包括启动调试的命令,用于指示对应用200的子应用模块启动调试。当该调试请求消息为针对一个子应用模块的非首次调试操作产生的调试请求消息时,该调试指令包括设置断点的指令、查看栈信息的指令、显示某个变量的指令、跟踪某个变量的指令或者单步执行的指令,用于指示对子应用模块进行断点调试、查看栈信息、显示变量、变量跟踪或者单步调试等等。
S304:路由子系统104路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的agent。
调试请求消息用于请求调试应用200的一个子应用模块。调试请求消息中可以携带该子应用模块的标识,如此,路由子系统104可以根据该子应用模块的标识将调试请求消息路由至对请求调试的子应用模块对应的agent。
其中,子应用模块通常是部署在物理机中或者物理机上的虚拟机或容器中。基于此,子应用模块的标识可以是子应用模块所属资源的资源标识(resource id),例如物理机、虚拟机、容器等资源的资源标识。
每个节点具有host agent。路由子系统104还可以通过host agent路由调试请求消息至请求调试的子应用模块对应的agent。具体地,路由子系统104将至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的host agent,然后通过所该hostagent将至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的agent。
在一些可能的实现方式中,路由子系统104包括至少一个proxy。应用200的至少一个子应用模块所在节点的host agent与上述至少一个proxy预先建立有长连接。以一个子应用模块所在节点的host agent为例,该host agent可以在初始化时,向一个proxy发送连接请求消息,该proxy建立与host agent的长连接。考虑到可靠性,host agent还可以向多个proxy发送连接请求消息,多个proxy分别建立与该host agent的长连接。其中,一个长连接作为主连接,其余长连接作为备份连接。路由子系统104可以通过proxy与host agent的长连接将调试请求消息传输至请求调试的子应用模块对应的agent。
需要说明的是,当路由子系统104包括多个proxy时,不同host agent可以在与同一proxy建立长连接,也可以与不同proxy建立长连接。本申请实施例对此不作限定。当用户通过交互模块(如IDE)提供的GUI或CUI触发调试操作时,debug adapter监听到该调试操作,可以与路由子系统104的一个proxy建立长连接。考虑到可靠性,debug adapter也可以与路由子系统104的多个proxy建立长连接。为了便于描述,后文以debug adapter与一个proxy建立长连接进行示例说明。
路由子系统104可以通过debug adapter与proxy的长连接、proxy与host agent的长连接路由至少一个调试请求消息至请求调试的至少一个子应用模块的agent。下面以至少一个调试请求消息中的第一调试请求消息进行示例说明。
用户通过IDE触发对应用200的一个子应用模块的调试操作时,debug adapter监听到该调试操作,与第一proxy建立长连接。上述子应用模块所在节点的host agent与第二proxy预先建立有长连接。
当路由子系统104包括一个proxy时,第一proxy和第二proxy为同一proxy,该proxy可以直接将第一调试请求消息通过与host agent的长连接传输至host agent,再通过host agent将该第一调试请求消息传输至子应用模块对应的agent。
当路由子系统104包括多个proxy时,第一proxy和第二proxy可能是同一proxy,也可能是不同proxy。第一proxy接收到第一调试请求消息,可以广播该第一调试请求消息至上述多个proxy。如此,第二proxy可以获得上述第一调试请求消息。第二proxy可以将第一调试请求消息通过与host agent的长连接传输至host agent,再通过host agent将该第一调试请求消息传输至子应用模块对应的agent。
其中,第一proxy可以基于订阅/发布(publish/subscribe)机制广播第一调试请求消息。具体地,路由子系统104维护有消息队列,例如请求队列。多个proxy订阅该请求队列。第一proxy接收到第一调试请求消息时,将该第一调试请求消息发布至请求队列。多个proxy监听到请求队列中有新消息,从请求队列中获取上述第一调试请求消息。如此实现广播第一调试请求消息至多个proxy。
在一些可能的实现方式中,子应用模块agent接收到调试请求消息可以启动对相应子应用模块的调试,生成调试响应消息。路由子系统104接收请求调试的至少一个子应用模块对应的agent发送的调试响应消息,路由该至少一个调试响应消息至对应的交互子系统102。
其中,至少一个子应用模块对应的agent生成的调试响应消息可以先被发送至host agent,路由子系统104可以通过与host agent之间的长连接接收上述调试响应消息,然后将调试响应消息通过与debug adapter之间的长连接传输至debug adapter,进而传输至交互模块(如IDE),从而实现路由调试响应消息至对应的交互子系统102。
基于上述内容描述,本申请实施例提供了一种消息路由的方法。在该方法中,路由子系统接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块,然后路由子系统路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的agent。如此可以将多个调试请求消息路由至请求调试的子应用模块对应的agent,实现多对多消息路由,支持多个用户在生产环境同时对一个或多个子应用模块进行调试,提高了调试效率。
在图3所示实施例中,路由子系统104的proxy与host agent建立长连接后,应用200的子应用模块对应的agent还可以向host agent发送发现消息,然后host agent通过与proxy的长连接向proxy发送该发现消息。proxy可以根据该发现消息确定对于该proxy可达的agent。如此,当proxy接收到调试请求消息时可以确定调试请求消息请求调试的子应用模块是否可达。若是,则可以通过与host agent的长连接,将调试请求消息传输至相应的host agent,然后再通过host agent将调试请求消息传输至agent。
具体地,发现消息中至少包括子应用模块的标识。该子应用模块的标识可以是子应用模块所属资源的资源标识。该资源为容器(container)时,资源标识具体可以为容器标识(containerId)。进一步地,发现消息中还可以包括主机名(hostname)、网际互联协议地址(Internet Protocol address,IP)、代理标识(agentId)、应用名称(appName)、集群密钥(clusterKey)、服务类型(servicetype)、显示名称(displayName)、实例名称(instanceName)、进程标识(process id,pid)、项目标识(projectId)、容器组标识(podId)、采集器标识(collectorId)、属性(properties,props)、端口(ports)等信息中的至少一个。
本申请实施例还提供了发现消息的一个具体示例,如下所示:
TDiscoveryInfo
{
1:string hostname
2:string ip
3:string agentId
4:string appName
5:string clusterKey
6:string serviceType
7:string displayName
8:string instanceName
9:string containerId
10:i32 pid
12:string projectId
13:string podId
14:string collectorId
15:string appId
20:map<string,string>props
30:list<i32>ports
40:list<string>ips
50:string tier
60:string namespaceName
61:i64 created
62:i64 updated
63:i64 deleted
70:optional list<TProfilingInfo>profilingInfo
}
其中,string、i32、i64表示数据类型。例如string表示字符串,i32和i64分别表示32位整型和64位整型。
proxy接收到一个子应用模块的agent发送的发现消息,即相当于建立一个与该agent对应的活跃会话。为了便于描述,本申请实施例将与agent之间的活跃会话称之为活跃代理会话(activeAgentSessions)。proxy可以存储与该proxy建立活跃代理会话的agent的标识,例如存储agent的resourceId。在一些实施例中,proxy可以通过维护动态的哈希映射,以描述当前的活跃代理会话。如此,路由子系统104在路由调试请求消息时,可以根据该哈希映射确定是否通过该proxy传输调试请求消息至对应的host agent。
具体地,路由子系统104的一个proxy接收到调试请求消息,将该调试请求消息发送至请求队列,路由子系统104的多个proxy监听到请求队列中有新的调试请求消息,获取该调试请求消息。每个proxy判断该调试请求消息请求调试的子应用模块的resourceId是否被存储,若是,则表明对应resource中的agent与proxy建立有活跃代理会话,该proxy可以通过与host agent的长连接传输该调试请求消息至host agent,然后通过host agent将调试请求消息传输至对应的agent;若否,则表明对应resource中的agent与其他proxy建立有活跃代理会话,或者是对应resource已下线,proxy可以丢弃该调试请求消息。
为了使得本申请的技术方案更加清楚,下面以一个交互子系统102生成用于调试第一子应用模块的第一调试请求消息,路由子系统路由该第一调试请求消息为例,从交互的角度对本申请实施例提供的应用调试系统100中路由消息的方法进行详细说明。
参见图4所示的消息路由的方法的交互流程图,该方法包括:
S402:host agent在初始化时与第二proxy建立长连接。
第二proxy为应用调试系统100包括的多个proxy中的一个。在初始化时,hostagent(具体是第一子应用模块所在节点的host agent)可以随机选择一个proxy(为了便于描述,称之为第二proxy),建立长连接。
S404:agent向host agent发送发现消息,host agent通过长连接向第二proxy发送发现消息。
S406:第二proxy存储与该第二proxy建立活跃代理会话的agent的resourceId。
agent发送发现消息至第二proxy,表明该agent对第二proxy是可达的,第二proxy与agent之间建立了活跃代理会话。第二proxy可以存储与该第二proxy建立活跃代理会话的agent的标识,如resourceId。
S408:交互子系统102中debug adapter监听用户通过IDE触发的调试操作。
S410:debug adapter判断该调试操作是否为针对第一子应用模块的首次调试操作,若是执行S412,若否执行S414。
S412:debug adapter建立调试会话,与第一proxy建立长连接。
调试会话(debug session)具体是用于调试子应用模块的会话。调试会话与被调试的子应用模块一一对应。调试会话的两端分别为debug adapter和host agent。其中,debug adapter和IDE部署在同一环境,如同一终端计算设备,host agent和agent部署在同一环境,如同一节点,因此,调试会话的两端也可以是IDE和agent。每个调试会话具有唯一的调试会话标识(debug session id)。调试会话标识可以用于辅助proxy将调试响应消息路由至对应的IDE。
S414:debug adapter向第一proxy发送第一调试请求消息。
第一调试请求消息用于请求对第一子应用模块进行调试。该第一调试请求消息中携带resourceId和debug session id。
需要说明的是,S402至S406与S408至S414可以并行执行,也可以是先执行S402至S406,再执行S408至S414,或者是先执行S408至S414,再执行S402至S406。
S416:第一proxy向请求队列发送调试请求消息。
S418:路由子系统104的多个proxy(包括第一proxy和第二proxy)从请求队列获取第一调试请求消息。
其中,第一proxy为路由子系统104中与debug adapter建立长连接的proxy,第二proxy为路由子系统104中与host agent建立长连接的proxy。
S420:每个proxy(包括第一proxy和第二proxy)判断第一调试请求消息中的resourceId是否被存储,从而确定请求调试的子应用模块的agent是否与proxy建立有活跃代理会话。若是,则执行S422,若否,则执行S424。
S422:proxy向host agent发送第一调试请求消息,然后通过host agent向agent发送第一调试请求消息。
S424:proxy丢弃第一调试请求消息。
在该示例中,第一子应用模块的agent预先发送发现消息至第二proxy,第二proxy与第一子应用模块的agent建立有活跃代理会话。第二proxy存储有该agent的resourceId。而第一proxy并未与第一子应用模块的agent建立活跃代理会话,也并未存储该agent的resourceId。
因此,第一proxy判断调试请求消息中的resourceId未被存储,第一proxy执行S424,丢弃第一调试请消息,第二proxy判断调试请求消息中的resourceId被存储,第二proxy执行S422,向host agent发送第一调试请求消息,再通过host agent向agent发送第一调试请求消息。如此实现将第一调试请求消息安全可靠地传输至请求调试的第一子应用模块的agent。
S426:agent启动对第一子应用模块的调试,生成第一调试响应消息。
agent根据第一调试请求消息中的调试指令,启动对第一子应用模块的调试,并生成针对调试指令的调试响应,进而生成第一调试响应消息。
S428:agent向host agent发送调试响应消息,再通过host agent向响应队列发送第一调试响应消息。
S430:路由子系统104的多个proxy(包括第一proxy和第二proxy)从响应队列获取第一调试响应消息。
如此,第一proxy和第二proxy均可以获得第一调试响应消息。
S432:每个proxy(包括第一proxy和第二proxy)判断第一调试响应消息中的debugsession id是否被存储,从而确定proxy与debug adapter是否建立有调试会话。若是,则执行S434,若否,则执行S436。
S434:proxy通过与debug adapter的长连接发送第一调试响应消息,然后debugadapter向IDE发送第一调试响应消息。
S436:proxy丢弃该第一调试响应消息。
每个proxy(包括第一proxy和第二proxy)将第一调试响应消息中的debugsession id与各自的活跃调试会话中记录的debug session id进行比较。第一proxy确定第一调试响应消息中的debug session id存在于活跃调试会话,表明第一proxy与debugadapter建立有活跃调试会话,第一proxy可以通过与debug adapter的长连接发送第一调试响应消息,再通过debug adapter向IDE发送第一调试响应消息。第二proxy确定第一调试响应消息中的debug session id不存在于活跃调试会话,则表明第二proxy并未与debugadapter建立有活跃调试会话,第二proxy丢弃该第一调试响应消息。
在图4所示实施例中,消息队列(请求队列或响应队列)中的调试消息被广播至各个proxy。如此,当某个proxy下线时,host agent或者debug adapter还可以和其他proxy建立长连接,从而避免某个或某些proxy下线的情况下,将调试消息发送至错误的agent或者IDE,提高了整个系统的可用性。
上文结合图1至图4对本申请实施例提供的消息路由的方法进行了详细介绍,下面将结合附图对本申请实施例提供的装置、设备进行介绍。
参见图5所示的消息路由的装置的结构示意图,该装置500可以是前述应用调试系统中的路由子系统。当路由子系统为软件系统时,装置500也可以是运行路由子系统的硬件设备。该装置500包括:
通信单元502,用于接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块;
路由单元504,用于路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。在一些可能的实现方式中,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述路由单元504具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,所述装置包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由单元504具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
在一些可能的实现方式中,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
在一些可能的实现方式中,所述装置包括多个调试代理,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述装置500还包括连接单元;
所述通信单元502还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
所述连接单元具体用于:
通过所述至少一个调试代理建立与所述节点代理的长连接。
在一些可能的实现方式中,所述通信单元502还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
所述路由单元504还用于:
路由所述至少一个调试响应消息至对应的交互子系统。
根据本申请实施例的消息路由的装置500可对应于执行本申请实施例中描述的方法,并且消息路由的装置500的各个模块/单元的上述和其它操作和/或功能分别为了实现图3、图4所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种应用调试系统100。参见图1所示的应用调试系统100的结构示意图,应用调试系统包括路由子系统104和至少一个交互子系统102。所述应用调试系统100用于调试在生产环境中运行的应用。
所述交互子系统102,用于向所述路由子系统104发送调试请求消息,每个调试请求消息指示请求调试所述应用的一个子应用模块;
所述路由子系统104,用于路由所述至少一个交互子系统102发送的至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,每个交互子系统102用于根据各自用户的调试操作产生对应的调试请求消息。
在一些可能的实现方式中,用户的调试操作包括:用户通过交互子系统提供的图形用户界面GUI进行的调试选择和调试启动操作,或者,用户通过所述交互子系统提供的命令用户界面CUI发送的调试选择和调试启动操作。
在一些可能的实现方式中,所述生产环境包括至少一个节点,所述路由子系统104具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
在一些可能的实现方式中,所述路由子系统104包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由子系统104具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
在一些可能的实现方式中,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
在一些可能的实现方式中,所述路由子系统104包括多个调试代理,所述生产环境包括至少一个节点,所述路由子系统104还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
通过所述至少一个调试代理建立与所述节点代理的长连接。
在一些可能的实现方式中,所述路由子系统104还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
路由所述至少一个调试响应消息至对应的交互子系统。
根据本申请实施例的应用调试系统100可对应于执行本申请实施例中描述的方法,并且应用调试系统100的各个子系统的上述和其它操作和/或功能分别为了实现图3、图4所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算设备600。该计算设备600可以是笔记本电脑、台式机等端侧设备,也可以是云环境或边缘环境中的计算机集群。该计算设备600具体用于实现如图5所示消息路由的装置500的功能。
图6提供了一种计算设备600的结构示意图,如图6所示,计算设备600包括总线601、处理器602、通信接口603和存储器604。处理器602、存储器604和通信接口603之间通过总线601通信。
总线601可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器602可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
通信接口603用于与外部通信。例如,接收所述至少一个交互子系统发送的至少一个调试请求消息,接收请求调试的至少一个子应用模块的agent发送的至少一个调试响应消息等等。
存储器604可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器604还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。
存储器604中存储有可执行代码,处理器602执行该可执行代码以执行前述消息路由的方法。具体地,在实现图5所示实施例的情况下,且图5实施例中所描述的消息路由的装置500的各单元为通过软件实现的情况下,执行图5中的路由模块504、连接模块功能所需的软件或程序代码存储在存储器604中。通信模块502功能通过通信接口603实现。
具体地,通信接口603接收至少一个交互子系统发送的至少一个调试请求消息,通过总线601将至少一个调试请求消息传输至处理器602。处理器602执行存储器604中的程序代码,从而路由至少一个调试请求消息至请求调试的至少一个子应用模块对应的agent。
进一步地,请求调试的至少一个子应用模块的agent可以根据调试请求消息,启动对相应子应用模块的调试,并生成至少一个调试响应消息。通信接口603接收agent通过host agent发送的至少一个调试响应消息,通过总线601将至少一个调试响应消息传输至处理器602。处理器602执行存储器604中的程序代码,从而路由至少一个调试响应消息至相应的IDE。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于消息路由的装置500的消息路由的方法。
本申请实施例还提供了一种计算机程序产品。所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品可以为一个软件安装包,在需要使用前述消息路由的方法的任一方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
Claims (24)
1.一种消息路由的方法,其特征在于,所述方法应用于应用调试系统,所述应用调试系统包括路由子系统和至少一个交互子系统,所述应用调试系统用于调试在生产环境中运行的应用,所述方法包括:
所述路由子系统接收所述至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试所述应用的一个子应用模块;
所述路由子系统路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
2.根据权利要求1所述的方法,其特征在于,每个交互子系统根据各自用户的调试操作产生对应的调试请求消息。
3.根据权利要求2所述的方法,其特征在于,用户的调试操作包括:用户通过交互子系统提供的图形用户界面GUI进行的调试选择和调试启动操作,或者,用户通过所述交互子系统提供的命令用户界面CUI发送的调试选择和调试启动操作。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述生产环境包括至少一个节点,所述路由子系统路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理,包括:
所述路由子系统将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
所述路由子系统通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
5.根据权利要求4所述的方法,其特征在于,所述路由子系统包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由子系统将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理,包括:
所述路由子系统中的第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
所述路由子系统中的第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
6.根据权利要求5所述的方法,其特征在于,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述路由子系统包括多个调试代理,所述生产环境包括至少一个节点,所述路由子系统接收所述至少一个交互子系统发送的调试请求消息之前,所述方法还包括:
所述路由子系统中的至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
所述路由子系统的所述至少一个调试代理建立与所述节点代理的长连接。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述方法还包括:
所述路由子系统接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
所述路由子系统路由所述至少一个调试响应消息至对应的交互子系统。
9.一种消息路由的装置,其特征在于,所述装置包括:
通信单元,用于接收至少一个交互子系统发送的至少一个调试请求消息,每个调试请求消息指示请求调试应用的一个子应用模块;
路由单元,用于路由所述至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
10.根据权利要求9所述的装置,其特征在于,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述路由单元具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
11.根据权利要求10所述的装置,其特征在于,所述装置包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由单元具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
12.根据权利要求11所述的装置,其特征在于,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
13.根据权利要求9至12任一项所述的装置,其特征在于,所述装置包括多个调试代理,所述应用部署在生产环境,所述生产环境包括至少一个节点,所述装置还包括连接单元;
所述通信单元还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
所述连接单元具体用于:
通过所述至少一个调试代理建立与所述节点代理的长连接。
14.根据权利要求9至13任一项所述的装置,其特征在于,所述通信单元还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
所述路由单元还用于:
路由所述至少一个调试响应消息至对应的交互子系统。
15.一种应用调试系统,其特征在于,所述应用调试系统包括路由子系统和至少一个交互子系统,所述应用调试系统用于调试在生产环境中运行的应用;
所述交互子系统,用于向所述路由子系统发送调试请求消息,每个调试请求消息指示请求调试所述应用的一个子应用模块;
所述路由子系统,用于路由所述至少一个交互子系统发送的至少一个调试请求消息至请求调试的至少一个子应用模块对应的代理。
16.根据权利要求15所述的系统,其特征在于,每个交互子系统用于根据各自用户的调试操作产生对应的调试请求消息。
17.根据权利要求16所述的系统,其特征在于,用户的调试操作包括:用户通过交互子系统提供的图形用户界面GUI进行的调试选择和调试启动操作,或者,用户通过所述交互子系统提供的命令用户界面CUI发送的调试选择和调试启动操作。
18.根据权利要求15至17任一项所述的系统,其特征在于,所述生产环境包括至少一个节点,所述路由子系统具体用于:
将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块所在节点的节点代理;
通过所述节点代理将所述至少一个调试请求消息传输至请求调试的至少一个子应用模块对应的代理。
19.根据权利要求18所述的系统,其特征在于,所述路由子系统包括多个调试代理,所述至少一个调试请求消息包括第一调试请求消息,所述路由子系统具体用于:
通过第一调试代理将所述第一调试请求消息广播至所述多个调试代理;
通过第二调试代理将所述第一调试请求消息传输至请求调试的子应用模块所在节点的节点代理。
20.根据权利要求19所述的系统,其特征在于,所述第二调试代理和请求调试的子应用模块所在节点的节点代理之间预先建立有长连接。
21.根据权利要求15至20任一项所述的系统,其特征在于,所述路由子系统包括多个调试代理,所述生产环境包括至少一个节点,所述路由子系统还用于:
接收所述至少一个交互子系统发送的调试请求消息之前,通过至少一个调试代理接收所述应用的至少一个子应用模块所在节点的节点代理发送的连接请求消息;
通过所述至少一个调试代理建立与所述节点代理的长连接。
22.根据权利要求15至21任一项所述的系统,其特征在于,所述路由子系统还用于:
接收请求调试的至少一个子应用模块的代理发送的至少一个调试响应消息;
路由所述至少一个调试响应消息至对应的交互子系统。
23.一种计算设备,其特征在于,所述计算设备包括处理器和存储器;
所述处理器用于执行所述存储器中存储的指令,以使得所述计算设备执行如权利要求1至8中任一项所述的方法。
24.一种计算机可读存储介质,其特征在于,包括计算机程序指令,当所述计算机程序指令由计算设备执行时,所述计算设备执行如权利要求1至8中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010456122 | 2020-05-26 | ||
CN2020104561227 | 2020-05-26 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113726834A true CN113726834A (zh) | 2021-11-30 |
Family
ID=78672240
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010819208.1A Pending CN113722204A (zh) | 2020-05-26 | 2020-08-14 | 一种应用调试方法、系统、设备及介质 |
CN202010837046.4A Pending CN113722116A (zh) | 2020-05-26 | 2020-08-19 | 一种调试消息的传输方法、装置、设备及介质 |
CN202010858123.4A Pending CN113726834A (zh) | 2020-05-26 | 2020-08-24 | 消息路由的方法、装置、系统、设备及介质 |
CN202010940931.5A Pending CN113722205A (zh) | 2020-05-26 | 2020-09-09 | 一种应用调试方法、装置、设备及介质 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010819208.1A Pending CN113722204A (zh) | 2020-05-26 | 2020-08-14 | 一种应用调试方法、系统、设备及介质 |
CN202010837046.4A Pending CN113722116A (zh) | 2020-05-26 | 2020-08-19 | 一种调试消息的传输方法、装置、设备及介质 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010940931.5A Pending CN113722205A (zh) | 2020-05-26 | 2020-09-09 | 一种应用调试方法、装置、设备及介质 |
Country Status (4)
Country | Link |
---|---|
US (2) | US20230087995A1 (zh) |
EP (2) | EP4148585A4 (zh) |
CN (4) | CN113722204A (zh) |
WO (2) | WO2021238592A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435201A (zh) * | 2022-07-13 | 2024-01-23 | 华为云计算技术有限公司 | 分布式服务生成方法、系统、计算设备及存储介质 |
CN115242771B (zh) * | 2022-09-19 | 2023-01-31 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
CN116185882A (zh) * | 2023-04-28 | 2023-05-30 | 深圳鸿芯微纳技术有限公司 | 软件调试方法、装置、设备及存储介质 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020199173A1 (en) * | 2001-01-29 | 2002-12-26 | Matt Bowen | System, method and article of manufacture for a debugger capable of operating across multiple threads and lock domains |
US6941492B1 (en) * | 2002-02-05 | 2005-09-06 | Emc Corporation | Debugging tool for efficient switching between targets in a multi-processor environment |
US7669186B2 (en) * | 2005-11-16 | 2010-02-23 | Sun Microsystems, Inc. | Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents |
US7739553B2 (en) * | 2007-05-31 | 2010-06-15 | Microsoft Corporation | System crash analysis using path tracing technologies |
CN102143523B (zh) * | 2010-11-18 | 2014-06-25 | 华为技术有限公司 | 基于业务递送平台的应用测试方法和业务递送平台 |
US9064049B2 (en) * | 2010-12-14 | 2015-06-23 | Microsoft Technology Licensing, Llc | Remote debugging of server side code without blocking or high-level privileges |
CN102222043B (zh) * | 2011-07-08 | 2015-06-17 | 华为软件技术有限公司 | 一种测试方法和测试装置 |
CN103853147B (zh) * | 2012-12-06 | 2016-04-20 | 中国科学院软件研究所 | 一种嵌入式系统的在线调试系统 |
US9098636B2 (en) * | 2013-12-18 | 2015-08-04 | Software Ag | White-box testing systems and/or methods in web applications |
US20160239162A1 (en) * | 2015-02-16 | 2016-08-18 | Hcl Technologies Ltd. | System and Method for Determining Distances Among User Interface Elements |
CN107977304B (zh) * | 2016-10-24 | 2021-05-25 | 北京京东尚科信息技术有限公司 | 一种系统调试方法和装置 |
CN108734033B (zh) * | 2017-04-14 | 2020-12-22 | 北京京东尚科信息技术有限公司 | 一种实现系统间安全交互的方法和装置 |
US10990504B2 (en) * | 2018-01-08 | 2021-04-27 | Ozcode Ltd. | Time travel source code debugger incorporating future prediction |
CN110297749B (zh) * | 2018-03-22 | 2022-12-13 | 福建天泉教育科技有限公司 | 一种测试新功能的方法及终端 |
CN108920366B (zh) * | 2018-06-28 | 2020-09-29 | 腾讯科技(深圳)有限公司 | 一种子应用调试方法、装置及系统 |
CN109343878A (zh) * | 2018-09-19 | 2019-02-15 | 北京英视睿达科技有限公司 | 一种代码部署方法 |
CN110489297B (zh) * | 2019-08-26 | 2023-07-25 | 山东浪潮科学研究院有限公司 | 一种基于图形界面的fpga调试信号设置方法 |
-
2020
- 2020-08-14 CN CN202010819208.1A patent/CN113722204A/zh active Pending
- 2020-08-19 CN CN202010837046.4A patent/CN113722116A/zh active Pending
- 2020-08-24 CN CN202010858123.4A patent/CN113726834A/zh active Pending
- 2020-09-09 CN CN202010940931.5A patent/CN113722205A/zh active Pending
-
2021
- 2021-04-30 WO PCT/CN2021/091752 patent/WO2021238592A1/zh unknown
- 2021-04-30 EP EP21812877.5A patent/EP4148585A4/en active Pending
- 2021-06-15 WO PCT/CN2021/100195 patent/WO2021239157A1/zh unknown
- 2021-06-15 EP EP21813031.8A patent/EP4148586A4/en active Pending
-
2022
- 2022-11-23 US US17/993,624 patent/US20230087995A1/en active Pending
- 2022-11-23 US US17/993,619 patent/US20230092858A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230087995A1 (en) | 2023-03-23 |
CN113722204A (zh) | 2021-11-30 |
EP4148586A1 (en) | 2023-03-15 |
CN113722205A (zh) | 2021-11-30 |
EP4148586A4 (en) | 2024-01-24 |
WO2021238592A1 (zh) | 2021-12-02 |
EP4148585A1 (en) | 2023-03-15 |
WO2021239157A1 (zh) | 2021-12-02 |
EP4148585A4 (en) | 2023-10-04 |
CN113722116A (zh) | 2021-11-30 |
US20230092858A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113726834A (zh) | 消息路由的方法、装置、系统、设备及介质 | |
CN108595221B (zh) | PaaS平台的插件加载方法、装置、服务器及存储介质 | |
US7433935B1 (en) | Self-adapting plug-in service | |
US9525592B2 (en) | Client/server network environment setup method and system | |
US9542302B2 (en) | System and method for remote debugging of an application in an image forming apparatus over a network | |
CN112165532A (zh) | 节点访问方法、装置、设备及计算机可读存储介质 | |
CN110224860B (zh) | 负载均衡应用创建方法、装置、计算机设备及存储介质 | |
CN108769124B (zh) | PaaS平台的应用部署方法、装置、服务器及存储介质 | |
US6651093B1 (en) | Dynamic virtual local area network connection process | |
US10404568B2 (en) | Agent manager for distributed transaction monitoring system | |
WO2019100266A1 (zh) | 移动边缘主机服务通知方法和装置 | |
JP2005504391A (ja) | パーソナルコンピュータのアップグレード | |
CN111404628B (zh) | 一种时间同步方法和装置 | |
WO2021179842A1 (zh) | 一种集成开发环境的构建方法、装置、设备及介质 | |
CN112422681B (zh) | 一种跨平台分布式通讯调用方法及装置 | |
US10725890B1 (en) | Program testing service | |
CN110995481A (zh) | 配置方法、服务器及计算机可读存储介质 | |
JP2015049876A (ja) | テストシステムおよび方法 | |
CN112948008B (zh) | 一种基于Ironic管理物理裸机的方法 | |
JP5610654B2 (ja) | 端末管理パッケージを提供する装置及び前記端末管理パッケージを受信する方法 | |
JP2015158773A (ja) | 仮想装置の動作検証装置,仮想装置の動作検証システム及びプログラム | |
CN113238780A (zh) | 云服务器的升级方法、升级设备及云服务器 | |
CN113268254A (zh) | 一种集群系统安装方法、装置、电子设备及存储介质 | |
CN111314461B (zh) | Ip挂载、数据处理方法和装置 | |
CN104570967A (zh) | 基于Android系统的远程控制方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220207 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |