# 8.2 SWF - Simple Workflow Service

## What is SWF

Amazon Simple Workflow Service (Amazon SWF) is a web service that makes it easy to coordinate work across distributed application components. Amazon SWF enables applications for a range of use cases, including media processing, web application back-ends, order/business process workflows, and analytics pipelines, to be designed as a coordination of tasks. Tasks represent invocations of various processing steps in an application which can be performed by executable code, web service calls, human-being actions, and scripts (doesn't have to involve EC2 instances or AWS related services).

## Uses cases on AWS Docs:

* Video encoding using Amazon S3 and Amazon EC2.&#x20;
* Migrating components from the datacenter to the cloud.
* Processing large product catalogs with human works using Amazon Mechanical Turk.&#x20;

## SWF vs. SQS

* SQS has retention period of 14 days, SWF up to 1 year for workflow executions.
* Amazon SWF presents a task-oriented API, whereas Amazon SQS offers a message-oriented API.
* Amazon SWF ensures that a task is assigned/processed only once is never duplicated. With Amazon SQS, you need to handle duplicated messages and may also need to ensure that a message is processed only once.
* Amazon SWF keeps track of all the tasks and events in an application. With Amazon SQS, you need to implement your own application-level tracking, especially if your application uses multiple queues.

## SWF Actors

You must remember these 3 kinds of actors:

* **Workflow Starters** - An application that can initiate (start) a workflow. Could be your e-commerce website when placing an order or a mobile app searching for bus times.
* **Deciders** - Control the flow of activity tasks in a workflow execution. If something has finished in a workflow (or fails) a Decider decides what to do next.&#x20;
  * Amazon SWF maintains the workflow execution history and provides it to a decider along with **decision task**. This enables you to dynamically add or remove deciders as necessary, which makes the processing of your workflows highly scalable.
  * Every time a state change occurs for a workflow execution, Amazon SWF schedules a decision task. Each time a decider receives a decision task, it does the following:
    * Interprets the workflow execution history provided with the decision task.
    * Applies the coordination logic based on the workflow execution history and makes decisions on what to do next.
    * Completes the decision task and provides a list of decisions to Amazon SWF.
* **Activity Workers** - Carry out the activity tasks.
