CN115543647A - 一种函数调用方法 - Google Patents

一种函数调用方法 Download PDF

Info

Publication number
CN115543647A
CN115543647A CN202110738274.0A CN202110738274A CN115543647A CN 115543647 A CN115543647 A CN 115543647A CN 202110738274 A CN202110738274 A CN 202110738274A CN 115543647 A CN115543647 A CN 115543647A
Authority
CN
China
Prior art keywords
function
server
indication information
name
time
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
Application number
CN202110738274.0A
Other languages
English (en)
Inventor
李林锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Petal Cloud Technology Co Ltd
Original Assignee
Petal Cloud Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Petal Cloud Technology Co Ltd filed Critical Petal Cloud Technology Co Ltd
Priority to CN202110738274.0A priority Critical patent/CN115543647A/zh
Publication of CN115543647A publication Critical patent/CN115543647A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/544Remote

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请提供了一种函数调用方法,方法包括:在多个函数级联调用场景下,服务器通过接收函数客户端上报的函数调用指标数据,由服务器对指标数据进行计算分析,生成函数调用拓扑关系。根据函数执行的时间以及函数调用拓扑关系,由服务器判断是否在上游函数执行时预先创建下游调用的函数运行环境,并且计算下游函数运行环境的创建开始时间,以减少下游环境创建之后闲置的时间。通过这种预加载调度机制,解决传统函数调用时再加载遇到的时延增加问题。

Description

一种函数调用方法
技术领域
本申请涉及信息处理技术领域,尤其涉及一种函数调用方法。
背景技术
云函数提供了一种直接在云服务器上运行,无状态的、短暂的、由事件触发的代码的能力。云函数作为重要的云服务,已经得到了大量的应用。
随着云函数应用范围的不断扩大,在实践中也遇到了一些影响云函数进一步推广的技术瓶颈。其中一个比较大的问题就是函数间调用效率的问题。对于复杂场景,一个业务流程往往会包含多个函数。A函数调用B函数,B函数需要获取容器、下载、加载和编译函数,耗时在200毫秒左右,流程越复杂,调用的函数越多,时延就会线性增长,对于时延敏感型的业务是无法接受的。因此,如何提高函数间调用效率问题,减少函数调用时延是亟待解决的问题。
发明内容
本申请提供了一种函数调用方法,实现了在多个函数级联调用场景下,服务器通过接收函数客户端Agent上报的函数调用指标数据,由服务器对指标数据进行计算分析,生成函数调用拓扑关系。根据函数执行的时间以及函数调用拓扑关系,由服务器判断是否在上游函数执行时预先创建下游调用的函数运行环境,并且计算下游函数运行环境的创建开始时间,以减少下游环境创建之后闲置的时间。通过这种预加载调度机制,解决传统函数调用时再加载遇到的时延增加问题。
第一方面,本申请提供了一种函数调用系统,所述系统包括第一服务器和第二服务器,其中,所述第一服务器,用于接收所述第二服务器发送的第一函数的名称和版本标识;所述第一服务器,还用于基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间t1、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息;其中,所述第一函数用于调用所述第二函数;基于所述第二函数的名称和所述第二函数所在的所述第三服务器的网络的IP地址信息在所述第一函数的执行时间t1内,向所述第三服务器发送第一指示信息,所述第一指示信息用于指示所述第三服务器加载所述第二函数的运行环境;所述第二服务器,用于接收所述第一指示信息;所述第二服务器,还用于响应于所述第一指示信息,在所述第一函数的执行时间t1内,加载所述第二函数的运行环境。
通过第一方面提供的系统,第一服务器根据函数执行的时间以及函数调用拓扑关系,由第一服务器判断是否在上游函数执行时预先创建下游调用的函数运行环境,并且计算下游函数运行环境的创建开始时间,以减少下游环境创建之后闲置的时间。通过这种预加载调度机制,解决传统函数调用时再加载遇到的时延增加问题。
结合第一方面,在一种可能的实现方式中,所述第一服务器,具体用于:当所述第一函数的执行时间t1大于加载函数运行环境时间t3时,向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息指示所述第三服务器在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境;所述第二服务器,具体用于在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境。
这样,在函数一执行时,第一服务器向函数二所在的第三服务器发送第一指示信息,可以保证第三服务器在第二服务器执行第一函数时,边加载函数二的运行环境。并且在函数一执行完毕之前,已加载好函数二的运行环境。这样,节省了第三服务器加载函数二的运行环境的时间。
或者,当所述第一函数的执行时间t1小于加载函数运行环境时间t3时,向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后,开始加载所述第二函数的运行环境;所述第二服务器,具体用于在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
这样,在函数一执行时,第一服务器向函数二所在的第三服务器发送第一指示信息,可以保证第三服务器在第二服务器执行第一函数时,边加载函数二的运行环境。这样,节省了第三服务器加载函数二的运行环境的时间。
结合第一方面,在一种可能的实现方式中,所述第一服务器,还用于:基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的版本标识;基于所述第二函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的执行时间t3、第三函数的名称和所述第三函数所在的第四服务器的IP地址信息;其中,所述第二函数用于调用所述第三函数;基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,向所述第四服务器发送第二指示信息,所述第二指示信息用于指示所述第四服务器加载所述第三函数的运行环境;所述第三服务器,用于接收所述第二指示信息;所述第三服务器,还用于响应于所述第二指示信息,在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,加载所述第二函数的运行环境。
当函数一调用函数二,函数二调用函数三时,第四服务器在函数一执行时,或者在函数二执行时,开始加载函数三的运行环境。这样,节省了第四服务器加载函数三的运行环境的时间。
结合第一方面,在一种可能的实现方式中,所述第一服务器,具体用于:当所述第二函数的执行时间t3大于所述加载函数运行环境时间t3时,向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;所述第三服务器,具体用于接收所述第二指示信息;响应于所述第二指示信息,在接收到所述第一指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第二函数的执行时间t3小于所述加载函数运行环境时间t3,且当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和大于所述加载函数运行环境时间t3时向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;所述第三服务器,具体用于接收所述第二指示信息;响应于所述第二指示信息,在接收到所述第一指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和小于所述加载函数运行环境时间t3时,向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后,开始加载所述第二函数的运行环境;所述第三服务器,具体用于接收所述第二指示信息;响应于所述第二指示信息,在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
结合第一方面,在一种可能的实现方式中,所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个服务器中的IP地址信息。即第一服务器优先调用处于同一个服务器中的第二函数和第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个子网或公有云上私有VPC网络中的IP地址信息。即当没有处于同一个服务器中第二函数和第三函数时,第一服务器优先调用处于同一个子网或公有云上私有VPC网络中的IP地址信息中的第二函数和第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息不属于同一个子网或公有云上私有VPC网络中的IP地址信息。即当没有处于同一个子网或公有云上私有VPC网络中的IP地址信息中的第二函数和第三函数时,第一服务器调用其他子网或者VPC网络中第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
结合第一方面,在一种可能的实现方式中,所述第一服务器,还用于在接收所述第二服务器中发送的所述第一函数的名称和版本标识之前,接收所述第二服务器发送的所述第一函数的第一数据;其中,所述第一数据包括所述第一函数的名称和版本标识、所述第一函数的IP地址信息、所述第一函数的执行时间t1;接收所述第三服务器发送的所述第二函数的第二数据;其中,所述第二数据包括名称和版本标识、所述第二函数的IP地址信息、所述第二函数的执行时间t3;接收所述第四服务器发送的所述第三函数的第三数据;其中,所述第三数据包括所述第三函数的名称和版本标识、所述第三函数的IP地址信息、所述第三函数的执行时间t4;根据所述第一数据、所述第二数据和所述第三数据生成第一函数调用树;其中,所述第一函数调用树的根节点为所述第一函数的名称和版本标识。即第一服务器提前根据函数一、函数二和函数三上报的函数数据生成函数调用树,并保存函数调用树。这样,第一服务器可以从函数调用树中很容易的查找到函数之间的调用关系和函数执行时间,为第一服务器根据当前函数的执行时间预加载下游函数运行环境的时间提供了查询基础。
结合第一方面,在一种可能的实现方式中,所述第一服务器,还用于在基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息所之前,通过所述第一函数的名称和版本标识获取到所述第一函数的函数调用树。
第二方面,本申请提供另了一种函数调用方法,方法包括:第一服务器接收第二服务器中发送的第一函数的名称和版本标识;所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息;其中,所述第一函数用于调用所述第二函数;所述第一服务器基于所述第二函数的名称和所述第二函数所在的所述第三服务器的网络的IP地址信息在所述第一函数的执行时间内,向所述第三服务器发送第一指示信息,所述第一指示信息用于指示所述第三服务器加载所述第二函数的运行环境。
通过第二方面提供的方法,第一服务器根据函数执行的时间以及函数调用拓扑关系,由第一服务器判断是否在上游函数执行时预先创建下游调用的函数运行环境,并且计算下游函数运行环境的创建开始时间,以减少下游环境创建之后闲置的时间。通过这种预加载调度机制,解决传统函数调用时再加载遇到的时延增加问题。
结合第二方面,在一种可能的实现方式中,所述第一服务器基于所述第二函数的名称和所述第二函数的IP地址信息在所述第一函数的执行时间内,向所述第三服务器发送第一指示信息,具体包括:当所述第一函数的执行时间t1大于加载函数运行环境时间t3时,所述第一服务器向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境。
这样,在函数一执行时,第一服务器向函数二所在的第三服务器发送第一指示信息,可以保证第三服务器在第二服务器执行第一函数时,边加载函数二的运行环境。并且在函数一执行完毕之前,已加载好函数二的运行环境。这样,节省了第三服务器加载函数二的运行环境的时间。
或者,
当所述第一函数的执行时间t1小于加载函数运行环境时间t3时,所述第一服务器向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
这样,在函数一执行时,第一服务器向函数二所在的第三服务器发送第一指示信息,可以保证第三服务器在第二服务器执行第一函数时,边加载函数二的运行环境。这样,节省了第三服务器加载函数二的运行环境的时间。
结合第二方面,在一种可能的实现方式中,所述方法还包括:所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的版本标识;在所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息之后,所述方法还包括:所述第一服务器基于所述第二函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的执行时间t3、第三函数的名称和所述第三函数所在的第四服务器的IP地址信息;其中,所述第二函数用于调用所述第三函数;所述第一服务器基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,向所述第四服务器发送第二指示信息,所述第二指示信息用于指示所述第四服务器加载所述第三函数的运行环境。
当函数一调用函数二,函数二调用函数三时,第四服务器在函数一执行时,或者在函数二执行时,开始加载函数三的运行环境。这样,节省了第四服务器加载函数三的运行环境的时间。
结合第二方面,在一种可能的实现方式中,所述第一服务器基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第二函数的执行时间内,向所述第四服务器发送第二指示信息,具体包括:当所述第二函数的执行时间t3大于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境。
或者,
当所述第二函数的执行时间t3小于所述加载函数运行环境时间t3,且当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和大于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和小于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后,开始加载所述第二函数的运行环境。
结合第二方面,在一种可能的实现方式中,所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个服务器中的IP地址信息。即第一服务器优先调用处于同一个服务器中的第二函数和第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个子网或公有云上私有VPC网络中的IP地址信息。即当没有处于同一个服务器中第二函数和第三函数时,第一服务器优先调用处于同一个子网或公有云上私有VPC网络中的IP地址信息中的第二函数和第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息不属于同一个子网或公有云上私有VPC网络中的IP地址信息。即当没有处于同一个子网或公有云上私有VPC网络中的IP地址信息中的第二函数和第三函数时,第一服务器调用其他子网或者VPC网络中第三函数,这样,可以将函数调用的网络开销降低到最小,提升函数的执行效率。
结合第二方面,在一种可能的实现方式中,在所述第一服务器接收第二服务器中发送的第一函数的名称和版本标识之前,所述方法还包括:所述第一服务器接收所述第二服务器发送的所述第一函数的第一数据;其中,所述第一数据包括所述第一函数的名称和版本标识、所述第一函数的IP地址信息、所述第一函数的执行时间t1;所述第一服务器接收所述第三服务器发送的所述第二函数的第二数据;其中,所述第二数据包括名称和版本标识、所述第二函数的IP地址信息、所述第二函数的执行时间t3;所述第一服务器接收所述第四服务器发送的所述第三函数的第三数据;其中,所述第三数据包括所述第三函数的名称和版本标识、所述第三函数的IP地址信息、所述第三函数的执行时间t4;所述第一服务器根据所述第一数据、所述第二数据和所述第三数据生成第一函数调用树;其中,所述第一函数调用树的根节点为所述第一函数的名称和版本标识。即第一服务器提前根据函数一、函数二和函数三上报的函数数据生成函数调用树,并保存函数调用树。这样,第一服务器可以从函数调用树中很容易的查找到函数之间的调用关系和函数执行时间,为第一服务器根据当前函数的执行时间预加载下游函数运行环境的时间提供了查询基础。
结合第二方面,在一种可能的实现方式中,所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息所之前,所述方法还包括:所述第一服务器通过所述第一函数的名称和版本标识获取到所述第一函数的函数调用树。
第三方面,本申请提供了一种服务器,为第一服务器,所述第一服务器包括:一个或多个处理器、一个或多个存储器;所述一个或多个存储器与所述一个或多个处理器耦合,所述一个或多个存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,所述一个或多个处理器调用所述计算机指令以使得所述第一服务器执行上述任一方面中第一服务器执行的方法步骤。
第四方面,本申请提供了一种计算机存储介质,包括:计算机指令;当所述计算机指令在第一服务器上运行时,使得所述第一服务器执行上述任一方面中第一服务器执行的方法步骤。
第五方面,本申请提供了一种计算机程序产品,当所述计算机程序产品在第一服务器上运行时,使得所述第一服务器执行上述任一方面中第一服务器执行的方法步骤。
附图说明
图1为本申请实施例提供的一种服务器调用支付函数和票据管理函数的流程示意图;
图2为本申请实施例提供的一种服务器调用支付函数和票据管理函数的时序图;
图3为本申请实施例提供的一种系统架构图;
图4为本申请实施例提供的一种平台服务器200如何生成函数间调用关系拓扑结构的方法流程图;
图5A为本申请实施例提供的一种函数调用拓扑关系的示意图;
图5B为本申请实施例提供的一种函数调用树的示意图;
图5C为本申请实施例提供的一种数IP地址信息的存储结构的示意图;
图5D为本申请实施例提供的另一种函数调用树的示意图;
图6为本申请实施例提供的一种平台服务器200根据之前汇总的函数调用关系判断每个函数的启动时机的示意图;
图7为本申请实施例提供的一种平台服务器200提前加载函数运行环境的原理示意图。
具体实施方式
下面将结合附图对本申请实施例中的技术方案进行清除、详尽地描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
本申请的说明书和权利要求书及附图中的术语“用户界面(user interface,UI)”,是应用程序或操作系统与用户之间进行交互和信息交换的介质接口,它实现信息的内部形式与用户可以接受形式之间的转换。应用程序的用户界面是通过java、可扩展标记语言(extensible markup language,XML)等特定计算机语言编写的源代码,界面源代码在终端设备上经过解析,渲染,最终呈现为用户可以识别的内容,比如图像、文本、按钮等控件。控件(control)也称为部件(widget),是用户界面的基本元素,典型的控件有工具栏(toolbar)、菜单栏(menu bar)、输入框、按钮(button)、滚动条(scrollbar)、图像和文本。界面中的控件的属性和内容是通过标签或者节点来定义的,比如XML通过<Textview>、<ImgView>、<VideoView>等节点来规定界面所包含的控件。一个节点对应界面中一个控件或属性,节点经过解析和渲染之后呈现为用户可视的内容。此外,很多应用程序,比如混合应用(hybrid application)的界面中通常还包含有网页。网页,也称为页面,可以理解为内嵌在应用程序界面中的一个特殊的控件,网页是通过特定计算机语言编写的源代码,例如超文本标记语言(hyper text markup language,HTML),层叠样式表(cascading stylesheets,CSS),java脚本(JavaScript,JS)等,网页源代码可以由浏览器或与浏览器功能类似的网页显示组件加载和显示为用户可识别的内容。网页所包含的具体内容也是通过网页源代码中的标签或者节点来定义的,比如HTML通过<p>、<img>、<video>、<canvas>来定义网页的元素和属性。
用户界面常用的表现形式是图形用户界面(graphic user interface,GUI),是指采用图形方式显示的与计算机操作相关的用户界面。它可以是在电子设备的显示屏中显示的一个窗口、控件等界面元素。
目前,对于一个业务流程我那个来说,该业务流程涉及的函数之间调用是串行调用,即一个函数执行完成之后,释放该函数的运行环境,在加载以下一个函数的运行环境并运行下一个函数。
下面以一个具体的任务事项为例对目前函数调用的流程加以说明。
示例性的,在一个业务场景中,涉及到支付函数、票据管理函数等等。
如图1所示,图1示例性示出了服务器调用支付函数和票据管理函数的流程示意图。
用户触发任务事项,该任务事项包括支付函数和票据管理函数
服务器调用支付函数。
首先,服务器需加载支付函数的运行环境。
服务器加载支付函数的运行环境包括但不仅限于获取容器资源,下载并加载支付函数,加载支付函数的语言环境等等。
服务器将支付函数的运行环境加载完成之后,服务器在加载的支付函数的运行环境中运行支付函数。
服务器将支付函数运行完成之后,服务器需调用票据管理函数。
服务器在支付函数运行完成之后,服务器将释放支付函数的运行环境。之后,服务器开始加载票据管理函数的运行环境。服务器加载票据管理函数的运行环境包括但不仅限于获取容器资源,下载并加载票据管理函数,加载票据管理函数的语言环境等等。
服务器将票据管理函数的运行环境加载完成之后,服务器在加载的票据管理函数的运行环境中运行票据管理函数。
如图2所示,图2示例性示出了服务器调用支付函数和票据管理函数的时序图。
在0ms时,服务器开始加载支付函数的运行环境,若服务器加载支付函数的运行环境耗时200ms,则在200ms时,服务器加载支付函数的运行环境完毕,服务器开始运行支付函数。若支付函数的运行时间为100ms,则在300ms时,支付函数运行完毕。
服务器在支付函数运行完毕之后,释放支付函数的运行函数,销毁支付函数运行实例,释放资源。服务器释放支付函数的运行函数完毕之后,服务器将开始加载票据管理函数的运行环境。
即在300ms时,服务器开始加载票据管理函数的运行环境,若服务器加载票据管理函数的运行环境耗时300ms,则在600ms时,服务器加载票据管理函数的运行环境完毕,服务器开始运行票据管理函数。若票据管理函数的运行时间为200ms,则在800ms时,票据管理函数运行完毕。
服务器在票据管理函数运行完毕之后,释放票据管理函数的运行函数,并销毁票据管理函数运行实例,释放资源。
由上述分析可知,目前的函数调用方法,一方面,服务器在生成函数运行环境并启动函数的方式,每个函数调用会增加加载函数运行环境的时延,例如每个函数加载的耗时在200毫秒左右,百毫秒级的耗时增加对于很多用户体验型的业务影响很大;另一方面,随着级联调用的函数越多,函数加载额外增加的时延就越多,最终导致时延达到秒级或者分钟级,最终导致任务事项的总调用耗时增加到无法容忍的程度。
因此,本申请提供了一种函数调用方法,方法包括:在多个函数级联调用场景下,服务器通过接收函数客户端agent上报的函数调用指标数据,由服务器对指标数据进行计算分析,生成函数调用拓扑关系。根据函数执行的时间以及函数调用拓扑关系,由服务器判断是否在上游函数执行时预先创建下游调用的函数运行环境,并且计算下游函数运行环境的创建开始时间,以减少下游环境创建之后闲置的时间。通过这种预加载调度机制,解决传统函数调用时再加载遇到的时延增加问题。
函数客户端agent通常指与用户接口的客户端程序。函数客户端agent接收用户请求并将请求发给服务器,然后接收服务器回应并返回给用户。
如图3所示,图3示例性示出了本申请实施例提供的一种系统架构图。
该系统包括函数调度器和多个函数agent(代理)。
其中,函数调度器包括三个子模块,三个子模块分别为函数调度执行模块、拓扑分析服务模块和拓扑关系管理模块。
需要说明的是,函数调度执行模块、拓扑分析服务模块和拓扑关系管理模块可以为一个独立的模块,即该独立的模块可以实现函数调度执行模块、拓扑分析服务模块和拓扑关系管理模块三个模块的功能,函数调度执行模块、拓扑分析服务模块和拓扑关系管理模块也可以两两结合为一个模块,本申请对于函数调度执行模块、拓扑分析服务模块和拓扑关系管理模块的存在形式不做限定。
多个函数agent用于将每个函数对应的调用数据发送至函数调度器中的拓扑分析服务模块。
本申请以下实施例以多个函数agent包括函数一(第一函数)agent、函数二(第二函数)agent和函数三(第三函数)agent为例进行说明。在其他实施例中,多个函数agent可以包括比函数一agent、函数二agent和函数三agent更多或更少的函数agent,本申请在此不做限定。
函数一agent将函数一的调用数据上报至函数调度器中的拓扑分析服务模块。函数二agent将函数二的调用数据上报至函数调度器中的拓扑分析服务模块。函数三agent将函数三的调用数据上报至函数调度器中的拓扑分析服务模块。
调用数据包括被调用函数的标识、调用方函数的IP信息、调用方函数的执行时间等等。调用数据还可以包括其他更多的信息,本申请在此不做限定。
示例性的,在一个任务事项中,函数一调用函数二,则函数一agent向拓扑分析服务模块上报的函数一的调用数据包括但不仅限于函数二的标识、函数一的IP信息、函数一的执行时间等等。
函数二调用函数三,则函数二agent向拓扑分析服务模块上报的函数二的调用数据包括但不仅限于函数三的标识、函数二的IP信息、函数二的执行时间等等。
函数三调用函数n,则函数三agent向拓扑分析服务模块上报的函数三的调用数据包括但不仅限于函数n的标识、函数三的IP信息、函数三的执行时间等等。
拓扑分析服务模块接收到函数一agent、函数二agent和函数三agent上报的函数的调用信息之后,将对多个函数之间的调用关系进行关联性分析,生成函数间调用关系的拓扑结构。
例如,函数间调用关系的拓扑结构可以是函数一->->函数三->函数n。该拓扑结构表示函数一调用函数二,函数二调用函数三。
之后,在具体应用中,服务器正在执行函数一,服务器通过函数调度器根据当前执行的函数一找到函数一的调用关系的拓扑结构,函数调度器将函数一的调用关系的拓扑结构和函数一的IP地址发送至函数调度执行模块,函数调度执行模块通过函数一的调用关系的拓扑结构和函数一的IP地址按照就近原则在时间T1之后预加载函数二的运行环境。
假如A函数执行时间为Ta,如果Ta>=200,则T=Ta–200,则服务器将在函数一执行至(Ta–200)ms时,开始加载函数二的运行环境。如果Ta<200,则T=0,则服务器将在函数一刚开始执行时,开始加载函数二的运行环境,或者服务器在开始运行函数一之前,在加载完成函数一的运行环境之前,开始加载函数二的运行环境,并在函数一执行完毕时,函数二的运行环境加载完毕,本申请实施例在此不做限定。
示例性的。若服务器创建函数运行环境的平均时间为200ms,函数一的执行时间为300ms,则服务器将在函数一执行至100ms时,开始加载函数二的运行环境;若函数一的执行时间为100ms时,则服务器将在函数一刚开始运行时,加载函数二的运行时间;或者服务器在开始运行函数一之前,在加载完成函数一的运行环境之前,开始加载函数二的运行环境,并在函数一执行完毕时,函数二的运行环境加载完毕,本申请实施例在此不做限定。
假如函数二的执行时间为Tb,如果Tb>=200,则T=Ta+(Tb-200),则服务器将在函数一执行至(Ta–200)ms时,开始加载函数三的运行环境。如果Tb<200&&(Ta+Tb)>=200,则T=Ta+Tb–200,则服务器将在函数一和函数二执行Ta+Tb–200时,开始加载函数三的运行环境。如果Ta+Tb<200,则T=0,则服务器将在函数一刚开始运行时,加载函数二的运行时间;或者服务器在开始运行函数一之前,在加载完成函数一的运行环境之前,开始加载函数二的运行环境,并在函数一执行完毕时,函数二的运行环境加载完毕,本申请实施例在此不做限定。
这里,函数调度执行模块如何在时间T之后预加载函数二的运行环境的,将在后续实施例详细介绍,具体的请参考后续实施例,本申请实施例在此不再赘述。
就近策略指的就是离调用方函数(函数一)物理地址最近的地方,如果是基于容器方案,则就近策略的取值是同一个容器;如果是虚拟机方案,则就近原则是同一个虚拟机或者虚拟机所在的宿主机。
不仅限于就近原则,在其他实施例中,函数调度执行模块也可以通过其他的调用原则在时间T之后预加载函数二的运行环境,本申请在此不做限定。
本申请实施例中,应用服务器100的函数Agent负责采集函数的调用关系和运行指标数据,将数据上报到平台服务器200(第一服务器)中函数调度器的拓扑分析服务模块,拓扑分析服务模块对函数Agent上报的数据指标进行过滤、汇总和计算,获取到函数的位置信息和拓扑关系,将拓扑关系信息保存到拓扑关系管理模块中。函数调度执行模块在函数运行时,根据当前函数的运行情况获取到当前函数对应的函数调用拓扑关系,并根据函数调度策略计算下游需要调用函数的运行环境创建时间T,通过提前预加载下游需要调用函数的运行环境的方式缩短函数间的调用时延。
如图4所示,图4示例性示出了平台服务器200如何生成函数间调用关系拓扑结构的方法流程图。
S401、函数一agent获取函数一的调用数据(第一数据)。
S402、函数一agent将函数一的调用数据发送至平台服务器200中的拓扑分析服务模块。
应用服务器100中的函数一agent获取函数一的调用数据,函数一的调用数据包括但不仅限于:调用方函数的函数名称(例如函数一)、调用方函数的函数版本(函数一的版本)、被调用方函数的名称(例如函数二)、被调用方函数的版本(例如函数二的版本)、调用方函数的IP地址信息(例如函数一的IP地址信息)、调用方函数的执行时间(例如函数一的执行时间)。这里,函数一的执行时间为函数一接收到请求之后到返回应答的执行时间,不包含函数一的运行环境的加载时间和函数一的启动时间。函数一的调用数据还可以包括其他跟多的数据,本申请在此不做限定。
函数一agent获取到函数一的调用数据之后,函数一agent将函数一的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。
在一些实施例中,函数一agent可以周期性(例如24小时)获取函数一的调用数据,并周期性(例如24小时)将t将函数一的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。本申请实施例在此不做限定。
S403、函数二agent获取函数二的调用数据(第二数据)。
S404、函数二agent将函数二的调用数据发送至平台服务器200中的拓扑分析服务模块。
应用服务器100中的函数二agent获取函数二的调用数据,函数二的调用数据包括但不仅限于:调用方函数的函数名称(例如函数二)、调用方函数的函数版本(函数二的版本)、被调用方函数的名称(例如函数二)、被调用方函数的版本(例如函数三的版本)、调用方函数的IP地址信息(例如函数二的IP地址信息)、调用方函数的执行时间(例如函数二的执行时间)。这里,函数二的执行时间为函数二接收到请求之后到返回应答的执行时间,不包含函数二的运行环境的加载时间和函数二的启动时间。函数二的调用数据还可以包括其他跟多的数据,本申请在此不做限定。
函数二agent获取到函数二的调用数据之后,函数二agent将函数二的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。
在一些实施例中,函数二agent可以周期性(例如24小时)获取函数二的调用数据,并周期性(例如24小时)将t将函数二的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。本申请实施例在此不做限定。
S405、函数三agent获取函数三的调用数据(第三数据),调用数据包括函数三的调用关系、函数三的IP信息和函数三的执行时间。
S406、函数三agent将函数三的调用数据发送至平台服务器200中的拓扑分析服务模块。
应用服务器100中的函数三agent获取函数三的调用数据,函数三的调用数据包括但不仅限于:调用方函数的函数名称(例如函数三)、调用方函数的函数版本(函数三的版本)、被调用方函数的名称(例如函数n)、被调用方函数的版本(例如函数n的版本)、调用方函数的IP地址信息(例如函数三的IP地址信息)、调用方函数的执行时间(例如函数三的执行时间)。这里,函数三的执行时间为函数三接收到请求之后到返回应答的执行时间,不包含函数三的运行环境的加载时间和函数三的启动时间。函数三的调用数据还可以包括其他跟多的数据,本申请在此不做限定。
函数三agent获取到函数三的调用数据之后,函数三agent将函数三的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。
在一些实施例中,函数三agent可以周期性(例如24小时)获取函数三的调用数据,并周期性(例如24小时)将t将函数三的调用数据打包为数据包,通过TPC/IP协议发送至平台服务器200中的拓扑分析服务模块。本申请实施例在此不做限定。
当函数被调度执行时,由函数Agent负责采集函数的调用数据,将调用数据生成到性能文件/或者以数据流的方式上报到平台服务器中的拓扑分析服务模块中。由于应用服务器中的函数有多个,每个函数又是集群部署的,因此函数的调用数据不在应用服务器中做汇总计算,由各个函数agent生成本节点的调用数据上报到平台服务器中的拓扑分析服务模块,由平台服务器中的拓扑分析服务模块做汇总和计算。
需要说明的是,本申请实施例列举的函数一、函数二和函数三可以属于同一个应用服务器中的函数,也可以属于不同的应用服务器中的函数,本申请在此不做限定。
S407、平台服务器200中的拓扑分析服务模块根据函数agent上报的函数调用数据生成函数调用拓扑关系,函数调用拓扑关系中每个节点包括函数信息。
函数信息包括但不仅限于函数名、函数的IP地址信息和函数的执行时间。
平台服务器200中的拓扑分析服务模块对应用服务器100中的函数agent上报的函数调用数据进行过滤、汇总和计算,生成函数调用拓扑关系。
函数调用拓扑关系中每个拓扑节点包括函数的函数名、函数的版本、函数的IP地址信息和函数的执行时间。
如图5A所示,图5A示例性示出了一种函数调用拓扑关系的示意图。
本申请实施例以函数一调用函数二,函数二调用函数三为例进行示例性说明。在其他实施例中,可以包括比上述函数一调用函数二,函数二调用函数三为例更多或者更复杂的调用关系,本申请实施例仅是以一种示例进行说明,不应构成限定。
如图5A所示,该函数调用拓扑关系包括两级函数调用关系,示例性的,两级函数调用关系为函数一调用函数二,函数二调用函数三。
该函数调用拓扑关系包括两级函数调用关系,对应有三个节点,分别为节点一、节点二和节点三。
其中,节点一的函数信息为函数一的函数信息,节点一的函数信息包括:函数一的名称、函数一的版本、函数一的IP地址信息和函数一的执行时间。示例性的,函数一的名称为“getImei”,函数一的IP地址信息为“222.212.231171:3652”,函数一的执行时间为200ms。
函数一调用函数二,因此节点二的函数信息为函数二的函数信息,节点二的函数信息包括:函数二的名称、函数二的版本、函数二的IP地址信息和函数二的执行时间。示例性的,函数二的名称为“getDeviceId”、函数二的IP地址信息为“222.212.231171:3636”,函数二的执行时间为100ms。
函数二调用函数三,因此节点三的函数信息为函数三的函数信息,节点三的函数信息包括:函数三的名称、函数三的版本、函数三的IP地址信息和函数三的执行时间。示例性的,函数三的名称为“getDeviceData”,函数三的IP地址信息为“222.212.231171:3645”,函数三的执行时间为100ms。
S408、平台服务器200中的拓扑分析服务模块将函数调用拓扑关系中每个节点的函数信息发送至平台服务器200中的拓扑关系管理模块。
平台服务器200中的拓扑分析服务模块将函数调用拓扑关系中每个节点的函数信息发送至平台服务器200中的拓扑关系管理模块,拓扑关系管理模块接收拓扑分析服务模块发送的函数调用拓扑关系中每个节点的函数信息。
S409、平台服务器200中的拓扑关系管理模块根据函数调用拓扑关系中每个节点的函数信息生成函数调用树,并存储函数调用树。
平台服务器200中的拓扑关系管理模块用于存储和管理拓扑分析服务模块发送的函数调用拓扑关系,并为函数调度执行模块提供拓扑查询功能,即函数调度执行模块可以在拓扑关系管理模块中查找到每一个函数的下游执行函数的函数信息,这样,函数调度执行模块可以当前函数执行时,预加载当前函数的下游函数的运行环境。这样,可以减少函数总的调用和运行时间,减小任务事项的时延。
函数调用树描述了函数之间调用的级联结构。通过这种级联的存储结构,可以完整的把函数调用拓扑关系和函数执行时间描述出来。具体的存储技术可以选择关系型数据库,或者其它支持多条件索引的存储服务,本申请在此不做限定。
示例性的,如图5B所示,图5B示例性示出了一种函数调用树的示意图。需要说明的是,图5B只是示例性示出了一种函数调用树,还可以采用其他形式的函数调用树,本申请实施例在此不做限定。
如图5B所示,该函数调用树包括仅描述了函数名称、函数版本、函数的执行时间和函数之间的调用关系。那么平台服务器200还需生成函数的IP地址信息的存储结构,例如函数的IP地址信息的存储结构。函数的IP地址信息的存储结构可以是拓扑关系管理模块根据调用拓扑关系生成的,也可以是拓扑分析服务模块生成的,拓扑分析服务模块将生成的函数的IP地址信息的存储结构发送至拓扑关系管理模块,拓扑关系管理模块将函数的IP地址信息的存储结构存储起来。
如图5B所示,该函数调用树描述了函数一调用函数二,函数二调用函数三的级联结构。根据该函数调用树,可以在执行当前函数时,获取到当前函数的执行时间和当前函数调用的目标函数的函数信息。
示例性的,该函数调用树的起始点为函数一的名称:函数一的版本(func1-key)。拓扑关系管理模块根据该函数一的名称:函数一的版本可以查询到函数一的调用数据(func1-value),函数一的调用数据由两个部分组成,第一部分是函数一的执行时间(func1-time),第二部分是函数一要调用的函数二的名称:函数二的版本(func2-key)。拓扑关系管理模块根据该函数二的名称:函数二的版本可以查询到函数二的调用数据(func2-value),函数二的调用数据由两个部分组成,第一部分是函数二的执行时间(func2-time),第二部分是函数二要调用的函数三的名称:函数三的版本(func3-key)。拓扑关系管理模块根据该函数三的名称:函数三的版本可以查询到函数三的调用数据(func3-value),函数三的调用数据由两个部分组成,第一部分是函数三的执行时间(func3-time),第二部分是函数三要调用的函数n的名称:函数n的版本(funcn-key)。
在函数调用树中,拓扑关系管理模块输入funcx-key,funcx-key的取值格式为:函数x的名称:函数x的版本。拓扑关系管理模块根据funcx-key,可以从函数调用树中获取到funcx-value,funcx-value由两部分组成,一部分是funcx的执行时间,另一部分是函数x的调用关系,即funcx要调用的funcx+1-key,取值为funcx+1-key的取值格式为:函数x+1的名称:函数x+1的版本。
示例性的,当服务器调用函数一时,拓扑关系管理模块可以将输入func1-key,即拓扑关系管理模块将函数以的名称:函数一的版本作为函数调用树的输入,拓扑关系管理模块根据函数调用树输出函数一的调用数据(func1-value),函数一的调用数据由两个部分组成,第一部分是函数一的执行时间(func1-time),第二部分是函数一要调用的函数二的名称:函数二的版本(func2-key)。这样,服务器在执行函数一时,可以获取到函数一的执行时间和调用的函数信息,并在函数一执行完毕之前,预加函数一调用的函数的运行环境,这样,可以减少函数调用的时间。
如图5C所示,图5C示例性示出了一种函数IP地址信息的存储结构的示意图。
该函数IP地址信息的存储结构描述了函数一、函数二和函数三的IP地址信息级联存储结构。
示例性的,该函数IP地址信息的存储结构的起始点为函数一的名称:函数一的版本(func1-key)。拓扑关系管理模块根据该函数一的名称:函数一的版本可以查询到函数一的调用数据(func1-value),函数一的调用数据由两个部分组成,第一部分是函数一的IP地址信息,第二部分是函数一要调用的函数二的名称:函数二的版本(func2-key)。拓扑关系管理模块根据该函数二的名称:函数二的版本可以查询到函数二的调用数据(func2-value),函数二的调用数据由两个部分组成,第一部分是函数二的IP地址信息,第二部分是函数二要调用的函数三的名称:函数三的版本(func3-key)。拓扑关系管理模块根据该函数三的名称:函数三的版本可以查询到函数三的调用数据(func1-value),函数三的调用数据由两个部分组成,第一部分是函数三的IP地址信息,第二部分是函数三要调用的函数n的名称:函数n的版本(funcn-key)。
在函数IP地址信息的存储结构中,拓扑关系管理模块输入funcx-key,funcx-key的取值格式为:函数x的名称:函数x的版本。拓扑关系管理模块根据funcx-key,可以从函数调用树中获取到funcx-value,funcx-value由两部分组成,一部分是funcx的IP地址信息,另一部分是函数x的调用关系,即funcx要调用的funcx+1-key,取值为funcx+1-key的取值格式为:函数x+1的名称:函数x+1的版本。
在一些实施例中,拓扑关系管理模块可以根据函数名称、函数版本、函数的执行时间、函数的IP地址信息和函数之间的调用关系存储为一个存储结构,即生成一个函数调用树。
如图5D所示,图5D示例性示出了另一种函数调用树的示意图。
图5D中,该函数调用树仅描述了函数名称、函数版本、函数的执行时间、函数的IP地址信息和函数之间的调用关系。该函数调用树描述了函数一调用函数二,函数二调用函数三的级联结构。根据该函数调用树,可以在执行当前函数时,获取到当前函数的执行时间/当前函数的V和当前函数调用的目标函数的函数信息。
示例性的,该函数调用树的起始点为函数一的名称:函数一的版本(func1-key)。拓扑关系管理模块根据该函数一的名称:函数一的版本可以查询到函数一的调用数据(func1-value),函数一的调用数据由三个部分组成,第一部分是函数一的执行时间(func1-time),第二部分是函数一要调用的函数二的名称:函数二的版本(func2-key),第三部分是函数一的IP地址信息。拓扑关系管理模块根据该函数二的名称:函数二的版本可以查询到函数二的调用数据(func2-value),函数二的调用数据由三个部分组成,第一部分是函数二的执行时间(func2-time),第二部分是函数二要调用的函数三的名称:函数三的版本(func3-key),第三部分是函数一的IP地址信息。拓扑关系管理模块根据该函数三的名称:函数三的版本可以查询到函数三的调用数据(func3-value),函数三的调用数据由三个部分组成,第一部分是函数三的执行时间(func3-time),第二部分是函数三要调用的函数n的名称:函数n的版本(funcn-key),第三部分是函数三的IP地址信息。
在函数调用树中,拓扑关系管理模块输入funcx-key,funcx-key的取值格式为:函数x的名称:函数x的版本。拓扑关系管理模块根据funcx-key,可以从函数调用树中获取到funcx-value,funcx-value由三部分组成,一部分是funcx的执行时间,另一部分是函数x的调用关系,即funcx要调用的funcx+1-key,取值为funcx+1-key的取值格式为:函数x+1的名称:函数x+1的版本,第三部分为函数x的IP地址信息。
示例性的,当服务器调用函数一时,拓扑关系管理模块可以将输入func1-key,即拓扑关系管理模块将函数以的名称:函数一的版本作为函数调用树的输入,拓扑关系管理模块根据函数调用树输出函数一的调用数据(func1-value),函数一的调用数据由三个部分组成,第一部分是函数一的执行时间(func1-time),第二部分是函数一要调用的函数二的名称:函数二的版本(func2-key),第三部分是函数三的IP地址信息。这样,服务器在执行函数一时,可以获取到函数一的执行时间、函数一的IP地址信息和函数一调用的函数信息,并在函数一执行完毕之前,预加函数一调用的函数的运行环境,这样,可以减少函数调用的时间。
需要说明的是,拓扑关系管理模块可以根据函数名称、函数版本、函数的执行时间、函数的IP地址信息和函数之间的调用关系存储为一个存储结构,即生成一个函数调用树。拓扑关系管理模块也可以将函数名称、函数版本、函数的执行时间和函数之间的调用关系存储为一个存储结构,将函数名称、函数版本、函数的IP地址信息和函数之间的调用关系存储为一个存储结构。拓扑关系管理模块还可以根据其他的规则存储函数名称、函数版本、函数的执行时间、函数的IP地址信息和函数之间的调用关系。本申请在此不做限定。
接下来,介绍平台服务器如何根据之前汇总的函数调用关系判断每个函数的启动时机的。
如图6所示,图6示例性示出了平台服务器200根据之前汇总的函数调用关系判断每个函数的启动时机的示意图。
S601、平台服务器200接收函数一agent上报的调用的函数一的名称和版本标识。
函数一所在的服务器可以是第二服务器。
当应用服务器调用函数一时,应用服务器中的函数一agent将函数一的名称和版本标识发送至平台服务器。平台服务器接收应用服务器中的函数一agent上报的函数一的名称和版本标识。
在一些实施例中,当应用服务器调用函数一时,应用服务器中的函数一agent将函数一的名称和版本标识发送至平台服务器中的函数调用执行模块。平台服务器中的函数调用执行模块接收应用服务器中的函数一agent上报的函数一的名称和版本标识。
S602、平台服务器200根据函数一的名称和版本标识获取到函数一调用树。
根据图4所示的实施例所述的,平台服务器200之前已经创建并保存了函数一的调用树,函数一的调用树的根节点为函数一的名称和版本标识。则平台服务器200可以根据函数一的名称和版本标识获取到函数一的调用树。函数一的调用树为一种存储数据的数据结构,函数一的调用树描述了函数一以及函数一需调用的下游函数的名称和版本标识和函数的执行时间。具体的,可以参考图5B所示的函数一的调用树。在一些实施例中,函数一的调用树还描述了函数一需调用的下游函数的IP地址信息,具体的,可以参考图5D所示的函数一的调用树,本申请实施例在此不再赘述。
在一些实施例中,则平台服务器200中的函数调用执行模块可以根据函数一的名称和版本标识获取到函数一的调用树。函数一的调用树为一种存储数据的数据结构,函数一的调用树描述了函数一以及函数一需调用的下游函数的名称和版本标识和函数的执行时间。具体的,可以参考图5B所示的函数一的调用树。在一些实施例中,函数一的调用树还描述了函数一需调用的下游函数的IP地址信息,具体的,可以参考图5D所示的函数一的调用树,本申请实施例在此不再赘述。
S603、平台服务器200根据函数一的调用树获取到该函数一调用树中函数之间的调用关系、每一个函数的IP地址信息和每一个函数的执行时间。
平台服务器200根据函数一的名称和版本标识获取到函数一的调用树之后,平台服务器200会遍历函数一的调用树,获取到函数一的调用树中所有的函数名称和版本标识。之后,平台服务器200根据函数一的调用树中所有的函数名称和版本标识获取到函数一的调用树中国函数之间的调用关系、每一个函数对应的IP地址信息、每一个函数对应的函数的执行时间。
在一些实施例中,则平台服务器200中的函数调用执行模块根据函数一的名称和版本标识获取到函数一的调用树之后,平台服务器200的函数调用执行模块会遍历函数一的调用树,获取到函数一的调用树中所有的函数名称和版本标识。之后,平台服务器200的函数调用执行模块根据函数一的调用树中所有的函数名称和版本标识获取到函数一的调用树中国函数之间的调用关系、每一个函数对应的IP地址信息、每一个函数对应的函数的执行时间。
例如,平台服务器200根据函数一的调用树中所有的函数名称和版本标识包括:函数一的名称和版本标识、函数二的名称和版本标识以及函数三的名称和版本标识。
函数二所在的服务器可以是第三服务器。函数三所在的服务器可以是第四服务器。
平台服务器200根据函数一的调用树中所有的函数名称和版本标识获取到函数一的调用树中函数之间的调用关系为函数一调用函数二、函数二调用函数三。
每一个函数对应的函数的IP地址信息为;函数一所在的第二服务器的IP地址信息为“222.212.231171:3652”,函数二所在的第三服务器的IP地址信息为“222.212.231171:3636”,函数三所在的第四服务器的IP地址信息为“222.212.231171:3645”。
需要说明的是,由于函数是集群分部的。因此,函数一所在的服务器的IP地址信息可以有一个或多个,函数二所在的服务器的IP地址信息可以有一个或多个,函数三所在的服务器的IP地址信息可以有一个或多个。
每一个函数对应的函数的执行时间为函数一的执行时间为200ms,函数二的执行时间为100ms,函数三的执行时间为100ms。
S604、平台服务器200根据函数之间的调用关系和函数的执行时间计算出每一个函数预加载运行环境的时间。
即平台服务器200可以根据函数之间的调用关系和函数的执行时间判断每个函数的启动时机。即平台服务器200会根据当前函数获取到直接调用的目标函数信息,以及目标函数需要调用的下游目标函数的信息。获取到下游的目标函数列表之后。如果当前函数直接调用的目标函数或者下游目标函数或者启动过早,则会导致资源闲置,如果启动过晚,则会增加调用时延,需要找出一个兼顾资源使用率和时延的平衡方案。
在一些实施例中,平台服务器200中的函数调用执行模块可以根据函数之间的调用关系和函数的执行时间判断每个函数的启动时机。即平台服务器200中的函数调用执行模块会根据当前函数获取到直接调用的目标函数信息,以及目标函数需要调用的下游目标函数的信息。获取到下游的目标函数列表之后。如果当前函数直接调用的目标函数或者下游目标函数或者启动过早,则会导致资源闲置,如果启动过晚,则会增加调用时延,需要找出一个兼顾资源使用率和时延的平衡方案。
平台服务器200可以采取以下两种方式预加载函数的运行环境。
方式一:
平台服务器200根据当前函数获取到直接调用的目标函数信息,以及目标函数需要调用的下游目标函数的信息,平台服务器200将当前函数直接调用的目标函数和下游目标函数的启动时间均提前计算出来。这样,平台服务器200不用在后续函数执行时,再多次计算函数的启动时间,可以提高函数的执行效率。加载函数二的运行环境也可以表示为t2。
假设有三个云函数一、函数二和函数三,它们之间的调用关系为函数一调用函数二,函数二调用函数三。则每个函数的启动时间T的计算规则如下:加载函数运行环境的平均时间(例如200ms),则函数二和函数三的预加载运行环境的时间T计算如下:
平台服务器200基于函数二的名称和函数二所在的第三服务器的IP地址信息在函数一的执行时间T1内,向函数二所在的第三服务器发送第一指示信息,第一指示信息用于指示函数二所在的第三服务器加载函数二的运行环境。T1也可以是t1。
具体的:
假如函数一函数执行时间为T1:如果T1>=200,则T=T1–200,即函数二在函数一运行时间不大于T1–200时,开始加载函数二的运行环境。如果T1<200,则T=0,即函数二在函数一刚开始运行时,开始加载函数二的运行环境。
平台服务器200基于函数三的名称和函数三所在的第四服务器的IP地址信息在函数一的执行时间t1内或在函数二的执行时间T3内,向第四服务器发送第二指示信息,第二指示信息用于指示第四服务器加载函数三的运行环境。T3也可以是t3。
具体的:
假如函数二函数执行时间为T3:如果T3>=200,则T=T1+(T3-200),即函数二在函数一运行不大于T1+(T3-200)时,开始加载函数三的运行环境。如果T3<200&&(T1+T3)>=200,则T=T1+T3–200,即函数三在函数一运行时间不大于T1+T3–200时,开始加载函数三的运行环境。如果T1+T3<200,则T=0,即函数三在函数一刚开始运行时,开始加载函数二的运行环境。
示例性的,函数一的调用树中所有的函数名称和版本标识包括:函数一的名称和版本标识、函数二的名称和版本标识以及函数三的名称和版本标识。函数之间的调用关系为函数一调用函数二、函数二调用函数三。函数一的执行时间为200ms,函数二的执行时间为100ms,函数三的执行时间为100ms。
若函数一正在被调用,函数一agent向平台服务器200发送调用信息,即函数一agent将函数一的名称和标识发送至平台服务器200。
平台服务器200获取到函数一的调用树,并确定出函数一的调用树中的函数调用树的关系为函数一调用函数二、函数二调用函数三。函数一的执行时间为200ms,函数二的执行时间为100ms,函数三的执行时间为100ms。
平台服务器200获取到函数一的执行时间,以及函数一调用的函数二的执行时间和函数二调用函数三的执行时间。平台服务器200根据函数一的执行时间,以及函数一调用的函数二的执行时间和函数二调用函数三的执行时间,将函数二和函数三的预加载运行环境的时间都计算出来。
示例性的,函数一的执行时间为200ms,则在刚开始执行函数一时,开始加载函数二的运行环境。函数二的执行时间为100ms,函数二的执行时间小于加载函数运行环境的平均时间,且函数一的执行时间加函数二的执行时间(例如300ms)大于加载函数运行环境的平均时间(例如200ms),则在函数一执行至函数一的执行时间加函数二的执行时间减去加载函数运行环境的平均时间(例如100ms)时,开始加载函数三的运行环境。
平台服务器200在获取到函数一调用的所有函数的启动时间之后,在一种可能的实现方式中,平台服务器200可以将函数一调用的所有函数的启动时间保存至MAP中。可以理解为,MAP实质为一种数据存储结构。平台服务器200将函数一调用的所有函数的启动时间保存至MAP中之后,平台服务器200根据函数的名称和标识可以快速的在MAP中查找到该函数对应的启动时间,可以提高查找效率。不进行于MAP,平台服务器200还可以将函数一调用的所有函数的启动时间以其他的数据存储结构存储起来,本申请实施例在此不做限定。
如下示出了MAP的存储结构:
Map exeFuncTime=new HashMap();
exeFuncTime.put(func2Key,func2Time);
exeFuncTime.put(func3Key,func3Time);
exeFuncTime.put(func4Key,func4Time);
exeFuncTime.put(funcxKey,funcxTime)
如上述可知,MAP的存储结构中funcXKey的定义为:函数名称:函数版本。funcXTime的定义为:对应的函数x的预加载运行环境的时间T。
示例性的,func2Key为函数二的名称和函数二的版本标识,func2Time为函数二的预加载运行环境的时间T。func3Key为函数三的名称和函数三的版本标识,func3Time为函数三的预加载运行环境的时间T。
方式二:
平台服务器200根据当前函数获取到直接调用的目标函数,平台服务器200将当前函数直接调用的目标函数信息的启动时间计算出来。这样,平台服务器200在执行当前函数执行时,实时计算出当前函数需要调用的目标函数的启动时间,这样,可以避免平台服务器200将当前函数直接调用的目标函数和下游目标函数的启动时间均提前计算出来时,有些函数不会被执行,但是这些函数的启动时间已被计算出来,导致资源浪费。
假设有三个云函数一、函数二和函数三,它们之间的调用关系为函数一调用函数二,函数二调用函数三。则每个函数的启动时间T的计算规则如下:加载函数运行环境的平均时间(例如200ms),则函数二和函数三的预加载运行环境的时间T计算如下:
1、在函数一运行时,平台服务器200开始计算函数一调用的函数二的启动时间,即函数一所在的应用服务器什么时候开始加载函数二的运行环境。假如函数一的函数执行时间为T1:如果T1>=200,则T=T1–200,即函数二在函数一运行时间不大于T1–200时,开始加载函数二的运行环境。如果T1<200,则T=0,即函数二在函数一刚开始运行时,开始加载函数二的运行环境。
2、在函数二运行时,平台服务器200开始计算函数二调用的函数三的启动时间,即函数二所在的应用服务器什么时候开始加载函数三的运行环境。假如函数二的函数执行时间为T3:如果T3>=200,则T=T3–200,即函数三在函数二运行时间不大于T3–200时,开始加载函数三的运行环境。如果T3<200,则T=0,即函数三在函数二刚开始运行时,开始加载函数三的运行环境。
以此类推,平台服务器200按照上述规则在每个函数执行时,实时计算出当前函数需调用的目标函数的加载目标函数的运行环境的时间。这样,可以减少加载函数的运行环境的时间,提高函数调用的效率。
S605、平台服务器200根据每一个函数预加载运行环境的时间T,根据每一个函数的IP地址信息向每一个函数所在的应用服务器发送加载函数运行环境的信息。
由S604中所知,平台服务器200可以在当前函数执行时,将当前函数直接调用的目标函数和下游目标函数的启动时间均提前计算出来。平台服务器200也可以在执行当前函数执行时,实时计算出当前函数需要调用的目标函数的启动时间,具体的,请参考S904中所述的实施例。本身请在此不做限定。
当平台服务器200在当前函数执行时,将当前函数直接调用的目标函数和下游目标函数的启动时间均提前计算出来时,平台服务器200可以获取到该函数调用树中所有函数的预加载运行环境的时间。
示例性的,当前函数为函数一,函数一所在的函数调用树包括函数一调用函数二,函数二调用函数三。由S904中所知,平台服务器200已提前计算出了函数二和函数三的启动时间。
如图7所示,图7示例性示出了平台服务器200提前加载函数运行环境的原理示意图。
示例性的,函数一所在的应用服务器开始执行函数一,函数一agent向平台服务器200中的函数调度器发送函数调用请求,该请求中携带了函数一的名称和标识。之后,函数调度器根据函数一的名称和标识,获取到函数一的函数调用树。并获取到函数一的调用树中所有的函数名称和版本标识。之后,平台服务器200根据函数一的调用树中所有的函数名称和版本标识获取到函数一的调用树中国函数之间的调用关系以及每一个函数对应的函数的执行时间。在根据每一个函数对应的函数的执行时间计算出每一个函数的启动时间。
在函数调度器接收到函数一agent发送的函数调用请求,之后,函数调度器根据之前计算出来的函数二的启动时间,在合适的时机通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息。
示例性的,在函数调度器接收到函数一agent发送的函数调用请求,之后,如果函数一执行时间T1大于应用服务器加载函数二的运行环境的时间(例如200ms),即如果T1>=200,则T=T1–200,即函数二在函数一运行时间不大于T1–200时,函数调度器通过函数调度执行模块通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息,该信息用于指示函数二所在的应用服务器在函数一运行时间不大于T1–200时,开始加载函数二的运行环境。如果函数一执行时间T1小于应用服务器加载函数二的运行环境的时间(例如200ms),即T1<200,则T=0,即函数二在函数一刚开始运行时,函数调度器通过函数调度执行模块通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息,该信息用于指示函数二所在的应用服务器在函数一刚开始运行时,开始加载函数二的运行环境。
在函数调度器接收到函数二agent发送的函数调用请求,之后,函数调度器根据之前计算出来的函数三的启动时间,在合适的时机通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息。
示例性的,在函数调度器接收到函数二agent发送的函数调用请求,之后,如果函数二执行时间T 3大于应用服务器加载函数三的运行环境的时间(例如200ms),即如果T3>=200,则T=T1+T3–200,即函数三在函数二开始运行时间不大于T1+(T3-200)时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数二开始运行时间不大于T1+(T3-200)时,开始加载函数三的运行环境。
如果函数二执行时间T3小于应用服务器加载函数三的运行环境的时间(例如200ms),但是函数一执行时间T1和函数二执行时间T3之和大于应用服务器加载函数三的运行环境的时间(例如200ms),即T3<200&&(T1+T3)>=200,则T=T1+T3–200,即函数三在函数一执行时间不大于T1+T3–200时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数一执行时间不大于T1+T3–200时,开始加载函数三的运行环境。
如果函数二执行时间T3小于应用服务器加载函数三的运行环境的时间(例如200ms),且函数一执行时间T1和函数二执行时间T3之和小于应用服务器加载函数三的运行环境的时间(例如200ms),即T3<200&&(T1+T3)<200,则T=0,即函数三在函数一刚开始执行时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数一刚开始执行时,开始加载函数三的运行环境。
当平台服务器200在执行当前函数执行时,实时计算出当前函数需要调用的目标函数的启动时间,并在平台服务器200执行当前函数时,在合适的时机向当前函数需要调用的目标函数所在的应用服务器发送加载当前函数需要调用的目标函数的运行环境,当当前函数为函数一时,当前函数需要调用的目标函数为函数二。当当前函数为函数二时,当前函数需要调用的目标函数为函数三。
由S604中所知,平台服务器200可以在执行函数一时,计算函数二的启动时间。平台服务器200可以在执行函数二时,计算函数三的启动时间。
如图7所示,图7示例性示出了平台服务器200提前加载函数运行环境的原理示意图。
示例性的,函数一所在的应用服务器开始执行函数一,函数一agent向平台服务器200中的函数调度器发送函数调用请求,该请求中携带了函数一的名称和标识。之后,函数调度器根据函数一的名称和标识,获取到函数一的函数调用树。并获取到函数一的调用树中所有的函数名称和版本标识。之后,平台服务器200获取到函数一需要调用的目标函数(函数二)。在根据函数一对应的函数的执行时间计算出函数二的启动时间。
在函数调度器接收到函数一agent发送的函数调用请求,之后,函数调度器实时根据函数一对应的函数的执行时间计算出函数二的启动时间,并在合适的时机通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息。
示例性的,在函数调度器接收到函数一agent发送的函数调用请求,并获取到函数一的执行时间。如果函数一执行时间T1大于应用服务器加载函数二的运行环境的时间(例如200ms),即如果T1>=200,则T=T1–200,即函数二在函数一运行时间不大于T1–200时,函数调度器通过函数调度执行模块通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息,该信息用于指示函数二所在的应用服务器在函数一运行时间不大于T1–200时,开始加载函数二的运行环境。如果函数一执行时间T1小于应用服务器加载函数二的运行环境的时间(例如200ms),即T1<200,则T=0,即函数二在函数一刚开始运行时,函数调度器通过函数调度执行模块通过函数二的IP地址信息向函数二所在的应用服务器发送加载函数二的运行环境的信息,该信息用于指示函数二所在的应用服务器在函数一刚开始运行时,开始加载函数二的运行环境。
在函数调度器接收到函数二agent发送的函数调用请求,函数调度器实时根据函数二对应的函数的执行时间计算出函数三的启动时间,并在合适的时机通过函数二的IP地址信息向函数三所在的应用服务器发送加载函数二的运行环境的信息。
示例性的,在函数调度器接收到函数二agent发送的函数调用请求,并获取到函数二的执行时间。之后,如果函数二的执行时间T3大于应用服务器加载函数三的运行环境的时间(例如200ms),即如果T3>=200,则T=T1+T3–200,即函数三在函数二开始运行时间不大于T1+(T3-200)时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数二开始运行时间不大于T1+(T3-200)时,开始加载函数三的运行环境。
如果函数二执行时间T3小于应用服务器加载函数三的运行环境的时间(例如200ms),但是函数一执行时间T1和函数二执行时间T3之和大于应用服务器加载函数二的运行环境的时间(例如200ms),即T3<200&&(T1+T3)>=200,则T=T1+T3–200,即函数三在函数一执行时间不大于T1+T3–200时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数一执行时间不大于T1+T3–200时,开始加载函数三的运行环境。
如果函数二执行时间T3小于应用服务器加载函数二的运行环境的时间(例如200ms),且函数一执行时间T1和函数二执行时间T3之和小于应用服务器加载函数二的运行环境的时间(例如200ms),即T3<200&&(T1+T3)<200,则T=0。即函数三在函数一刚开始执行时,函数调度器通过函数调度执行模块通过函数三的IP地址信息向函数三所在的应用服务器发送加载函数三的运行环境的信息,该信息用于指示函数三所在的应用服务器在函数一刚开始执行时,开始加载函数三的运行环境。
接下来介绍函数调用策略。即平台服务器200在向函数所在的应用服务器发送预加载函数的运行环境的消息时,由于函数是集群分布的,即一个函数可以存在于一个或多个应用服务器中,即一个函数的IP地址信息可以包括一个或多个。接下来介绍平台服务器200如何从一个函数的多个IP地址信息中选中一个IP地址的。
平台服务器200可以根据以下原则从从一个函数的多个IP地址信息中选中一个IP地址的。
平台服务器200接收调用方函数的agent上报的函数调用请求,该请求中携带了调用方函数的IP地址信息、调用方函数的名称和版本标识。
平台服务器200根据调用方函数的名称和版本标识可以获取到调用方函数的函数调用树,之后,平台服务器200会遍历调用方函数的函数调用树,获取到函数一的函数调用树中所有的函数名称和版本标识。之后,平台服务器200根据调用方函数的函数调用树中所有的函数名称和版本标识获取到调用方函数的函数调用树中函数之间的调用关系、每一个函数对应的IP地址信息、每一个函数对应的函数的执行时间。
平台服务器200接收调用方函数agent上报的调用方函数的IP地址信息,当调用方函数需要调用下一级的目标函数时,平台服务器200将确定出目标函数的一个或多个IP地址信息中是否有和调用方函数的IP地址信息同属于同一个服务器的IP地址信息,若有的话,平台服务器200将目标函数的一个或多个IP地址信息中与调用方函数的IP地址信息同属于同一个服务器的IP地址信息作为平台服务器200向目标函数发送预加载函数的运行环境的消息的IP地址。
若目标函数的一个或多个IP地址信息中没有和调用方函数的IP地址信息同属于同一个服务器的IP地址信息,平台服务器200将确定出目标函数的一个或多个IP地址信息中是否有和调用方函数的IP地址信息同属于一个子网或公有云上私有(virtual privatecloud,VPC)网络内的IP地址信息,若有的话,平台服务器200将目标函数的一个或多个IP地址信息中与调用方函数的IP地址信息同属于一个子网或VPC网络内的IP地址信息作为平台服务器200向目标函数发送预加载函数的运行环境的消息的IP地址。
若平台服务器200确定出目标函数的一个或多个IP地址信息中没有和调用方函数的IP地址信息同属于一个子网或VPC网络内的IP地址信息,平台服务器200将从目标函数的一个或多个IP地址信息中任意选择一个IP地址信息作为平台服务器200向目标函数发送预加载函数的运行环境的消息的IP地址。该一个或多个IP地址信息中任意选择一个IP地址信息与调用方函数的IP地址信息不属于同一个子网或VPC网络。
根据上述由近到远的函数调用策略,应用服务器可以将函数调用的网络开销降低到最小,提升函数的执行效率。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (17)

