Express yourself with
a finite-state machine in Scala
Michał Tomański
Overview
-
Problem(s)
- FSM as a solution
- Akka
- Akka Persistent FSM
- Demo time
- Summary
- Questions
Problem(s)
E.g. new user registration, buying stuff
How to model a process that:
-
has many steps, or
-
lasts some time, or
-
is not just a trivial sequence of steps
Finite-state machine
Seen by mathematicians
Actor
- Encapsulates state and behavior
- Reacts to a message
- Location transparency
- Supervision
- High level of abstraction of concurrency
Persistent Actor
- Persist every valid event
- Do your business logic after it's persisted
- In case of a failure, let it fail
- Allow actor to gracefully recover
- To make the recovery faster, use snapshots
Finite-state machine
A very simple model of process, consisting of:
Seen in Akka-persistence FSM
- State names
- Context (internal data)
- Events
- Transitions
- Context changes
- Behavior during transitions
- Timeout events
- Initial state name and initial context
State names
Context
Events
Transitions
Context changes
Behavior during transitions
Timeout events
Initial state name and initial context
Demo time
Express Ticket Machine
- Stationary (at the railway station)
- Show the soonest train connections
- Pick one
- Reserve a seat on that connection until payment
- Pay
- Print the ticket
For people who are in a hurry
Summary
Why?
- Separation of business logic from infrastructure
- Looks like a user story
- Easy to maintain and extend
- A good start for Event Sourcing and CQRS
- Cluster Sharding for multiple concurrent process instances
Express yourself with
a finite-state machine in Scala
Michał Tomański
Copy of FSM
By Michał Tomański
Copy of FSM
- 1,232