您的位置:首页 > 博客中心 > 互联网 >

工作流 —— AWS

时间:2022-05-11 09:06

原文:

1 Sample Workflow介绍

Sample Workflow是亚马逊AWS提供的一种公共网络服务。

1.1 什么是Sample Workflow

Sample Workflow(SWF)是亚马逊提供的一种云计算服务,它通过一个提供给协调分布式组件的程序设计模式和框架,以及以一种可靠地方式维护他们的执行状态,简化了部署异步和分布式应用程序的复杂度。

亚马逊SWF的架构如下图所示:

 技术图片

 

 

1.3.1 Workflow

工作流是一种分布式应用程序,它由在不同设备上分布式运行的协调逻辑和任务组成。在设计工作流的过程中,需要对应用程序进行分析,将组件的任务标示出来。在亚马逊SWF中,这些任务被称为activities。工作流的协调逻辑模块来决定哪些activities被执行。

在协调逻辑和activities被设计完成之后,就可以将它们注册为工作流和activities 类型。在注册过程中,需要为每一个类型指定一个名字、一个版本号以及一些默认的配置项。

 

1.3.2 Workflow History

每一个工作流执行过程都被记录到了工作流历史中,亚马逊SWF负责维护这个工作流历史。工作流历史是一个对工作流启动之后每一个执行的事件的详细、完整、一致的记录。

一个事件是工作流执行状态的间歇性改变,例如:当一个新的activity被计划,或者一个运行的activity执行完成的时候。

不改变工作流执行状态的操作是不会记录到工作流历史中去的。

工作流历史有下面主要的好处:

1.它使应用程序是无状态的,这是因为工作流执行的所有信息都保存到工作流历史中去了;

2.对于每一个工作流执行而言,工作流历史提供了哪些activities被安排了、它们当前的状态是什么以及它们的执行结果。

3.工作流历史提供了一种详细的审计追踪记录,可以用来监控工作流的执行情况,以及验证已经完成的工作流执行。

 

1.3.3 Actors

Actor可以是工作流的启动者,也可以是deciders,又可以是workers。这些actors通过API与亚马逊SWF交互。

 

1.3.4 Domains

每一个工作流都是运行在一个domain中的,domain限制了工作流的范围。一个亚马逊AWS账号可以同时拥有多个domain,而每一个domain也可以包含多个工作流,但是不同domain中的工作流是不能够交互的。

 

 

1.3.5 Object Identifiers

下面这些概念描述了亚马逊SWF中一些对象如何被唯一标示的:

1.WorkflowType:一个注册的工作流类型由其domain、name、version来标示,字段名为RegisterWorkflowType;

2.ActivityType:一个注册的activity类型由其domain、name、version来标示,字段名为RegisterActivityType;

3.DecisionTask and Activity Task:每一个decision task和activity task都是由一个task token来标示的,这个task token是由亚马逊SWF来生成的。

4.WorkflowExecution:Workflow execution由domain、工作流ID和runID来标示;前两个是启动工作流执行(StartWorkflowExecution)的输入参数,run ID是启动工作流执行之后返回的。

 

1.3.6 Task Lists

Task lists提供了一种管理工作流中的tasks的方式,可以简单理解为动态队列。

Task Lists还提供了一种分发task的机制,它是动态存在的,不需要注册也不需要显式的创建,当计划了一个task的时候就会自动创建一个task list(如果这个task list以前不存在的话)。

下面有几种不同类型的Task List。

1.DecisionTask Lists:每个工作流执行都被关联到了一个指定的decision task list。当注册一个工作流类型的时候,可以为这个工作流类型的执行指定一个默认的task list。

2.ActivityTask Lists:一个单独的activity task list可以包含不同activity类型的task。任务列表中的任务按照顺序计划和分配。

3.TaskRouting:当worker要取一个task的时候,它可以指定一个task list去取任务。如果它这样做了的话,这个worker就只能接收该task list中的任务了。这样一来,就可以确保特定的任务只能分配给特定的workers。

 

1.3.7 Timeout Types