1.一种函数调用系统,其特征在于,所述系统包括第一服务器和第二服务器,其中,
所述第一服务器,用于接收所述第二服务器发送的第一函数的名称和版本标识;
所述第一服务器,还用于基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间t1、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息;其中,所述第一函数用于调用所述第二函数;
基于所述第二函数的名称和所述第二函数所在的所述第三服务器的IP地址信息在所述第一函数的执行时间t1内,向所述第三服务器发送第一指示信息,所述第一指示信息用于指示所述第三服务器加载所述第二函数的运行环境;
所述第二服务器,用于接收所述第一指示信息;
所述第二服务器,还用于响应于所述第一指示信息,在所述第一函数的执行时间t1内,加载所述第二函数的运行环境。
2.根据权利要求1所述的系统,其特征在于,所述第一服务器,具体用于:
当所述第一函数的执行时间t1大于加载函数运行环境时间t3时,向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境;
所述第二服务器,具体用于在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1小于加载函数运行环境时间t3时,向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后,开始加载所述第二函数的运行环境;
所述第二服务器,具体用于在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
3.根据权利要求1-2任一项所述的系统,其特征在于,所述第一服务器,还用于:
基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的版本标识;
基于所述第二函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的执行时间t3、第三函数的名称和所述第三函数所在的第四服务器的IP地址信息;其中,所述第二函数用于调用所述第三函数;
基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,向所述第四服务器发送第二指示信息,所述第二指示信息用于指示所述第四服务器加载所述第三函数的运行环境;
所述第三服务器,用于接收所述第二指示信息;
所述第三服务器,还用于响应于所述第二指示信息,在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,加载所述第二函数的运行环境。
4.根据权利要求3所述的系统,其特征在于,所述第一服务器,具体用于:
当所述第二函数的执行时间t3大于所述加载函数运行环境时间t3时,向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
所述第三服务器,具体用于接收所述第二指示信息;
响应于所述第二指示信息,在接收到所述第一指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第二函数的执行时间t3小于所述加载函数运行环境时间t3,且当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和大于所述加载函数运行环境时间t3时向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
所述第三服务器,具体用于接收所述第二指示信息;
响应于所述第二指示信息,在接收到所述第一指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和小于所述加载函数运行环境时间t3时,向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后,开始加载所述第二函数的运行环境;
所述第三服务器,具体用于接收所述第二指示信息;
响应于所述第二指示信息,在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
5.根据权利要求3-4任一项所述的系统,其特征在于,所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个服务器中的IP地址信息;
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个子网或公有云上私有VPC网络中的IP地址信息;
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息不属于同一个子网或公有云上私有VPC网络中的IP地址信息。
6.根据权利要求1-5任一项所述的系统,其特征在于,所述第一服务器,还用于在接收所述第二服务器中发送的所述第一函数的名称和版本标识之前,接收所述第二服务器发送的所述第一函数的第一数据;其中,所述第一数据包括所述第一函数的名称和版本标识、所述第一函数的IP地址信息、所述第一函数的执行时间t1;
接收所述第三服务器发送的所述第二函数的第二数据;其中,所述第二数据包括名称和版本标识、所述第二函数的IP地址信息、所述第二函数的执行时间t3;
接收所述第四服务器发送的所述第三函数的第三数据;其中,所述第三数据包括所述第三函数的名称和版本标识、所述第三函数的IP地址信息、所述第三函数的执行时间t4;
根据所述第一数据、所述第二数据和所述第三数据生成第一函数调用树;其中,所述第一函数调用树的根节点为所述第一函数的名称和版本标识。
7.根据权利要求1-6任一项所述的系统,其特征在于,所述第一服务器,还用于在基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息所之前,通过所述第一函数的名称和版本标识获取到所述第一函数的函数调用树。
8.一种函数调用方法,其特征在于,所述方法包括:
第一服务器接收第二服务器中发送的第一函数的名称和版本标识;
所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息;其中,所述第一函数用于调用所述第二函数;
所述第一服务器基于所述第二函数的名称和所述第二函数所在的所述第三服务器的网络的IP地址信息在所述第一函数的执行时间内,向所述第三服务器发送第一指示信息,所述第一指示信息用于指示所述第三服务器加载所述第二函数的运行环境。
9.根据权利要求8所述的方法,其特征在于,所述第一服务器基于所述第二函数的名称和所述第二函数的IP地址信息在所述第一函数的执行时间内,向所述第三服务器发送第一指示信息,具体包括:
当所述第一函数的执行时间t1大于加载函数运行环境时间t3时,所述第一服务器向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后的小于等于(t1-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1小于加载函数运行环境时间t3时,所述第一服务器向所述第三服务器发送所述第一指示信息;其中,所述第一指示信息用于指示所述第三服务器在接收到所述第一指示信息后,开始加载所述第二函数的运行环境。
10.根据权利要求8-9任一项所述的方法,其特征在于,所述方法还包括:所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的版本标识;
在所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息之后,所述方法还包括:
所述第一服务器基于所述第二函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第二函数的执行时间t3、第三函数的名称和所述第三函数所在的第四服务器的IP地址信息;其中,所述第二函数用于调用所述第三函数;
所述第一服务器基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第一函数的执行时间t1内或在所述第二函数的执行时间t3内,向所述第四服务器发送第二指示信息,所述第二指示信息用于指示所述第四服务器加载所述第三函数的运行环境。
11.根据权利要求10所述的方法,其特征在于,所述第一服务器基于所述第三函数的名称和所述第三函数所在的所述第四服务器的IP地址信息在所述第二函数的执行时间内,向所述第四服务器发送第二指示信息,具体包括:
当所述第二函数的执行时间t3大于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第二函数的执行时间t3小于所述加载函数运行环境时间t3,且当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和大于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后的小于等于(t1+t3-t3)时间内,开始加载所述第二函数的运行环境;
或者,
当所述第一函数的执行时间t1与所述第二函数的执行时间t3的和小于所述加载函数运行环境时间t3时,所述第一服务器向所述第四服务器发送所述第二指示信息;其中,所述第二指示信息用于指示所述第四服务器在接收到所述第二指示信息后,开始加载所述第二函数的运行环境。
12.根据权利要求10-11任一项所述的方法,其特征在于,所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个服务器中的IP地址信息;
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息属于同一个子网或公有云上私有VPC网络中的IP地址信息;
或者,
所述第三服务器的网络的IP地址信息和所述第四服务器的IP地址信息不属于同一个子网或公有云上私有VPC网络中的IP地址信息。
13.根据权利要求8-12任一项所述的方法,其特征在于,在所述第一服务器接收第二服务器中发送的第一函数的名称和版本标识之前,所述方法还包括:
所述第一服务器接收所述第二服务器发送的所述第一函数的第一数据;其中,所述第一数据包括所述第一函数的名称和版本标识、所述第一函数的IP地址信息、所述第一函数的执行时间t1;
所述第一服务器接收所述第三服务器发送的所述第二函数的第二数据;其中,所述第二数据包括名称和版本标识、所述第二函数的IP地址信息、所述第二函数的执行时间t3;
所述第一服务器接收所述第四服务器发送的所述第三函数的第三数据;其中,所述第三数据包括所述第三函数的名称和版本标识、所述第三函数的IP地址信息、所述第三函数的执行时间t4;
所述第一服务器根据所述第一数据、所述第二数据和所述第三数据生成第一函数调用树;其中,所述第一函数调用树的根节点为所述第一函数的名称和版本标识。
14.根据权利要求8-13任一项所述的方法,其特征在于,在所述第一服务器基于所述第一函数的名称和版本标识从所述第一函数的函数调用树中获取到所述第一函数的执行时间、第二函数的名称和所述第二函数所在的第三服务器的网络之间互连的协议IP地址信息所之前,所述方法还包括:
所述第一服务器通过所述第一函数的名称和版本标识获取到所述第一函数的函数调用树。
15.一种服务器,为第一服务器,其特征在于,所述第一服务器包括:一个或多个处理器、一个或多个存储器;所述一个或多个存储器与所述一个或多个处理器耦合,所述一个或多个存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,所述一个或多个处理器调用所述计算机指令以使得所述第一服务器执行上述权利要求8-14中任一项所述的方法。
16.一种计算机存储介质,其特征在于,包括:计算机指令;当所述计算机指令在第一服务器上运行时,使得所述一服务器上执行如权利要求8-14中任一项所述的方法。
17.一种计算机程序产品,其特征在于,当所述计算机程序产品在第一服务器上运行时,使得所述第一服务器执行如权利要求8-14中任一项所述的方法。
CN202110738274.0A 2021-06-30 2021-06-30 一种函数调用方法 Pending CN115543647A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110738274.0A CN115543647A (zh) 2021-06-30 2021-06-30 一种函数调用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110738274.0A CN115543647A (zh) 2021-06-30 2021-06-30 一种函数调用方法

Publications (1)

Publication Number Publication Date
CN115543647A true CN115543647A (zh) 2022-12-30

Family

ID=84716906

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110738274.0A Pending CN115543647A (zh) 2021-06-30 2021-06-30 一种函数调用方法

Country Status (1)

Country Link
CN (1) CN115543647A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116680040A (zh) * 2023-07-26 2023-09-01 腾讯科技(深圳)有限公司 一种容器处理方法、装置、设备、存储介质及程序产品
CN117834709A (zh) * 2024-01-04 2024-04-05 天津大学 面向服务器无感知计算场景的函数间数据直接传递方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116680040A (zh) * 2023-07-26 2023-09-01 腾讯科技(深圳)有限公司 一种容器处理方法、装置、设备、存储介质及程序产品
CN116680040B (zh) * 2023-07-26 2024-04-05 腾讯科技(深圳)有限公司 一种容器处理方法、装置、设备、存储介质及程序产品
CN117834709A (zh) * 2024-01-04 2024-04-05 天津大学 面向服务器无感知计算场景的函数间数据直接传递方法
CN117834709B (zh) * 2024-01-04 2024-08-06 天津大学 面向服务器无感知计算场景的函数间数据直接传递方法

Similar Documents

Publication Publication Date Title
CN111930372A (zh) 一种通过可拖拽流程图实现的服务编排解决方法及系统
CN114064024B (zh) 微应用的开发方法、装置、设备、存储介质及程序产品
CN111814089A (zh) 一种页面渲染的方法、装置、渲染服务器和存储介质
CN111258565B (zh) 小程序的生成方法、系统、服务器及存储介质
CN115543647A (zh) 一种函数调用方法
CN110427258B (zh) 基于云平台的资源调度控制方法及装置
US20240346026A1 (en) Service processing methods and apparatuses
US7996840B2 (en) Method, system, and apparatus for scheduling pattern based web services
CN111083219A (zh) 请求处理方法、装置、设备与计算机可读存储介质
US7533383B2 (en) Method, system, and apparatus for scheduling pattern based web services
CN111338614A (zh) 一种应用程序接口开发方法、装置、设备及存储介质
CN117873597A (zh) 一种通过可视化配置方式实现api编排的方法和系统
CN111309558B (zh) 收集vue框架中事件数据的方法、装置、设备及存储介质
CN117252559A (zh) 业务流程的处理方法、装置、计算机设备、存储介质
CN112365239A (zh) 一种基于事件的云服务管理处置方法及系统
CN110008086B (zh) 一种日志生成方法、装置以及一种客户端
WO2023124657A1 (zh) 微应用的运行方法、装置、设备、存储介质及程序产品
CN114819483A (zh) 一种面向工业机器人的柔性服务编排系统及其方法
CN111400060B (zh) 设备联动方法、装置、服务器和介质
CN114675940A (zh) 应用实例构建方法、装置和设备
CN113098960A (zh) 服务运行方法、装置、服务器及存储介质
CN111367597A (zh) 一种颜色切换方法、装置及电子设备
CN115277745B (zh) 一种支持异步调度的服务总线编排系统及方法
CN112860454B (zh) 业务处理系统及方法
CN115080152B (zh) 消息中间件的Broker配置方法、装置、计算机设备及介质

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