AWS Simple Workflow: Distributed Out of the Box! - JEEConf 2016
-
Upload
serhiy-batyuk -
Category
Software
-
view
673 -
download
2
Transcript of AWS Simple Workflow: Distributed Out of the Box! - JEEConf 2016
AWS SWF Use Cases
https://www.youtube.com/watch?v=DYmJIQO2ZyQ&t=83
Media Processing Infrastructure Provisioning
Business ProcessesReport GenerationData Processing
https://globallogic.com.ua/speaking-event/jeeconf-2015
Java Flow Framework
Workflow Worker
Decider
Workflow Implementation
Activities Client
Activities Worker
Worker
Activities Implementations
Workflow Starter
Client app
Workflow Client
SWF
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-application-structure.html
Java Flow Framework
Workflow Worker
Decider
Activities Client
Activities Worker
WorkerClient app
Workflow Client
SWF
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-application-structure.html
Java Flow Framework
Decider
Workflow Implementation
Worker
Activities Implementations
Workflow Starter
Client app
SWF
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-application-structure.html
Java Flow Framework Classes
@Activities
@Workflow Client to schedule workflows
Client to schedule activities
Java Flow Framework Classes
@Activities
@Workflow Client to schedule workflows
Client to schedule activities
WorkflowWorker
ActivitiesWorker
Handles decision tasks
Handles activity tasks
Preparing for JEEConf
Visit Organizer
Service
JEEConf Service
Travel Service
Book train tickets
Book hotelBuy
tickets
Time to see the code!
public class HelloWorld {
public static void main() { System.out.println(“Hi”); }
}
https://github.com/sbatyuk/aws-swf-sample
http://info.thinkfun.com/stem-education/mark-engelberg-inventor-of-code-master-featured-in-getting-smart
EASY, RIGHT?
Worker
Worker
Worker
Decider
Decider
Scalable
AWS SWF
My App
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-scalable.html
Worker
Worker
Worker
Decider
Decider
Scalable
AWS SWF
My App
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-scalable.html
Worker
Worker
Worker
Decider
Decider
Activity Retries
AWS SWF
My App
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/features-retry.html
Worker
Worker
Worker
Decider
Decider
Activity Retries
AWS SWF
My App
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/features-retry.html
Worker
Worker
Worker
Decider
Decider
Activity Retries
AWS SWF
My App
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/features-retry.html
Integration with Spring and JUnit
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/test.html
AWS SWF Pricing
https://aws.amazon.com/swf/pricing
10,000 workflows in a day with 3 activities each:
$1.75
Workflow Method Replays
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Get History
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Schedule
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Skip
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Skip
Workflow Method Replay #1
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Skip
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Get History
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Get Result
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Schedule
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Schedule
Workflow Method Replay #2
http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow-basics-distributed-execution.html
@Overridepublic void prepareForJEEConf(String name, String email) { Promise<Integer> ticket = jeeConfService.buyTicket(name); Promise<Integer> hotel = travelService.bookHotel(name, ticket); Promise<Integer> train = travelService.bookTrainTickets(name, ticket); sendConfirmationEmail(email, ticket, hotel, train);}
Skip
History and Data Size Limits
25K
http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-limits.html
History events
32K
Message size (chars)