为了保证工作流执行能够正确运行,亚马逊SWF提供了一些超时时间类型供设置。一些类型指定工作流全部完成的超时时间,一些指定了任务分配给worker之后要多久才执行,另外一些指定了task被分配到之后要多久能够执行完成。需要注意的是,在SWF中超时时间的单位都是秒。

1.WorkflowStart to Close(类型:START_TO_CLOSE):指定了一个工作流执行的最长时间。工作流注册的时候为这个指定一个默认值,工作流启动之后还可以修改这个值。当达到这个超时时间之后,SWF将会关闭这个工作流执行,并且在工作流历史中增加一个WorkflowExecutionTimedOut类型的事件;

2.DecisionTask Start to Close(类型:START_TO_CLOSE):指定了decider完成一次decision task的最长时间。它是在工作流类型注册时指定的。如果这个超时时间达到的时候,这个task将会在工作流历史中标记为超时(DecisionTaskTimedOut)。

3.ActivityTask Start to Close(类型:START_TO_CLOSE):指定了worker接收到任务之后完成该任务所需要的最大时间。

4.ActivityTask Heartbeat(类型:HEARTBEAT):指定了通过RecordActivityTaskHeartbeat操作提供的进程

5.ActivityTask Schedule to Start(类型:SCHEDULE_TO_START):指定了activity task在没有worker可用来执行的情况下,SWF等待的最大时间。当时间达到的时候,过期的task将不会再分配给另外的worker;

6.ActivityTask Schedule to Close(类型:SCHEDULE_TO_CLOSE):指定了activity task在计划之后最长将过多久执行完成。为了最佳实践,这个值不应该大于Activity Task Scheduleto Start和Activity Task Start toClose之和。

 

1.3.8 Activity

在设计亚马逊SWF之前,需要首先定义需要的activities,然后将每一个activity注册到SWF中成为一个activity类型。当注册activity的时候,需要提供一些信息,例如:名字和版本,以及activity的过期时间。

需要注意的是,在一个工作流中,同一个activity可能会执行多次,输入也可能是不一样。例如:对于一个客户订单的工作流,处理订购产品的activity就可能会执行多次,这是因为客户可能会同时购买多个产品,此时对于该activity而言只是输入(产品信息)不一样而已。

 

1.3.9 Tasks

亚马逊SWF中有两种不同的task:

1.Activitytask:对一个activity的一次调用,告诉worker去执行它的功能,例如:检查库存、信用卡支付等。activity task包含了worker所需要的执行其功能的所有信息。

2.Decisiontask:Decision task告诉一个decider工作流执行状态已经被改变了,因此decider可以决定下一次需要执行的activity。

下图展示了工作流和decider之间的关系:

下图展示了与activity相关的组件之间的关系:

 

1.3.10 Activity Worker

Activity Worker是一个接受、处理activity task的进程或者线程,并且会在处理完成之后返回结果。

对于Activity task以及Activity worker而言,它们都可以同步或者异步运行。它们也可以通过不同地理位置的计算机进行分布执行,或者在同一台计算机上执行。不同的activity worker可以用不同的计算机语言来编写,也可以运行在不同的操作系统之上。

1.3.11 Decider

Decider是对工作流中的协调逻辑模块的软件程序实现。Decider负责分配task并提供输入信息给worker,处理工作流启动之后接收到的事件,并在目标完成之后关闭工作流。

 

1.4 Sample Workflow是怎么工作的

SWF的执行步骤如下:

1.编写activity workers来实现工作流中的执行步骤;

2.编写decider来实现工作流中的协调逻辑;

3.在亚马逊SWF中注册activities和workflow,这个步骤可以通过编程或者亚马逊控制台来完成;

4.启动activities workers和deciders;

5.启动工作流的一个或者多个执行。每一个执行都是独立的,你可以为每一个执行提供不同的输入数据;

6.在亚马逊的控制台上查看工作流的执行情况。你可以过滤或者查看正在运行的以及已完成的execution。

 

本类排行

今日推荐

热门手游