CN111543037B - 事件驱动的无服务器函数编排 - Google Patents
事件驱动的无服务器函数编排 Download PDFInfo
- Publication number
- CN111543037B CN111543037B CN201880084687.8A CN201880084687A CN111543037B CN 111543037 B CN111543037 B CN 111543037B CN 201880084687 A CN201880084687 A CN 201880084687A CN 111543037 B CN111543037 B CN 111543037B
- Authority
- CN
- China
- Prior art keywords
- event
- actions
- state
- function
- serverless
- 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.)
- Active
Links
- 230000006870 function Effects 0.000 claims abstract description 353
- 230000009471 action Effects 0.000 claims abstract description 206
- 230000004044 response Effects 0.000 claims abstract description 91
- 238000000034 method Methods 0.000 claims abstract description 72
- 238000013507 mapping Methods 0.000 claims abstract description 59
- 230000015654 memory Effects 0.000 claims description 33
- 230000014509 gene expression Effects 0.000 claims description 31
- 230000007704 transition Effects 0.000 claims description 27
- 238000001914 filtration Methods 0.000 claims description 14
- 238000004891 communication Methods 0.000 claims description 6
- 230000001360 synchronised effect Effects 0.000 claims description 6
- 230000000977 initiatory effect Effects 0.000 claims description 2
- 238000012545 processing Methods 0.000 description 60
- 230000000875 corresponding effect Effects 0.000 description 34
- 230000008569 process Effects 0.000 description 34
- 230000000694 effects Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 16
- 230000001960 triggered effect Effects 0.000 description 10
- 238000004458 analytical method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 230000007774 longterm Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000010006 flight Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Computer And Data Communications (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及用于协调无服务器函数执行的技术。从一个或多个事件源接收一个或多个事件;根据映射规则,将所述一个或多个事件映射到函数图中的一个或多个事件状态,其中,所述一个或多个事件状态包括一个或多个动作;执行满足所述映射规则的一个或多个动作;将所述接收到的事件发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个动作相关联的一个或多个无服务器函数;从所述无服务器函数接收一个或多个响应。
Description
相关申请交叉引用
本申请要求于2018年11月16日提交的序列号为16/194,114、发明名称为“事件驱动的无服务器函数编排(Event-Driven Serverless Function Orchestration)”的美国常规专利申请的优先权和权益,该专利申请案是于2017年12月29日提交的序列号为15/858,359、申请名称为“事件驱动的无服务器函数编排(Event-Driven Serverless FunctionOrchestration)”的部分连续申请案,这两个专利申请案的全部内容通过引用结合在本申请中。
技术领域
本发明通常涉及协调无服务器函数执行,尤其涉及来自外部源的事件与无服务器函数的映射。
背景技术
云计算是指使用可以通过互联网等网络访问的动态可扩展计算资源。计算资源通常称为“云”,向用户提供一个或多个服务。这些服务可以根据服务类型进行分类,这些服务类型可以包括应用程序/软件、平台、基础设施、虚拟化以及服务器和数据存储,等等。术语“基于云的服务”,或更简单地说,“云服务”,不仅指通过云提供的服务,而且还指一种服务提供形式,在这种形式下,云客户与云服务提供商签订合同,在线交付通过云提供的服务。云服务提供商管理公共云、私有云或混合云,以便在线向一个或多个云客户交付云服务。
无服务器函数是在云中执行各个代码函数的服务的一个示例。这与虚拟机(virtual machine,VM)服务不同,虚拟机服务中的计算环境由整个VM实例组成。无服务器函数减轻了用户部署和管理执行这些函数的物理服务器的需求。另外,用户仅需要支付每个无服务器函数实例的实际执行时间的费用,而不需要支付物理服务器和VM实例的空闲时间的费用。另一个优点是持续扩展函数实例,以应对不断变化的流量负载。
发明内容
根据本发明的一个方面,提供了一种用于协调无服务器函数执行的方法。所述方法包括:从一个或多个外部源接收一个或多个事件;根据映射规则,将所述一个或多个事件映射到处理图中的一个或多个事件状态,其中,所述一个或多个事件状态包括一个或多个动作;如果所述一个或多个动作满足所述映射规则中的条件,执行所述一个或多个动作;接收响应于所述接收到的一个或多个事件的事件响应,其中,根据对应于一系列所述已执行的一个或多个动作的一个或多个任务的执行接收所述事件响应。
可选地,在任一上述方面中,所述一个或多个外部事件是异步事件或同步事件。
可选地,在任一上述方面中,所述方法还包括:按顺序或并发执行所述一个或多个事件状态中的所述一个或多个动作,其中,所述一个或多个动作分别调用对应的无服务器函数,使得所述事件中包含的数据包被传递到所述对应的无服务器函数来执行。所述数据包可以包括有效负载和/或元数据。
可选地,在任一上述方面中,所述方法还包括:在所述一个或多个动作执行完成之后,将事件响应发送到产生所述一个或多个事件的所述一个或多个外部源。
可选地,在任一上述方面中,所述事件响应包括所述按顺序执行的一个或多个动作中的单个有效负载或元数据。
可选地,在任一上述方面中,所述事件响应包括所述并发执行的一个或多个动作对应的组合有效负载或元数据。
可选地,在任一上述方面中,所述方法还包括:根据过滤条件和转换条件,对所述有效负载或元数据的内容进行过滤,以修改所述有效负载或元数据;以及将匹配事件状态中的一个或多个已完成的并发动作的多个事件响应组合到单个事件响应中的有效负载或元数据中。
可选地,在任一上述方面中,所述方法还包括:独立执行所述一个或多个动作构成的子集。
可选地,在任一上述方面中,嵌套一个或多个子集,以定义按顺序和并发执行的一个或多个动作的组合。
可选地,在任一上述方面中,如果未接收到所述一个或多个外部事件,在预定时间段之后发生超时。
根据本发明的一个方面,提供了一种用于协调无服务器函数执行的设备。所述设备包括:包含指令的非瞬时性存储器;与所述存储器通信的一个或多个处理器,其中,所述一个或多个处理器执行所述指令以:从一个或多个外部源接收一个或多个事件;根据映射规则,将所述一个或多个事件映射到函数图中的一个或多个事件状态,其中,所述一个或多个事件状态包括一个或多个动作;如果所述一个或多个事件满足所述映射规则中的条件,执行所述一个或多个动作;接收响应于所述接收到的一个或多个事件的事件响应,其中,根据对应于一系列所述已执行的一个或多个动作的一个或多个任务的执行接收所述事件响应。
根据本发明的另一个方面,提供了一种存储用于协调无服务器函数执行的计算机指令的非瞬时性计算机可读介质。所述计算机指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行以下步骤:从一个或多个外部源接收一个或多个事件;根据映射规则,将所述一个或多个事件映射到函数图中的一个或多个事件状态,其中,所述一个或多个事件状态包括一个或多个动作;如果所述所述一个或多个事件满足所述映射规则中的条件,执行所述一个或多个动作;接收响应于所述接收到的一个或多个事件的事件响应,其中,根据对应于一系列所述已执行的一个或多个动作的一个或多个任务接收所述事件响应。
根据本发明的一个方面,提供了一种用于协调无服务器函数执行的方法。所述方法包括:从事件源接收事件;根据映射规则,将所述事件映射到函数图中的事件状态;执行所述事件状态中满足所述映射规则的一个或多个动作;将所述事件中的数据包发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;根据所述一个或多个无服务器函数的执行,接收一个或多个响应;执行所述函数图中的在所述事件状态之后的下一个状态。所述事件中的所述数据包可以是所述事件的有效负载,所述事件的元数据,或者有效负载和元数据。
可选地,在任一上述方面中,所述事件状态包括事件定义的表达式,指示一个或多个事件的组合作为所述事件状态中的所述一个或多个动作的触发条件。
可选地,在任一上述方面中,所述事件定义的表达式是布尔表达式。
可选地,在任一上述方面中,所述事件定义将两个或两个以上事件的组合定义为所述触发条件,在接收到所述两个或两个事件之后,执行所述事件状态中满足所述映射规则的所述一个或多个动作。
可选地,在任一上述方面中,所述事件状态不是所述函数图中的第一状态。
可选地,在任一上述方面中,所述方法还包括:在完成所述一个或多个无服务器函数之后,释放一个或多个计算资源单元。
可选地,在任一上述方面中,所述函数图可以通知所述计算机系统在完成所述一个或多个无服务器函数之后释放所述一个或多个计算资源单元;或者,所述计算机系统监控所述无服务器函数的执行并在完成所述一个或多个无服务器函数之后释放所述一个或多个计算资源单元。
根据本发明的另一方面,提供了一种用于协调无服务器函数执行的设备。所述设备包括:包含指令的非瞬时性内存存储器;以及与所述存储器通信的一个或多个处理器,其中,所述一个或多个处理器执行所述指令以:从事件源接收事件;根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述事件状态包括一个或多个动作;执行所述事件状态中满足所述映射规则的一个或多个动作;将所述事件中的有效负载和/或元数据发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源单元,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;根据所述一个或多个无服务器函数的执行,接收一个或多个响应;执行所述函数图中的在所述事件状态之后的下一个状态。
根据本发明的另一方面,提供了一种存储用于协调无服务器函数执行的计算机指令的非瞬时性计算机可读介质。所述计算机指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行以下步骤:从事件源接收事件;根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述事件状态包括一个或多个动作;执行所述事件状态中满足所述映射规则的一个或多个动作;将所述事件中的有效负载和/或元数据发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源单元,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;根据所述一个或多个无服务器函数的执行,接收一个或多个响应;执行所述函数图中的在所述事件状态之后的下一个状态。
根据本发明的另一方面,提供了一种用于协调无服务器函数执行的系统。所述系统包括函数图控制器(Function Graph Controller,FGC)和无服务器函数管理器,其中,所述FGC用于:从事件源接收事件;根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述事件状态包括一个或多个动作;执行所述事件状态中满足所述映射规则的一个或多个动作;将所述事件中的有效负载和/或元数据发送到所述计算机系统,以触发所述计算机系统启动一个或多个计算资源单元,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;根据所述一个或多个无服务器函数的执行,接收一个或多个响应;执行所述处理图中的在所述事件状态之后的下一个状态;所述无服务器函数管理器用于:启动一个或多个计算资源单元,从而执行与所述一个或多个已执行的动作相关联的所述一个或多个无服务器函数;在执行所述一个或多个无服务器函数之后,将一个或多个响应发送到所述事件状态中的所述一个或多个动作。
本发明内容简单介绍了一些概念,在具体实施方式中会进一步描述这些概念。本发明内容不旨在提供专利申请所要求保护的主题的关键特征或基本特征,也不旨在确定专利申请所要求保护的主题范围。所要求保护的主题不限于解决背景技术中提到的任何或所有问题的实现方式。
附图说明
本发明的各个方面以示例方式说明,并且不受附图的限制,附图的相似标号表示元件。
图1示出了包括执行工作流处理的执行引擎的示例性网络。
图2示出了示例性事件驱动编排系统。
图3A至图3C示出了包含顺序和/或并行执行动作的事件状态。
图4A和图4B示出了事件状态中的有效负载处理和过滤。
图5A至5C示出了根据所公开实施例的流程图。
图5D示出了可以用于实施各种实施例的网络系统的框图。
图6示出了函数图的一个示例。
图7示出了函数图的语法摘要的一个示例。
图8示出了长期活动处理流程图的一个示例。
图9示出了用于协调无服务器函数来管理员工旅行的的一个实施例。
图10A示出了用于协调无服务器函数执行的系统1000的一个示例。
图10B示出了系统1000的另一个示例。
图11示出了根据所公开实施例的用于协调无服务器函数执行的流程图。
图12示出了用于协调无服务器函数执行的示例性计算设备1200的示意图。
具体实施方式
本发明涉及用于协调无服务器函数执行的技术,尤其涉及使用函数图将来自外部源的事件映射到无服务器函数,从而协调无服务器函数执行。
事件驱动架构是一个围绕事件生成、检测和使用以及事件产生的响应来编排行为的框架。事件可以是任何对系统硬件或软件有重要意义的可识别的发生事件。通常,事件驱动架构包括事件创建者和事件使用者,事件创建者是事件源,事件使用者是感知事件发生并经常处理事件的实体。
事件驱动架构内的函数图可以编排无服务器函数(即,云函数),以便控制业务逻辑、医疗保健管理等各种应用程序使用案例的函数执行。函数图可以看成是状态的集合以及这些状态之间的转换和分支,这些状态可以通过命令调用,也可以在来自事件源的事件到来时动态触发。函数图还能够将函数排列为按顺序或并发执行,管理错误条件,以及处理扩展以适应不断变化的事件负载。
来自事件源的事件可以与函数图中的特定事件状态相关联。函数图中的这些事件状态会等待来自特定事件源的事件到来,然后执行一个或多个关联动作并进入下一个状态。因此,函数图可以定义状态,在执行无服务器函数动作并在最终转换到下一个状态之前通过函数图之前需要在这些状态处等待。
在一个实施例中,事件驱动架构内的事件处理服务器或事件处理控制器能够根据需要对多个函数图进行实例化和分发。当事件到达事件处理服务器时,根据一组规则将事件映射到函数图,以进行处理。
在另一个实施例中,函数图提供了一种机制,以将事件有效负载转换为通过函数图的有效负载。
应理解,本发明现有实施例可以通过许多不同的形式实施,而且权利要求范围不应理解为仅限于本文所阐述的实施例。相反,提供这些实施例是为了使这些实施例更加透彻和完整,并将发明性实施例概念完整地传达给本领域技术人员。实际上,本发明旨在涵盖包括在由所附权利要求书限定的本发明的范围和精神内的这些实施例的替代、修改和等同物。另外,在以下本发明现有实施例的详细描述中,阐述了许多特定细节以便提供透彻理解。然而,本领域普通技术人员很清楚,可以在没有这些具体细节的情况下实践本发明现有实施例。
图1示出了包括执行工作流处理的执行引擎的示例性网络。网络100包括在分布式计算环境中运行的执行引擎105。上述分布式计算环境包括若干计算机系统,这些计算机系统可以通过一个或多个计算机网络(未示出)等进行互连。执行引擎105包括编排服务器110、处理服务器120和应用程序服务器130,它们一起可以通过网络140连接到一个或多个终端用户设备150(1)至150(N)。在一个实施例中,在服务器110、120和130中执行的功能组件可以在单个服务器或同一服务器池中执行。
编排服务器110包括处理引擎110A、工作流队列110B、历史数据110C和活动队列110D。可以执行处理引擎110A,以编排各种工作流实例的执行。执行工作流实例可以涉及将工作流或与工作流相关的数据放置在工作流队列110B中。每个工作流队列11B可以对应于不同类型的工作流、不同的工作流服务器120或其组合,或者排队工作流的任何其它逻辑分离,包括通过负载均衡技术确定的工作流等。
处理引擎110A可以是计算机可执行程序或程序集合。在一个实施例中,处理引擎与历史数据110C相关联,以协助编排。历史数据110C可以包括在一段时间内执行给定工作流实例时发生的一列事件。所列出的事件可以包括代表工作流实例执行的活动,例如,调度活动、执行活动、完成活动、启动或停止定时器等。历史数据110C可以存储在存储器、数据库、硬盘等电子数据存储区中。
在工作流服务器120上实现的组件可以包括决策模块120A和活动模块120B。工作流定义可以在决策模块120A中以函数代码的形式体现,并且可以用于识别根据工作流定义的函数表达式对特定工作流实例要执行的活动、动作或步骤。例如,每个决策模块120A可以采用函数逻辑的形式体现工作流定义,例如,采用Java或C++等程序代码来表达。
可以执行活动模块120B,以根据来自决策模块120A的命令执行包括工作流实例的至少一部分的一个或多个动作、任务或函数。活动模块120B可以实现为Java类,对每个Java类进行多次实例化,以便处理决策模块120A的工作流处理负载。编排服务器110中的活动队列120B可以与每种或每类活动模块120B相关联。在决策模块120A发出执行活动模块120B的命令之后,处理引擎110A可以将该命令放入待由对应活动模块120B执行的活动队列110D中。
网络140可以是任何有线网络、无线网络或其组合。另外,网络140可以是个人区域网、局域网、广域网、电缆网络、卫星网络、蜂窝电话网络、互联网等或其任意组合。工作流编排服务器110、工作流处理服务器120和应用服务器130都可以是用于执行软件应用程序的物理计算设备。在一些实施例中,服务器110、120和130可以用于同一个物理设备或虚拟设备上、跨多个物理设备/虚拟设备或通过其任何组合方式执行一个或多个软件应用程序。
终端用户设备150(1)至150(N)可以通过网络140与执行引擎105中的各种组件进行通信。终端用户设备150(1)至150(N)不限于所描述的设备,可以是能够通过网络进行通信的多个计算设备中的任一个,包括但不限于,笔记本电脑、个人计算机、个人数字助理(personal digital assistant,PDA)、混合PDA/混合手机、手机、电子书阅读器、数字媒体播放器、平板电脑、头戴式显示设备等。
在操作中,编排服务器110可以从应用程序服务器130或终端用户设备150(1)至150(N)接收事件的通知。相应地,编排服务器110将工作流中的新实例加载到工作流队列110B中。在一些实施例中,响应于事件进行实例化的特定工作流可以取决于该事件,其中,各种事件与不同工作流相关联,等等。工作流服务器120可以用于轮询工作流编排服务器110以使排队工作流进行处理,并且可以接收排队工作流的信息。工作流服务器120用于处理这些排队工作流。
处理工作流可以涉及根据当前事件确定哪个或哪些活动要执行或计划执行。每当工作流处理服务器120处理活动时,工作流处理服务器120可以生成命令、引发错误或向工作流编排服务器110发起通知。工作流编排服务器110可以将命令、错误或通知保存为历史数据110C。在一些实施例中,命令可以是用于执行程序或例程、启动或停止定时器、向另一组件或外部进程发送消息等等的指令。然后,可以将工作流处理进行排队以供进一步处理。
图2示出了示例性事件驱动编排系统。事件驱动编排系统200可以包括一个或多个不同的事件源204、206和208以及函数图控制器(Function Graph Controller,FGC)210(本文中还称为函数图编排器)。FGC 210用于提供处理来自事件源204、206和208的事件的环境。事件源204、206和208生成由FGC 210接收的事件。例如,FGC 210分别从事件源204、206和208接收事件1、2和3。在一个实施例中,事件1、2和3都包括事件请求。事件请求包括有效负载,例如JavaScript对象表示法(JavaScript Object Notation,JSON)有效负载。JSON有效负载在图2中表示为J1至J5,下文进行更详细地论述。应理解,可以采用任何类型的有效负载,而且本发明不限于JSON有效负载。
一个或多个事件处理应用程序可以部署在FGC 210上并由FGC 210执行。在一个实施例中,由FGC 210执行的事件处理应用程序可以用于监听一个或多个事件,根据处理逻辑(例如,映射规则209)对事件1、2和3进行处理。该处理逻辑选择从事件源204、206和208接收到的一个或多个事件1、2和3。在另一个实施例中,处理应用程序可以实现为状态机,例如,状态机210A,而状态机执行调用云服务或云函数(也称为微服务)的工作流。
状态机可以表示为函数图或服务图,例如,函数图1和2。每个函数图可以包括状态、事件、动作和动作结果等。状态可以具有各种不同的行为,例如,延迟状态、切换状态、事件状态、操作状态、NoOp状态。例如,延迟状态使得函数图执行要等待指定时长,切换状态允许根据有效负载的内容转换到多个其它状态,操作状态允许执行一个或多个无服务器函数并指定一列要执行的动作。此外,事件状态允许处理来自不同事件源的事件并指定一列用于匹配入事件的事件表达式结构。在一个实施例中,匹配状态的“event-expression”(布尔表达式)的第一事件将会使得“event-expression”的动作要在转换到下一个状态(“event-expression”在下文进行论述)之前执行。最后,结束状态终止状态机,报告状况,而NoOp状态是通过状态。
每个事件状态都有一列可执行的一个或多个动作。每个动作执行一个无服务器函数。在一个实施例中,可以按顺序执行一个或多个动作。在另一个实施例中,可以并行执行一个或多个动作。在又一个实施例中,可以采用顺序执行和/或并行执行的混合方式执行动作。每个操作都有一列动作结果,这些动作结果是对动作的结果进行处理得到,例如,重试处理、下一个状态转换和函数图终止。在一个实施例中,函数图在JavaScript对象表示法(JavaScript Objection Notation,JSON)中定义,如下所述,但不限于这种语言。也可以使用其它语言,例如,YAML、XML等。
事件驱动应用程序可以通过规则(例如,通过映射规则209)驱动,其中,规则可以作为用于处理所接收到的事件的表达式来传送。例如,表达式可以包括标识要对所接收到的事件执行的处理的指令。例如,表达式可以形成为:事件→函数图[/状态]。从下文论述的示例中将会明显看出,表达式还可以执行过滤函数和合并(或聚合)函数,以进行转换并从接收到的事件中提取特定数据。
更具体地,当来自事件源204、206和208的事件1、2和3映射到状态机210A和210B时,事件状态B、C和Y被触发,从而由事件处理应用程序执行一个或多个关联动作。例如,在所描述的实施例中,事件1、2和3中的每个事件的映射规则可以表示如下:事件1→函数图1/状态B→函数1;事件2→函数图1/状态C→函数1;事件3→函数图2/状态Y。因此,事件处理应用程序可以包括使得计算设备对相应的事件1、2和3执行动作B、C和Y中的一个或多个的指令。
在一个实施例中,FGC 210采用状态机210A和210B来执行调用与特定动作相关联的无服务器函数的工作流。例如,在事件源204发送一个事件时,事件1由FGC 210接收并通过映射规则209指示将与事件1相关联的有效负载转发到函数图1中的事件状态B。在事件状态B处,动作B由函数图控制器进行处理,函数图控制器又调用无服务器函数管理器212中的无服务器函数(例如,函数1)。
在一个实施例中,函数可以存储在存储库212A中并部署在单独的容器中,以实现隔离和模块化,同时通过集成测试、日志记录、监控和诊断策略提供高质量和可靠性。
每个函数将会理解为包括由多个可独立部署的服务组成的软件应用程序(例如,服务)。这些函数表示无服务器函数,还可以分解为更小的围绕业务能力(例如,API引擎、REST接口、套接字连接、监控、通知)等组织的服务(微服务)。
应理解,图2示出的事件驱动编排系统200可以具有除所示组件之外的其它组件,而且所公开的实施例是非限制性的。此外,图2所示的实施例只是可以包含本发明一个实施例在内的系统的一个示例。在一些其它实施例中,事件驱动编排系统200可以具有比图2所示的更多或更少的组件,可以组合两个或更多个组件,或者可以具有这些组件的不同配置或布置。例如,虽然FGC 210示为从三个事件源接收三个事件,但这不意在限制。在可选实施例中,FGC 210可以用于监听从任意数量的事件源接收到的任意数量的事件,将来自事件源的事件映射到函数图中的事件状态,并将所选事件输出到无服务器函数管理器212以调用与事件相关联的无服务器函数。此外,可以采用任意数量的事件状态机和函数图,这些事件状态机和函数图包括任意数量的状态和动作。
还应理解,事件驱动编排系统200可以是各种类型,包括个人计算机、便携式设备(例如,移动电话或移动设备)、工作站、网络计算机、主机、公用信息机、服务器、任何其它数据处理系统,或者它们的组合。在一些其它实施例中,事件驱动编排系统200可以设置为分布式系统,其中,事件驱动编排系统200中的一个或多个组件分布在云中的一个或多个网络之上。图2示出的一个或多个组件可以在软件、硬件或其组合中实现。在一些实施例中,软件可以存储在存储器(例如,非瞬时性计算机可读介质)中、存储器设备上或一些其它物理内存中,并且可以由一个或多个处理单元(例如,一个或多个处理器、一个或多个处理器内核、一个或多个GPU,等等)执行。
图3A至图3C示出了事件状态以及顺序和/或并行执行动作。在下文描述的实施例中,FGC 210负责接收事件并执行调用无服务器函数管理器212中的函数的动作。然而,应理解,并不限于FGC 210执行所描述的流程,而且各图中所描述的任何组件或组件的组合可以负责执行操作流程。
当FGC 210已经从前一个状态304进入事件状态307,并且事件从事件源306到达FGC210时,事件状态307中的动作310、312和314被触发并按顺序执行(图3A)或并行执行(图3B),其中,动作调用无服务器函数管理器212中的对应无服务器函数312A、314B和314N。在一个实施例中,可以使用每个事件状态的布尔表达式(例如,与逻辑、或逻辑)来组合多个事件。
参考图3A,如伪代码302A所示,状态机可以定义为函数图。在上述示例中,函数图(function-graph-name)具有两个事件定义:(1)与事件源1相关联的EV1;(2)与事件源2相关联的EV2。从上文回顾,每个列出的事件可以触发特定状态中的动作。当事件匹配事件状态的布尔表达式(伪代码302A中的“event-expression”)时,动作被触发。触发的动作将会被执行,然后,转换到下一个状态(例如,下一个状态316)。
布尔表达式本身由一个或多个操作数(项)和运算符(例如,与逻辑、或逻辑)组成。例如,布尔操作数就是将会触发状态的事件的名称。在所述示例中,两个事件EV1和EV2通过布尔表达式组合为“EV1或EV2”,使得事件状态307将满足条件的事件排队,直到接收到所有事件,在这之后触发状态。因此,在该示例中,当事件EV1或事件EV2中的一个到达时,满足条件。一旦满足,可以执行指定要在事件到达时执行的任何动作(例如,动作310、312和314)。在动作成功执行完之后,状态机210(图2)可以转换到下一个状态316。
在所述示例中,按顺序(如伪代码302A中的“action-mode”所定义)执行动作310、312和314,以分别调用函数310A、312B和314N。一个事件也可以包括一个事件请求,该事件请求携带事件有效负载。所接收到事件中的事件请求中的有效负载按顺序从动作310传递到动作314。例如,在前一个状态304期间,在事件状态307中接收事件1。事件1具有携带有效负载J1的事件请求。事件1(EV1)满足上文定义的布尔表达式的条件,并且由FGC 210确定为匹配。
在处理动作310中的有效负载J1之后,得到的有效负载J2作为请求传递到函数310A并调用函数310A。函数310A在无服务器函数管理器212中执行请求并将响应有效负载J3返回给动作310,响应有效负载J3包含在接收到响应时对动作的结果进行处理的一列动作结果。根据响应有效负载J3的结果,可以调用各种重试处理和下一个状态转换或终止。否则,响应J2传递到下一个动作312,动作312将有效负载J3作为请求发送到函数312B并调用函数312B。函数312B在无服务器函数管理器212中执行请求并将响应有效负载J4返回给动作312,动作312以类似于动作310的方式处理响应。随后,响应J4传递到下一个动作314,动作314将有效负载J4作为请求发送到函数314N并调用函数314N。函数314N在无服务器函数管理器212中执行请求并将响应有效负载J5返回给动作312,如果满足事件请求,则将响应有效负载J5传递回原始事件请求方(在本例中是事件源306)。
在一个实施例中,如果事件状态307接收携带同步调用的事件请求(例如,事件请求J1),则相应的动作将请求发送到关联函数(例如,函数310A、312B和314N),并且等待函数所在的无服务器函数管理器212作出响应,然后进入下一个状态316。在另一个实施例中,如果事件状态307接收携带异步调用的事件请求J1,则动作将请求发送到关联函数(例如,函数310A、312B和314N),并且不期望函数所在的无服务器函数管理器212作出任何响应。相反,在将事件发送到无服务器函数之后,动作转换到下一个状态316。
转到图3B,FGC 210在操作上执行与上文参考图3A描述的流程类似的流程,但以下情况除外。在图3B的情况下,事件状态307A中的动作310、312和314并行(或并发)执行,而不是按顺序执行。这反映在伪代码302B中,其中的action-mode示为“PARALLEL”(相比于图3A的伪代码302A中的“SEQUENTIAL”)。因此,每个动作310、312和314并行调用相应的函数310A、312B和314N。
如图所示,当从事件源306接收事件时,FGC 210在308处判断有效负载是否匹配伪代码302B中定义的布尔表达式(“event-expression”)。有效负载可以包括JSON有效负载J1等。当确定接收到的事件匹配布尔表达式时,将JSON有效负载J2并行(并发)传递到事件状态307A中的每个动作310、312和314。然后,每个动作310、312和314调用无服务器函数管理器212中的相应函数310A、312B和314N。处理之后,每个函数310A、312B和314N并发将各自的事件响应(例如,JSON有效负载J3、J4和J5)返回给之前已经调用函数的每个动作310、312和314。然后,将事件响应作为包括JSON有效负载J3、J4和J5的组合事件响应转发回原始事件请求方(在本例中是事件源306)。
一旦成功执行了事件状态307A中的并行动作,则转换到下一个状态316。在一个实施例中,如果并行动作310、312和314中的任一动作失败,则FGC 210执行重试处理。如果在重试处理期间已经超过最大重试次数,则根据动作结果,转换到下一个状态316。如上所述,每个动作结果指定重试处理和下一个状态转换或终止。由于这些重试操作是并行执行的,因此对于首先超过最大重试次数的动作结果,将进行指定转换。如果多个动作310、312和314失败,则列表中第一个失败的动作的动作结果是转换到下一个状态。例如,如果存在三个并行动作310、312和314,动作312和314失败,则转换将会作为动作312的动作结果。
在图3C中,顺序动作和并行动作可以组合以形成动作集。动作构成的子集可以进行分组以按顺序或并行处理。如图所示,与图3B中公开的实施例类似,并行处理动作310、312和314。然而,规定动作314包括两个动作子集:第一子集包括动作314A和314B,第二子集包括动作314C和314D。第一子集和第二子集进行嵌套,作为顺序动作314一起执行,其中,第一嵌套动作子集316按顺序执行,的第二嵌套动作子集318并行执行,如上所述。
在一个实施例中,动作的组合可以表示为一个执行模式字符串,对子集中的要按顺序处理或并行处理的动作进行分组。可以使用分隔符等来定义用于顺序执行和并行执行的子集:S(动作A,动作B……)为顺序执行,P(动作D,动作E……)为并行执行。如上所述,子集可以嵌套以定义顺序执行和并行执行的组合,其中,图3C示出的动作可以定义如下:P(A,B,S(C,D,P(E,F)))。并行执行P(E,F)嵌套在顺序执行S(C,D,P(E,F))内,顺序执行S(C,D,P(E,F))又嵌套在P(A,B,S(C,D,P(E,F))内。
应理解,图3C的实施例是按顺序处理和并行处理的动作的组合的非限制性示例,而且可以处理任意数量的排列中的动作。
图4A和图4B示出了事件状态的有效负载转换和过滤。如上所述,从对应的事件源306接收到的事件可以在表示状态机(例如,图2中的状态机210A或210B)的函数图中定义,并且从事件状态B或C(图2)等事件状态307中的“event-expression”(布尔表达式)中引用。从事件源306接收到的事件可以包括采用JSON有效负载等有效负载为形式的事件请求。类似地,从无服务器函数管理器212接收到的事件响应可以包括采用JSON有效负载等有效负载为形式的事件响应。例如,在所述实施例中,事件请求可以包括JSON有效负载J3和J4以及事件响应J5和J6。
事件请求中的JSON有效负载可以先过滤和转换,然后发送到无服务器函数管理器212中的函数。同理,事件响应可以先过滤,然后发送回发出原始事件请求的事件源306。
有效负载过滤器(即“PAYLOAD-FILTER”)是JSON路径表达式中的一个值,其中,JSON路径表达式使用符号“$”表示外层JSON对象,内部元素使用点(“.”)记法访问。嵌套元素还可以使用其它点($.x.y)来选择,从而选择结构的子层。例如,给定以下JSON数据:
下表示出了通过将各种JSON路径表达式应用到数据获取到的值:
路径 | 值 |
$.x | 123 |
$.y | ["a","b","c"] |
$.z.a | true |
$.y[1] | "b" |
从下文图4A和图4B的示例中将会明显看出,“payload-filter”选择由第二JSON有效负载(例如,来自第二事件源)覆盖或添加到第二JSON有效负载的第一JSON有效负载(例如,来自第一事件源)的一部分。如果不指定“payload-filter”,则过滤器默认为“$”,表示整个JSON有效负载。如果“payload-filter”为“null”,则丢弃输入,所以JSON输入表示一个空对象“{}”。
携带事件定义的示例性JSON函数图定义为如下:
在本上下文中,事件状态中的“event-expression”使用“name”,“source”指定事件源,“payload-filter-request”为来自事件源的JSON事件请求有效负载指定一个过滤器,“PAYLOAD-FILTER-RESPONSE”在将JSON事件响应有效负载发送回事件源之前为JSON事件响应有效负载指定一个过滤器。
如上所述,事件状态307允许处理来自事件源306的事件,其中,事件状态指定一列用于匹配入事件的“event-expression”结构。匹配入状态的“event-expression”的第一事件将会使得先执行该“event-expression”对应的动作,然后转换到下一个状态。在一个实施例中,布尔表达式可以处理多个事件。例如,多个事件的布尔表达式可以定义如下:“event-expression”:(事件A或事件B)与事件C。包括action-mode和匹配事件状态到来时要采取的动作的非限制示例性JSON函数图定义为如下:
“event-timeout”字段可选地指定等待“event-expression”中指定的事件的最长时间。例如,如果指定,启动的事件定时器可以在进入事件状态时从零开始计数,并在接收到“event-expression”中定义的任何事件时重置为零。如果事件定时器超时,则转换到下一个状态。否则,在“event-expression”被触发时停止事件定时器。
事件字段列出了可以触发指定事件状态中的动作的事件。匹配事件状态的“event-expression”的第一事件将会使得先执行“event-expression”对应的动作,然后转换到下一个状态316。
如上所述,“event-expression”字段是一个布尔表达式,由一个或多个操作数(项)和布尔运算符组成:与、或。布尔操作数是将会触发事件状态的事件的名称。例如,EVENT-EXPRESSION=“事件55”或EVENT_EXPRESSION=“(事件A或事件B)与事件33”。在两个或两个以上事件之间进行与运算的情况下,事件状态将满足条件的事件排队,直到接收到所有事件,然后触发事件状态。例如,在上述表达式中,如果事件状态接收“事件33”,则事件将会在事件状态中排队,直到“事件A”或“事件B”到来。
“action-mode”字段:ACTION-MODE可选地指定顺序动作或并行动作,或者顺序动作和并行动作。动作在指定为“SEQUENTIAL”时按顺序执行,在指定为“PARALLEL”时并发执行。
“actions”字段是一列动作定义构造(ACTION-DEFINITION),指定在入事件匹配“event-expression”时要执行的动作。
“next-state”字段:STATE-NAME字段指定匹配事件中的所有动作都成功执行之后要转换到的下一个状态的名称。
下面参考图4A描述对具有如上所述事件的JSON有效负载进行处理。在所公开的实施例中,FGC 210按顺序处理事件,但应理解,任意数量的组件可以负责这样的执行,而且FGC 210只是一个非限制性示例。还应理解,事件可以并发处理,或者采用顺序和/或并发混合方式执行。
表示状态机的函数图接收事件有效负载(JSON有效负载)以及从事件源306接收到的事件请求。将事件有效负载传递到调用对应函数的无服务器函数管理器212。在所公开的实施例中,“A”指从事件源A接收到的事件有效负载,而“B”指从前一个状态接收到的有效负载。经JSON编码的事件有效负载在图4A和图4B中的流程如下所示。
1.通过每个事件状态307处理JSON有效负载,如下所示。将来自前一个状态304的输入发送到有效负载过滤器“payload-filter-in”401,有效负载过滤器处理来自前一个状态的有效负载J1。使用“payload-filter-in”401处理来自前一个状态304的有效负载J1,产生了JSON有效负载J2。
2.当事件源306发送事件时,将与事件一起发送的事件请求输入到“payload-filter-request”402中。在该示例中,事件请求采用JSON有效负载J3的形式。根据过滤条件,“payload-filter-request”402将JSON有效负载J2(来自前一个状态)的部分修改(例如,添加)到JSON有效负载J3(事件请求),然后将这些部分携带在事件请求J4中发送到无服务器函数管理器212以通过指定函数进行处理。因此,JSON有效负载J4至少包括JSON有效负载J2和J3中的各部分。
3.一旦JSON有效负载J4通过无服务器函数管理器212中的函数进行处理,则将事件响应发送回事件状态307以进一步处理。例如,无服务器函数管理器212在处理完接收到的有效负载之后返回JSON有效负载J5。在403处,事件响应有效负载过滤器“payload-filter-response”将JSON有效负载J2(来自前一个状态)的部分修改(例如,添加)到JSON有效负载J5(事件响应),然后将这些部分携带在事件响应J6中发送回发出原始事件请求的事件源306。
4.一旦接收到事件响应(JSON有效负载J5),“payload-filter”404将从前一个状态接收到的JSON有效负载J2的部分修改(例如,添加)到来自无服务器函数管理器212的事件响应中的JSON有效负载J5,以产生JSON有效负载J7。
5.在405处,“payload-filter-out”处理JSON有效负载J7,然后将JSON有效负载J7作为JSON有效负载J8输出到下一个状态。
在应用于图4A的处理和过滤图的一个示例中,事件请求有效负载过滤器“payload-filter-request”402选择所接收到的JSON有效负载J2中被事件请求JSON有效负载J3覆盖或添加到事件请求JSON有效负载J3的一部分,然后将该部分携带在JSON有效负载J4中发送到无服务器函数管理器212。例如,(a)如果“payload-filter-request”402具有默认值$,则将整个JSON有效负载J3作为JSON有效负载J4传递到无服务器函数管理器212,并且不使用JSON有效负载J2;(b)如果“payload-filter-request”402为空,则将接收到的JSON有效负载J2作为JSON有效负载J4传递到无服务器函数管理器212,并且丢弃JSON有效负载J3;(c)如果“payload-filter-request”402匹配JSON有效负载J2中的一项且匹配JSON有效负载J3中的一项,则JSON有效负载J3中该项的值被接收到的JSON有效负载J2中该项的值覆盖,并且将修改后的JSON有效负载J4传递到云提供商212;(d)如果“payload-filter-request”402匹配JSON有效负载J2中的一项但不匹配JSON有效负载J3中的一项,则将接收到的JSON有效负载J2添加到JSON有效负载J3中,并且将扩展JSON有效负载J4传递到无服务器函数管理器212。
类似的处理适用于“payload-filter-response”403和“payload-filter”404。例如,如果payload-filter-request为"$.b”,JSON有效负载(J3)为:
JSON有效负载J2为{"b":"B2"},则JSON有效负载J3中的匹配项“b”的值"B"被JSON有效负载J2中的值"B2"覆盖,并且传递到无服务器函数管理器212的修改后的JSON有效负载J4为:
如果“payload-filter-request”是"$.c"并且匹配JSON有效负载J2{"c":"C"},则传递到云函数的扩展JSON有效负载J4为:
转到图4B,公开了事件过滤的一个具体示例。在所描述的示例中,各种有效负载过滤器可以用于合并来自两个事件源(A和B)的JSON内容和/或用于修改JSON内容。例如,在一个实施例中,可以合并来自多个事件源的JSON内容,例如:(1)“payload-filer-request”402将JSON有效负载J2和JSON有效负载J3合并,形成JSON有效负载J4;(2)“payload-filter-response”403将JSON有效负载J2和JSON有效负载J5合并,形成JSON有效负载J6;动作“payload-filter”404将JSON有效负载J2和JSON有效负载J5合并,形成JSON有效负载J7。
在另一个实施例中,可以修改JSON有效负载中的内容。例如,“payload-filter-in”401可以修改JSON有效负载J1,形成JSON有效负载J2,“payload-filter-out”405可以修改JSON有效负载J7,形成JSON有效负载J8。
应理解,上文的示例是非限制性的,而且可以实现任意数量的合并和修改JSON有效负载的示例。
图5A至图5C示出了根据所公开实施例的流程图。图中所描述的流程由函数图控制器实现,以供讨论。然而,应理解,任何系统组件或组件的组合都可以实现这些流程。
参考图5A,在502处,在一个实施例中,FGC 210从不同外部源接收事件。事件可以包括事件请求,例如有效负载。在503处,根据映射规则将事件映射到函数图的对应事件状态。这些事件状态可以包括一个或多个动作。在504处,如果接收到的事件满足映射规则中的条件,执行这些动作。例如,当接收到两个事件或接收到一个事件或另一个事件时,可以满足条件。在这两种情况下,执行这些动作都会使得调用无服务器函数管理器中的对应无服务器函数来处理事件请求。在505处,接收响应于接收到的一个或多个事件的事件响应,其中,根据对应于一系列执行的一个或多个动作的一个或多个任务的执行得到所述事件响应。
在另一个实施例中,参考图5B,在506处,FGC 210按顺序或并发执行事件状态中的动作。这里,每个动作都调用对应的无服务器函数,使得事件请求中包括的有效负载被传递到对应的无服务器函数进行执行。
在另一个实施例中,参考图5C,FGC 210,在508处,根据过滤条件和转换条件对有效负载的内容进行过滤以修改有效负载;在509处,将匹配事件状态中的已完成的并发动作的多个事件响应组合到单个事件响应的有效负载或元数据。
图5D是可以用于实施各种实施例的网络设备的框图。特定网络设备可以利用所有所示的组件或组件的仅一个子集,且设备之间的集成程度可能不同。此外,网络设备可以包含组件的多个实例,例如,多个处理单元、处理器、存储器、发射器、接收器等。网络设备可以包括配备有网络接口、存储接口等一个或多个输入/输出设备的处理单元501。处理单元501可以包括连接到总线570的中央处理器(central processing unit,CPU)510、存储器520、大容量存储设备530和I/O接口560。总线570可以是任何类型的几种总线架构中的一种或多种,包括内存总线或内存控制器、外设总线等。
CPU 510可以包括任何类型的电子数据处理器。存储器520可以包括任何类型的系统存储器,例如,静态随机存取存储器(static random access memory,SRAM)、动态随机存取存储器(dynamic random access memory,DRAM)、同步DRAM(synchronous DRAM,SDRAM)、只读存储器(read-only memory,ROM)或其组合等。在一个实施例中,存储器520可以包括在开机时使用的ROM以及在执行程序时使用的存储程序和数据的DRAM。在实施例中,存储器520是非瞬时性存储器。在一个实施例中,存储器520包括:接收模块521A,从一个或多个外部源(例如,HTTP网关、存储器、消息或队列服务)接收一个或多个事件,其中,一个或多个事件包括事件请求;映射模块521B,根据映射规则将一个或多个事件映射到函数图中的一个或多个事件状态;执行模块521C,如果一个或多个事件状态被映射到的一个或多个事件触发,执行一个或多个事件状态中的一个或多个动作,其中,执行一个或多个动作使得对应的一个或多个无服务器函数被调用;过滤模块521D,根据过滤条件对有效负载的内容进行过滤以修改有效负载。
大容量存储设备530可以包括任何类型的存储设备,用于存储数据、程序和其它信息,并使这些数据、程序和其它信息可通过总线570访问。大容量存储设备1230可以包括固态驱动器、硬盘驱动器、磁盘驱动器或光盘驱动器等中的一种或多种,等等。
存储器520和大容量存储设备530可以包括或存储有操作系统532、一个或多个应用程序534、一个或多个程序模块536以及数据538。操作系统532用于控制和分配处理单元501的资源。应用程序534包括系统软件和应用程序软件中的一种或两种,并且可以利用操作系统532通过存储在存储器520和/或大容量存储设备530中的程序模块536和数据538进行的资源管理以执行一个或多个动作。因此,应用程序534可以根据由此提供的逻辑将通用计算机变成专用机器。
所要求保护主题的全部或各部分可以使用生成控制计算机以实现所公开功能的软件、固件、硬件或其任意组合的标准编程和/或工程技术来实现。作为示例而非限定,查询分析系统1300和状态机生成系统1400可以是或构成应用程序534的一部分,包括存储在存储器和/或大容量存储器530中的一个或多个模块536和数据538,其功能可以在由一个或多个处理器/CPU 510执行时实现。
查询分析系统1300包括用于接收、检索或获得或获取查询的验证组件(未示出)。例如,该查询可以对应于语言集成查询以及其它类型的查询。验证组件将查询作为状态机组件(也称为状态机,例如,图2中的状态机210A和210B)的函数进行检查或验证,状态机组件捕获目标查询语言的约束条件,包括但不限于,支持的查询操作符以及查询操作符的模式(例如,查询操作符出现次数上限和查询操作符的相对排序),等等。在一个实施例中,状态机组件可以是基于类型的状态机,捕获约束条件作为类型和方法,如下所述。如果查询不符合目标查询语言的约束条件,例如,如果检测到无效的查询操作符或查询操作符的无效模式,则验证组件可以发出错误信号。在另一个实施例中,验证组件可以对查询执行编译时检查,从而降低运行故障的风险。因此,验证组件可以构成程序语言编译器的一部分。
状态机生成系统1400包括分析组件和生成组件(未示出)。分析组件可以分析包括语法以及类型系统的目标查询语言语义,以确定对目标查询语言的约束条件或限制条件,其中,语法描述可接受句法,类型系统描述数据类型的正确用法。根据上述分析,生成组件可以生成捕获目标查询语言上的约束条件的状态机(例如,状态机组件),例如,图2所示的状态机210A和210B。在一个实施例中,状态机可以是基于类型的,或者,生成组件可以生成各种类型的状态机。在这种情况下,可以将状态编码为类型,可以将状态之间的转换编码为方法。生成组件还可以接收指示生成的状态机的所需大小和/或复杂度的一个或多个参数。因此,状态机可以包括语法和类型系统指定的所有约束条件、约束条件构成的子集,或者甚至包括约束条件构成的超集。
处理单元501还包括一个或多个网络接口550,一个或多个网络接口550可以包括以太网线等有线链路和/或连接到接入节点或一个或多个网络580的无线链路。网络接口550允许处理单元501通过网络580与远程单元进行通信。例如,网络接口550可以通过一个或多个发射器/发射天线以及一个或多个接收器/接收天线提供无线通信。在一个实施例中,处理单元501耦合到局域网或广域网,以进行数据处理并与其它处理单元、互联网、远程存储设施等远程设备进行通信。
函数图由来自各种事件源的事件驱动,以约定方式控制无服务器函数的执行。例如,函数图允许用户设置无服务器函数按顺序或并发执行或两种方式混合执行,通过重试管理错误条件,以及处理扩展以适应变换的事件负载。在一个实施例中,如图2所示,FGC210根据需要对多个函数图进行实例化和分发。通过函数图,用户可以定义一个或多个集合点(例如,事件状态)。用户可以限定一个集合点的定义,集合点的定义可以包括用于触发该集合点中的一个动作的一个或多个事件。集合点在执行动作之前,等待一个或多个预定义的事件。类似地,通过集合点,用户可以限定函数图中的其它类型状态的定义,其它类型状态将会根据该定义执行对应的动作并触发与已执行的动作相关联的无服务器函数。因此,函数图为用户提供了管理无服务器函数的一致性框架。用户只需要定义函数图的逻辑,不需要自己部署服务器函数,也不需要部署和管理执行无服务器函数的物理服务器。
图6示出了包括状态、事件、动作和动作结果的函数图的一个示例。上文已经论述了各种类型的状态,每种状态与不同的动作和不同的内容相关联。如图6所示,每个事件状态可以有不同的定义并且包括一个或多个事件。每个事件可以对应于一列动作。在接收到一个或多个预定义事件后,事件状态将会按顺序或并行或两种方式混合执行与接收到的事件相关联的一列动作。每个动作可以有一列动作结果。每个动作结果可以指定重试处理和下一个状态转换或服务图终止。
在图6所示的示例中,函数图600包括事件状态620、事件状态660和操作状态640。事件状态620的定义包括两个事件:事件622和事件628,事件状态660的定义包括事件6622。如图6所示,当事件状态620接收事件622时,将会执行动作6222和动作6224。当事件状态620接收事件628时,将会执行动作6282。在本示例中,执行动作6222会产生两个结果:a1和a2(根据无服务器函数的不同响应);执行动作6224会产生两个结果:b1和b2;执行动作6282会产生一个结果c1。在一个示例中,事件状态660可以接收三个事件:事件662、事件663和事件664。根据对布尔表达式(事件662与事件663)或事件664的评估,可以执行动作6622,产生三个结果:p1、p2和p3。操作状态640不能从外部事件源接收任何事件,存在动作642和644。动作642可以产生两个结果:q1和q2,动作644可以产生一个结果r1。
事件状态的JSON函数图定义的一个示例如下所示:
在一个示例中,动作的定义可以如下所示:
“action-name”字段用于标识动作的名称。
“function”字段中的FUNCTION-ID指定与动作相关联的并需要根据动作的执行调用的无服务器函数。FUNCTION-ID应该是引用无服务器函数的有效通用唯一标识符(universal unique identifier,UUID)。
在一个实施例中,如果事件状态接收具有同步调用的事件,则与所接收到的事件相关联的动作将事件的有效负载或元数据发送到对应的无服务器函数,然后等待对应无服务器函数的响应,之后再进入下一个状态。在另一个实施例中,如果事件状态接收具有异步调用的事件,则与接收到的事件相关联的动作将事件的有效负载或元数据发送到对应的无服务器函数,当不期望从对应无服务器函数得到任何响应。在事件中的有效负载或元数据发送到对应的无服务器函数之后,动作会立即转换到下一个状态。
在一个实施例中,参见图4A和图4B,对应的动作可以与事件中携带的有效负载进行交互,并将处理后的有效负载发送到对应的无服务器函数。与事件中的有效负载类似,事件中的元数据可以与图4A和图4B所示的方式类似地进行处理。事件中的元数据与事件信息相关,事件信息包括事件ID、源地址、类型等等。在发送图4A和图4B中任何请求或响应的JSON中携带的有效负载和/或元数据之前,可能需要对有效负载和/或元数据进行过滤。
“timeout”字段可以是一个非零值,指定以秒为单位的等待无服务器函数完成执行的最长时间。“timeout”字段用于无服务器函数的同步调用,其中,动作等待无服务器函数的执行所产生的响应。TIMEOUT-VALUE必须是正整数。当请求发送到无服务器函数时,可能会启动一个定时器。如果定时器超时,则返回一个错误码给动作。该错误码可以用于匹配动作结果。
“payload-filter”字段指定在处理进入下一个动作或转换到下一个状态之前,如何对无服务器函数的JSON响应有效负载进行过滤。PAYLOAD-FILTER可以是有效的JSON路径。payload-filter可以应用于无服务器函数的成功响应。
“results”字段包括一列动作结果(ACTION-RESULT-DEFINITION),指定如何处理从无服务器函数接收到的响应。
在一个示例中,动作结果为以下操作之一:
对从无服务器函数接收到的响应值的匹配;
重试间隔;
最大重试次数;
超过最大重试次数后的下一个状态。
JSON中定义的动作结果的一个示例如下所示:
“match”字段指定结果的匹配值。如果从无服务器函数接收到的结果匹配“match”字段中的RESULT-VALUE,则将会处理动作结果中的其它字段。超时由SYS.Timeout的RESULT-VALUE表示。
“retry-interval”字段和“max-retry”字段可能是可选的,可以在出现错误结果时使用。如果“retry-interval”字段不存在,则可能不存在重试尝试。“retry-interval”字段描述了从接收到错误响应到发送重试的时间间隔。“max-retry”为最大重试尝试次数。这些字段应该是正整数。
“next-state”字段可能是一个必需字段,指定下一个状态的名称。STATE-NAME可以是函数图中的有效状态名称。STATE-NAME不能是当前状态。
“results”字段可以指定如何处理从无服务器函数接收到的错误响应。除了从无服务器函数直接返回的错误字符串,可能还有其它错误字符串。下表示出了动作执行结果的一组错误名称字符串的一个示例。
错误名称 | 描述 |
SYS.MatchAny | 这是一个通配符,用来匹配任何错误名称的。 |
SYS.Timeout | 如果无服务器函数无法响应请求,动作超时过期时会产生这种错误。 |
SYS.Fail | 动作无法调用无服务器函数时会产生这种错误。 |
图7示出了函数图710的语法摘要700的一个示例。函数图710包括多个状态740:操作状态741、事件状态742、切换状态743、延迟状态744、NoOp状态745和结束状态746。每个状态包括多个字段,如图7所示,例如,“公共”字段760、“动作”字段770、“结果”字段780等。在一个实施例中,“公共”字段760包括以下参数:type、start、payload-filter-in和payload-filter-out。事件定义720描述一个或多个触发事件。在一个实施例中,事件定义722可以包括以下参数:name、source和payload-filter。图7示出了函数图710的语法摘要的一个示例以及不同类型的状态的内容,并且不限制句法范围。在一些场景中,函数图710的句法可以包括比图7所示的更多的字段或除图7所示之外的部分其它字段。
事件资源将一个或多个事件发送到函数图中的事件状态,可能是一个托管在外部服务器上的长期任务等活动。活动具有一个工作线程,该工作线程通过向对应的函数图发送工作请求来处理函数图的访问。函数图接收工作线程的工作请求,并将工作项调度给工作线程。函数图调用云函数来管理工作线程的工作项。工作线程可能是一个在外部服务器上运行的应用程序,处理从函数图接收到的工作项。
图8示出了函数图840的长期活动处理图的一个示例。函数图840协调活动工作线程的操作,如下所示:
在操作801处,主机820上的工作线程821将工作请求发送到函数图840。工作请求中包括“workerName”字段的一个示例:
在操作802处,如果函数图840根据“workerName”字段将工作请求映射到事件状态842,则函数图840中的事件状态842调用函数860中的云函数862帮助工作线程处理工作项。
在操作803处,云函数862将具有编码在JSON“工作项”字段中的工作项的响应发送到函数图840。
在操作804处,函数图840可以生成唯一的taskToken,taskToken分配给工作进程并包含在云函数862发送的响应中。函数图840将该响应发送到工作线程821。工作线程821将taskToken包含在所有要发送到函数图840的其它请求中。步骤804中的响应的JSON句法的一个示例如下:
如果工作线程821没有进行操作,则响应分别包括“taskToken”字段和“workItem”字段的空taskToken和空workItem。
工作线程821执行响应中的工作项。
如果工作线程执行长期任务,工作线程821可以将周期性心跳作为存活指示发送到函数图840。工作线程821可以将taskToken包含在心跳请求中,用于标识工作进程。心跳请求的JSON句法的一个示例如下:
在操作805处,工作线程821在工作项完成之后将工作成功请求发送到函数图840,其中,JSON结果包括“workResult”字段。工作线程821可以重复发送工作成功请求以报告中间结果。工作线程821可以将taskToken包含在工作成功请求中,用于标识工作进程。工作成功请求的JSON句法的一个示例如下:
在操作806处,函数图840将工作成功请求发送到云函数864,用于处理工作成功请求中携带的工作结果。
在操作807处,云函数864处理工作结果并向函数图840发送响应。
在操作808处,函数图840将从云函数864接收到的响应发送到工作线程821。
来自/到达函数图840的请求或响应可以由对应的有效负载过滤器(844、845、846和847)处理。
函数图840中的状态842可以包括用于对请求和响应中的有效负载和/或元数据进行过滤的有效负载过滤器。
在一个实施例中,如果工作线程821没有成功处理工作项,则工作线程821可以将工作失败请求发送到函数图840以报告错误。工作失败请求的JSON句法的一个示例如下:
图9示出了协调无服务器函数来管理员工旅行的方法900。例如,云920包括旅行函数图910和多个无服务器函数,其中,旅行函数图910用于管理预订旅行航班的过程。
旅行函数图910可以由客户端(图9未示出)调用。例如,客户端将旅行事件发送到函数图控制器(function graph controller,FGC),例如,图2所示的FGC 210。FGC根据预定义映射规则确定旅行事件对应于旅行函数图910。然后,触发旅行函数图910中的状态A930。例如,FGC记录多个函数图,包括旅行函数图910、医疗保险函数图等等。当FGC接收事件时,FGC可以根据映射规则确定事件映射到旅行函数图910中的事件状态。该映射规则可以涉及旅行函数图910中的事件状态与对应的事件源之间的关系。此外,该映射规则还可以包括旅行函数图910中的一个或多个动作与事件源之间的映射关系。然后,FGC可以根据映射规则确定旅行函数图910中的待触发动作。
在操作901处,执行状态A 930中的动作931,动作931发送携带员工信息的有效负载以触发无服务器函数(例如,员工函数932)来检查员工状况。员工函数932查询员工数据库(database,DB)933,并将从员工DB 933接收到的查询响应发送到状态A 930,其中,员工状况携带在查询响应的有效负载中。状态A 930可以是操作状态。
在操作902处,状态A 930将JSON有效负载中携带的员工状况传递到旅行函数图910中的状态B 940。
在操作903处,切换状态B 940检查雇员状况以判断员工的旅行是否已获得批准。如果旅行未批准,则方法进入结束状态Z 980。如果旅行得到批准,则过程进入状态C 950。
在操作904处,状态C 950中的动作951调用多个航空公司函数(952和953),用于查询可用航空公司(954和955)的旅行价格。从状态C 950发送到航空公司函数(952和953)的有效负载可以包括优选航班信息。航空公司函数(952和953)分别进入一个对应的网站为每个航空公司查询价格。方法进入事件状态D。
在操作905处,执行事件状态D 960中的动作961。事件状态D960的事件表达式的定义限定价格输入的一个或多个事件。然后,事件状态D960等待价格输入。航空公司的网站/数据库通过网关962将价格事件发送到事件状态D 960。价格事件携带不同航空公司提供的价格。
在一种实现方式中,网关962可以将来自航空公司的不同网站/数据库的价格事件组合到组合事件的单个有效负载中,并将该组合事件发送到状态D 960。
在操作906处,在接收到来自多个航空公司网站/数据库的价格之后,事件状态D960中的动作961调用价格比较函数963,用于比较接收到的价格,并且根据比较结果从价格比较函数963接收优选航班信息。
在操作907处,方法进入状态E 970。状态E 970中的动作971调用报告旅行计划函数972,将旅行计划添加到预订数据库(Data Base,DB)973,并且向客户端报告旅行计划。
在操作908处,方法进入结束状态Z 980并终止旅行函数图910。
在图9的实施例中,函数932、952、953、963和972可以是无服务器函数并在云920中运行。员工DB 933和预订DB可以位于云920中。
图10A示出了用于协调无服务器函数执行的系统1000的一个示例。系统1000包括网络设备1010和计算机系统2120。如图10A所示,计算机系统2120可以包含在无服务器函数管理器(serverless function manager,SFM)212中。计算机系统2120可以包括多个服务器(1020a至1020z)。网络设备执行FGC 210的操作。
网络设备1010从事件源接收事件,根据映射规则将接收到的事件映射到函数图中的事件状态。事件状态包括一个或多个动作,映射规则指示事件、函数图中的事件状态以及事件状态中的一个或多个动作之间关系的表达式。
网络设备1010执行事件状态中满足映射规则的一个或多个动作。网络设备1010将事件中的数据包发送到计算机系统2120以启动一个或多个计算资源组,用于执行与一个或多个动作相关联的一个或多个无服务器函数(函数1至函数m)。数据包中包括有效负载或元数据,或者两者都包括。
计算资源组是指用于部署与事件状态中的动作对应的无服务器函数的计算资源单元。在调用无服务器函数时激活计算资源单元,在不使用无服务器函数时释放计算资源单元。当事件状态中的动作触发无服务器函数之后,计算资源单元将被启动,并且占用部署无服务器函数的计算资源。在一个实施例中,事件状态中的动作将接收到的事件中的有效负载和/或元数据发送到SFM 212,以启动计算资源单元。如图10A所示,计算资源单元的一个示例为容器(2121至212n)。计算资源单元也可以有其它种类,容器的实施例并不限制计算资源单元的范围。
在一个实施例中,容器是打包代码及其所有依赖关系的标准软件单元,因此应用程序可以在容器上快速、可靠地运行。容器彼此隔离,并绑定自己的工具、库和配置文件。容器之间可以通过定义好的通道进行通信。所有容器都可以由一个操作系统内核运行,因此比虚拟机更轻量级。容器从“镜像”创建而来,这些“镜像”指定容器的精确内容。容器镜像是一个轻量级、独立的可执行软件包,包括运行应用程序所需的所有东西,例如,代码、运行时间、系统工具、系统库和设置。
可以根据应用程序数据更新管理容器镜像存储库,容器镜像存储库中的镜像可以用于容器部署。
在一个实施例中,非常规函数执行的无服务器函数执行可以涉及以下操作:自动将函数代码与运行时间、库、环境变量和配置文件组合在一起,构建容器镜像,并自动分配适合容器镜像大小的计算资源。
网络设备1010接收计算机系统2120中的一个或多个无服务器函数的一个或多个响应。网络设备1010执行函数图中的在事件状态之后的下一个状态。
SFM 212可以管理计算机系统2120的资源以及在计算机系统2120上运行的容器的生命周期。在执行事件状态中的一个或多个动作之后,网络设备1010向SFM 212发送请求以触发SFM 212启动计算机系统2120上的容器。然后,计算机系统2120运行容器镜像以启动一个或多个容器(2121至212n),并且在一个或多个容器上部署与一个或多个动作相关联的一个或多个无服务器函数(函数1至函数m)。
网络设备1010还用于从存储库下载一个或多个无服务器函数,并将一个或多个无服务器函数部署在启动的一个或多个容器上。
网络设备1010还用于在完成一个或多个无服务器函数之后释放一个或多个容器。
在一实施例中,参见图4A和图4B,可以在处理函数图期间对有效负载或元数据进行过滤。例如,在将事件中的有效负载从网络设备1010发送到计算机系统2120之前,网络设备1010可以对有效负载进行过滤,并将过滤后的有效负载发送到计算机系统2120。
图10B示出了系统1000的另一个示例。计算机系统2120可以与SFM 212分离。
图11示出了用于协调无服务器函数执行的方法。在1102处,网络设备中的处理器从事件源接收事件,其中,所述事件可以包括携带有效负载的事件请求。在1103处,所述网络设备中的处理器根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述事件状态可以包括一个或多个动作。根据所述接收到的事件,事件状态中的部分或全部动作可以满足映射规则。然后,在1104处,执行所述事件状态中满足所述映射规则的的一个或多个动作。在1105处,所述网络设备的处理器将所述事件中的数据包发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数。在1106处,所述网络设备中的处理器根据所述一个或多个无服务器函数的执行,接收一个或多个响应;在1107处,执行所述函数图中的在所述事件状态之后的下一个状态。本实施例中的网络设备的硬件结构可以与图5D所示的网络设备相同。
图12是根据本发明实施例的用于协调无服务器函数执行的示例性计算设备1200的示意图。计算设备1200适用于实施本文描述的公开实施例。计算设备1200包括:用于接收数据的入端口1220和接收单元(receiver unit,Rx)1210;用于处理数据的处理器、逻辑单元或中央处理器(central processing unit,CPU)1230;用于发送数据的发送单元(transmitter unit,Tx)1240和出端口1250;用于存储数据的存储器1260。计算设备1200还可以包括耦合到入端口1220、接收单元1210、发送单元1240和出端口1250的光电(optical-to-electrical,OE)组件和电光(electrical-to-optical,EO)组件,用于光信号或电信号的出口或入口。在一些示例中,计算设备1200还可以包括无线发射器和/或无线接收器。
处理器1230通过硬件和软件实现。处理器1230可以实现为一个或多个CPU芯片、核(例如,多核处理器)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)和数字信号处理器(digitalsignal processor,DSP)。处理器1230与入端口1220、接收单元1210、发送单元1240、出端口1250和存储器1260通信。处理器1230包括协调模块1214。协调模块1214实施上文所述的公开实施例。例如,协调模块1214执行、处理、准备或提供图1至图11中的各种操作。因此,包含协调模块1214为计算设备1200的功能提供了实质性的改进,并且影响了计算设备1200到不同状态的转换。或者,将协调模块1214实现为存储在存储器1260中并由处理器1230执行的指令(例如,实现为存储在非瞬时性介质上的计算机程序产品)。
存储器1260包括一个或多个磁盘、磁带机和固态硬盘,可以用作溢出数据存储设备,用于在选择执行程序时存储此类程序,并且存储在程序执行过程中读取的指令和数据。存储器1260可以是易失性存储器和/或非易失性存储器,并且可以是只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content-addressable memory,TCAM)和/或静态随机存取存储器(staticrandom-access memory,SRAM)。计算设备1200还可以包括与终端用户交互的输入/输出(input/output,I/O)设备。例如,计算设备1200可以包括显示器,例如显示视觉输出的监视器,显示音频输出的扬声器,以及显示用户输入的键盘/鼠标/轨迹球等。
计算设备1200可以实现为编排服务器110、工作流服务器120、应用服务器130、函数图控制器210、无服务器函数管理器212、网络设备1010或服务器1020a至1020z中的任一服务器。
应理解,本主题可以通过许多不同的形式来体现,并且不应理解为限于本文阐述的实施例。相反,提供这些实施例是为了使本主题更加透彻和完整,并将本发明完整地传达给本领域技术人员。实际上,本主题旨在涵盖包括在由所附权利要求书限定的本主题的范围和精神内的这些实施例的替代、修改和等同物。此外,在以下本主题的详细描述中,阐述了许多具体细节以便提供对本主题的透彻理解。然而,本领域普通技术人员很清楚,可以在没有这样具体细节的情况下实践本主题。
此处,结合本发明实施例的方法、装置(系统)以及计算机程序产品的流程图和/或框图描述本发明的各方面。应理解,流程图和/或框图的每个步骤以及流程图和/或框图中的步骤的组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置中的处理器以生成机器,这样,这些通过计算机中的处理器或其它可编程指令执行装置执行的指令创建用于实现流程图和/或框图的一个或多个步骤中指定的功能/动作的机制。
非瞬时性计算机可读介质包括磁性存储介质、光存储介质和固态存储介质等各种类型的计算机可读介质,但具体不包括信号。应理解,软件可以安装在设备上并且随该设备一同出售。或者,可以获取软件并加载到设备中,包括通过光盘介质或以网络或分发系统的任何方式获取软件,例如,包括从软件开发者所有的服务器或从非软件开发者所有但为其所用的服务器获取软件。例如,软件可以存储在服务器上,以通过互联网分发。
文中所用的术语仅仅是出于描述特定方面的目的,而非旨在限制本发明。除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。应进一步了解,术语“包括”和/或“包含”用于说明存在所述特征、整体、步骤、操作、元件和/或部件,但并不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、部件和/或它们的组合。
本发明的描述仅作为说明和描述目的而呈现,并非旨在详尽无遗或以任何所公开的形式限制本发明。在不偏离本发明的范围和精神的前提下,多种修改和变体对本领域技术人员而言是显而易见的。选择和描述本发明的各个方面以便更好地解释本发明的原理和实际应用,并且使本领域普通技术人员能够理解本发明和适合预期特定用途的各种修改。
为了本文档的目的,与所公开的技术相关联的每个过程可以连续执行并由一个或多个计算设备执行。过程中的每个步骤均可以由与在其它步骤中使用的相同或不同的计算设备执行,并且每个步骤不必由单个计算设备执行。
虽然已经以特定于结构特征和/或方法动的语言描述了本主题,但是应理解,权利要求书中定义的主题不必局限于上文描述的具体特征或动作。相反,上文描述的具体特征和行为被公开为实现权利要求的示例性形式。
Claims (21)
1.一种用于协调无服务器函数执行的方法,其特征在于,所述方法包括:
网络设备中的处理器从事件源接收事件;
所述网络设备中的处理器根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述函数图包括至少一个事件状态以及所述至少一个事件状态之间的转换;
所述网络设备中的处理器执行所述事件状态中的一个或多个动作,其中,所述一个或多个动作满足所述映射规则;
所述网络设备中的处理器将所述事件中的数据包发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;
所述网络设备中的处理器根据所述一个或多个无服务器函数的执行,接收一个或多个响应;
所述网络设备中的处理器执行所述函数图中的在所述事件状态之后的下一个状态。
2.根据权利要求1所述的方法,其特征在于,所述映射规则指示事件、函数图中的事件状态以及所述事件状态中的一个或多个动作之间关系的表达式。
3.根据权利要求1或2所述的方法,其特征在于,所述事件为异步事件或同步事件。
4.根据权利要求1或2所述的方法,其特征在于,所述执行一个或多个动作包括:
并发执行所述事件状态中的所述一个或多个动作,其中,所述一个或多个动作分别调用对应的无服务器函数,使得所述事件中的所述数据包被传递到所述无服务器函数来执行。
5.根据权利要求1或2所述的方法,其特征在于,所述执行一个或多个动作包括:
按顺序执行所述事件状态中的所述一个或多个动作,其中,所述一个或多个动作分别调用对应的无服务器函数;
所述事件中的所述数据包被传递到与所述一个或多个动作中的第一动作对应的无服务器函数,来自与所述第一动作对应的所述无服务器函数的响应中的数据包被传递到与所述一个或多个动作中的在所述第一动作之后的第二动作对应的另一无服务器函数。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述一个或多个动作执行完成之后,将事件响应发送到产生所述事件的所述事件源。
7.根据权利要求6所述的方法,其特征在于,所述事件响应包括来自所述事件状态中的所述按顺序执行的动作中的最后一个动作的数据包。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
将来自与所述事件状态中的所述一个或多个动作对应的所述无服务器函数的多个响应组合到所述事件响应中的单个有效负载。
9.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在将所述数据包发送到所述事件状态中的所述一个或多个动作之前,根据过滤条件和转换条件,对所述数据包的内容进行过滤。
10.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
独立执行所述一个或多个动作构成的子集。
11.根据权利要求10所述的方法,其特征在于,嵌套一个或多个子集,以定义按顺序和并发执行的一个或多个动作的组合。
12.根据权利要求1或2所述的方法,其特征在于,所述事件状态包括事件定义的表达式,指示一个或多个事件的组合作为所述事件状态中的所述一个或多个动作的触发条件。
13.根据权利要求12所述的方法,其特征在于,如果未接收到满足所述触发条件的事件,在所述事件的预定等待时间段之后发生超时。
14.一种用于协调无服务器函数执行的设备,其特征在于,所述设备包括:
包含指令的非瞬时性存储器;
与所述存储器通信的一个或多个处理器,其中,所述一个或多个处理器执行所述指令以:
从事件源接收事件;
根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述函数图包括至少一个事件状态以及所述至少一个事件状态之间的转换;
执行所述事件状态中的一个或多个动作,其中,所述一个或多个动作满足所述映射规则;
将所述事件中的数据包发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;
根据所述一个或多个无服务器函数的执行,接收一个或多个响应;
执行所述函数图中的在所述事件状态之后的下一个状态。
15.根据权利要求14所述的设备,其特征在于,所述一个或多个处理器还执行所述指令以:
并发执行所述事件状态中的所述一个或多个动作,其中,所述一个或多个动作分别调用对应的无服务器函数,使得所述事件中的所述数据包被传递到所述无服务器函数来执行。
16.根据权利要求14所述的设备,其特征在于,所述一个或多个处理器还执行所述指令以:
按顺序执行所述事件状态中的所述一个或多个动作,其中,所述一个或多个动作分别调用对应的无服务器函数;
所述事件中的所述数据包被传递到与所述一个或多个动作中的第一动作对应的无服务器函数,来自与所述第一动作对应的所述无服务器函数的响应中的数据包被传递到与所述一个或多个动作中的在所述第一动作之后的第二动作对应的另一无服务器函数。
17.根据权利要求14或15所述的设备,其特征在于,所述一个或多个处理器还执行所述指令以:
在所述一个或多个动作执行完成之后,将事件响应发送到产生所述事件的所述事件源。
18.一种存储用于协调无服务器函数执行的计算机指令的非瞬时性计算机可读介质,其特征在于,所述计算机指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行以下步骤:
从事件源接收事件;
根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述函数图包括至少一个事件状态以及所述至少一个事件状态之间的转换;
执行所述事件状态中的一个或多个动作,其中,所述一个或多个动作满足所述映射规则;
将所述事件中的数据包发送到计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;
根据所述一个或多个无服务器函数的执行,接收一个或多个响应;
执行所述函数图中的在所述事件状态之后的下一个状态。
19.一种用于协调无服务器函数执行的系统,其特征在于,所述系统包括网络设备和计算机系统,
所述网络设备用于:
从事件源接收事件;
根据映射规则,将所述事件映射到函数图中的事件状态,其中,所述函数图包括至少一个事件状态以及所述至少一个事件状态之间的转换;
执行所述事件状态中的一个或多个动作,其中,所述一个或多个动作满足所述映射规则;
将所述事件中的数据包发送到所述计算机系统,以触发所述计算机系统启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的一个或多个无服务器函数;
根据所述一个或多个无服务器函数的执行,接收一个或多个响应;
执行所述函数图中的在所述事件状态之后的下一个状态;
所述计算机系统用于:
启动一个或多个计算资源组,从而执行与所述一个或多个已执行的动作相关联的所述一个或多个无服务器函数;
在执行所述一个或多个无服务器函数之后,将一个或多个响应发送到所述事件状态中的所述一个或多个动作。
20.根据权利要求19所述的系统,其特征在于,所述计算机系统还用于:
从存储库下载所述一个或多个无服务器函数;
将所述一个或多个无服务器函数部署在所述启动的一个或多个计算资源组上。
21.根据权利要求20所述的系统,其特征在于,所述计算机系统还用于:
在完成所述一个或多个无服务器函数之后,释放所述一个或多个计算资源组。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/858,359 US10521280B2 (en) | 2017-12-29 | 2017-12-29 | Event-driven serverless function orchestration |
US15/858,359 | 2017-12-29 | ||
US16/194,114 US10565034B2 (en) | 2017-12-29 | 2018-11-16 | Event-driven serverless function orchestration |
US16/194,114 | 2018-11-16 | ||
PCT/CN2018/119527 WO2019128669A1 (en) | 2017-12-29 | 2018-12-06 | Event-Driven Serverless Function Orchestration |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111543037A CN111543037A (zh) | 2020-08-14 |
CN111543037B true CN111543037B (zh) | 2021-09-07 |
Family
ID=67058309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880084687.8A Active CN111543037B (zh) | 2017-12-29 | 2018-12-06 | 事件驱动的无服务器函数编排 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10565034B2 (zh) |
EP (1) | EP3529974A4 (zh) |
CN (1) | CN111543037B (zh) |
WO (1) | WO2019128669A1 (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10565034B2 (en) | 2017-12-29 | 2020-02-18 | Futurewei Technologies, Inc. | Event-driven serverless function orchestration |
EP3750061A1 (en) * | 2018-03-01 | 2020-12-16 | Huawei Technologies Co., Ltd. | Event to serverless function workflow instance mapping mechanism |
US11726758B2 (en) * | 2019-02-07 | 2023-08-15 | Microsoft Technology Licensing, Llc | Efficient scaling of a container-based application in a distributed computing system |
US11055256B2 (en) * | 2019-04-02 | 2021-07-06 | Intel Corporation | Edge component computing system having integrated FaaS call handling capability |
US10769058B1 (en) * | 2019-05-30 | 2020-09-08 | Capital One Services, Llc | Generic serverless performance testing framework |
US11082333B1 (en) | 2019-09-05 | 2021-08-03 | Turbonomic, Inc. | Systems and methods for managing resources in a serverless workload |
US11153173B1 (en) * | 2019-09-10 | 2021-10-19 | Juniper Networks, Inc. | Dynamically updating compute node location information in a distributed computing environment |
CN110650215A (zh) * | 2019-10-24 | 2020-01-03 | 百度在线网络技术(北京)有限公司 | 边缘网络的函数执行方法及装置 |
IL293473A (en) * | 2019-12-13 | 2022-08-01 | Liveperson Inc | Cloud chatbot functions as a service for two-way communication systems |
US11044173B1 (en) * | 2020-01-13 | 2021-06-22 | Cisco Technology, Inc. | Management of serverless function deployments in computing networks |
US11018965B1 (en) * | 2020-01-24 | 2021-05-25 | Red Hat, Inc. | Serverless function scaling |
US11983557B2 (en) * | 2020-01-31 | 2024-05-14 | Salesforce, Inc. | Orchestration for data pipeline execution plans |
JP7324165B2 (ja) | 2020-03-18 | 2023-08-09 | 株式会社日立製作所 | アプリケーション開発支援システム及びアプリケーション開発支援方法 |
US11489844B2 (en) * | 2020-04-17 | 2022-11-01 | Twistlock Ltd. | On-the-fly creation of transient least privileged roles for serverless functions |
US11163537B1 (en) | 2020-05-01 | 2021-11-02 | Mastercard Technologies Canada ULC | Tiered application pattern |
US11184263B1 (en) * | 2020-05-19 | 2021-11-23 | Red Hat, Inc. | Intelligent serverless function scaling |
US11375042B2 (en) * | 2020-07-10 | 2022-06-28 | Kyndryl, Inc. | Symphonizing serverless functions of hybrid services |
US11609803B2 (en) | 2020-09-16 | 2023-03-21 | Red Hat, Inc. | Managing event delivery in a serverless computing environment |
US11574058B1 (en) | 2020-12-03 | 2023-02-07 | Trend Micro Incorporated | Malicious code scanning of remotely-located files |
CN114697395A (zh) * | 2020-12-11 | 2022-07-01 | 北京神州泰岳软件股份有限公司 | 服务资源调用执行方法、装置、服务网关和可读存储介质 |
US20220253347A1 (en) * | 2021-02-10 | 2022-08-11 | International Business Machines Corporation | Reducing start latency of serverless microservices |
US11422850B1 (en) * | 2021-03-31 | 2022-08-23 | Sap Se | Behavior toggle for stateful applications |
CN113051044A (zh) * | 2021-04-20 | 2021-06-29 | 中国工商银行股份有限公司 | 一种基于无服务架构的分布式事务处理方法及装置 |
US11503124B1 (en) | 2021-05-21 | 2022-11-15 | Red Hat, Inc. | Managing resource utilization in edge-computing systems |
US11934893B2 (en) * | 2021-07-06 | 2024-03-19 | Pure Storage, Inc. | Storage system that drives an orchestrator based on events in the storage system |
US20230009642A1 (en) * | 2021-07-07 | 2023-01-12 | Micron Technology, Inc. | Programmable metadata |
CN113742096B (zh) * | 2021-07-14 | 2022-04-22 | 广州市玄武无线科技股份有限公司 | 一种事件队列的实现方法及系统 |
US11681445B2 (en) | 2021-09-30 | 2023-06-20 | Pure Storage, Inc. | Storage-aware optimization for serverless functions |
WO2023050410A1 (zh) * | 2021-09-30 | 2023-04-06 | 西门子股份公司 | 工作流操作的方法和装置 |
US11934346B1 (en) | 2022-10-17 | 2024-03-19 | Trend Micro Incorporated | Random access of a member file in a compressed tar archive |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1248441A2 (en) * | 2001-04-02 | 2002-10-09 | Microsoft Corporation | Peer-to-peer name resolution protocol (PNRP) and multilevel cache for use therewith |
CN103220180A (zh) * | 2013-04-27 | 2013-07-24 | 华南理工大学 | 一种OpenStack云平台异常的处理方法 |
CN105812179A (zh) * | 2016-03-09 | 2016-07-27 | 中国科学院信息工程研究所 | 一种协议无关转发网络事件处理方法 |
CN107148767A (zh) * | 2014-10-30 | 2017-09-08 | 亚马逊科技公司 | 提供商网络中的基于规则的动作触发 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6944662B2 (en) * | 2000-08-04 | 2005-09-13 | Vinestone Corporation | System and methods providing automatic distributed data retrieval, analysis and reporting services |
US7493413B2 (en) | 2005-03-15 | 2009-02-17 | Microsoft Corporation | APIS to build peer to peer messaging applications |
US8995339B2 (en) | 2012-06-08 | 2015-03-31 | At&T Intellectual Property I, L.P. | Network control of applications using application states |
US11481408B2 (en) | 2016-11-27 | 2022-10-25 | Amazon Technologies, Inc. | Event driven extract, transform, load (ETL) processing |
US10257033B2 (en) | 2017-04-12 | 2019-04-09 | Cisco Technology, Inc. | Virtualized network functions and service chaining in serverless computing infrastructure |
US10565034B2 (en) | 2017-12-29 | 2020-02-18 | Futurewei Technologies, Inc. | Event-driven serverless function orchestration |
US10521280B2 (en) | 2017-12-29 | 2019-12-31 | Futurewei Technologies, Inc. | Event-driven serverless function orchestration |
-
2018
- 2018-11-16 US US16/194,114 patent/US10565034B2/en active Active
- 2018-12-06 EP EP18882265.4A patent/EP3529974A4/en not_active Ceased
- 2018-12-06 WO PCT/CN2018/119527 patent/WO2019128669A1/en unknown
- 2018-12-06 CN CN201880084687.8A patent/CN111543037B/zh active Active
-
2020
- 2020-01-09 US US16/738,810 patent/US10915382B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1248441A2 (en) * | 2001-04-02 | 2002-10-09 | Microsoft Corporation | Peer-to-peer name resolution protocol (PNRP) and multilevel cache for use therewith |
CN103220180A (zh) * | 2013-04-27 | 2013-07-24 | 华南理工大学 | 一种OpenStack云平台异常的处理方法 |
CN107148767A (zh) * | 2014-10-30 | 2017-09-08 | 亚马逊科技公司 | 提供商网络中的基于规则的动作触发 |
CN105812179A (zh) * | 2016-03-09 | 2016-07-27 | 中国科学院信息工程研究所 | 一种协议无关转发网络事件处理方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3529974A4 (en) | 2019-12-11 |
US10915382B2 (en) | 2021-02-09 |
US10565034B2 (en) | 2020-02-18 |
US20190205186A1 (en) | 2019-07-04 |
EP3529974A1 (en) | 2019-08-28 |
WO2019128669A1 (en) | 2019-07-04 |
US20200151032A1 (en) | 2020-05-14 |
CN111543037A (zh) | 2020-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111543037B (zh) | 事件驱动的无服务器函数编排 | |
US10521280B2 (en) | Event-driven serverless function orchestration | |
US10620990B2 (en) | Legacy application migration to real time, parallel performance cloud | |
US10884807B2 (en) | Serverless computing and task scheduling | |
US20190377604A1 (en) | Scalable function as a service platform | |
US9407677B2 (en) | High performance data streaming | |
US8543534B2 (en) | Concurrency in event processing networks for event server | |
CN109067890B (zh) | 一种基于docker容器的CDN节点边缘计算系统 | |
US9497096B2 (en) | Dynamic control over tracing of messages received by a message broker | |
EP3090329A1 (en) | Event-driven data processing system | |
US11294740B2 (en) | Event to serverless function workflow instance mapping mechanism | |
WO2019135133A1 (en) | Dynamic delivery of software functions | |
US10255049B2 (en) | Non-blocking application object framework and dependency model management | |
US11962456B2 (en) | Automated cross-service diagnostics for large scale infrastructure cloud service providers | |
CN113703997A (zh) | 集成多种消息代理的双向异步通信中间件系统及实现方法 | |
CN114721807A (zh) | 批量业务任务执行方法、装置、设备、介质和程序产品 | |
US10592277B2 (en) | System and method for determining the success of a cross-platform application migration | |
CN115373886A (zh) | 服务群组容器停机方法、装置、计算机设备和存储介质 | |
US20240202062A1 (en) | Dynamic network debug service in a containerized computing cluster | |
CN117596263A (zh) | 一种微服务管理系统及方法、存储介质及电子装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220224 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |