SlideShare a Scribd company logo
System Design on
Easy Mode
All Things Open
October 16th, 2023
Raleigh, North Carolina
- Developer relations engineer @ Temporal
- Worked on Temporal’s JavaScript runtime
- Wrote a book on GraphQL
- Consultant & open-source maintainer
2
Loren Sands-Ramshaw
04 System design patterns
03 How?
02 New possibilities
01 Durable execution
Today’s Agenda
3
Durable execution
01
5
Normal execution
Functions fail to complete executing when:
- Process crashes
6
Normal execution
Functions fail to complete executing when:
- Process crashes
- Process killed by OS
7
Normal execution
Functions fail to complete executing when:
- Process crashes
- Process killed by OS
- Machine loses power
8
Normal execution
Functions fail to complete executing when:
- Process crashes
- Process killed by OS
- Machine loses power
- Deploy new code
9
Normal execution
Functions fail to complete executing when:
- Process crashes
- Process killed by OS
- Machine loses power
- Deploy new code
- Transient failures
Functions are guaranteed to complete running
10
Durable execution
Functions are guaranteed to complete running
11
Durable execution
Functions are guaranteed to complete running
12
Durable execution
Transient failures are automatically retried
Coding at a higher level of abstraction
13
Durable execution
Coding at a higher level of abstraction
14
Durable execution
High-level languages
Low-level languages
Coding at a higher level of abstraction
15
Durable execution
High-level languages
Low-level languages
Durable code
Normal code
New possibilities
02 ✨
New possibilities
- await sleep('30 days')
17
Durable execution
18
New possibilities
- await sleep('30 days')
- Send RPCs to the function
Durable execution
19
New possibilities
- await sleep('30 days')
- Send RPCs to the function
- Forever functions
Durable execution
20
New possibilities
- await sleep('30 days')
- Send RPCs to the function
- Forever functions
- Don’t have to use a database
Durable execution
21
Subscription
Handle an RPC
Sleep for days
22
Forever function
Variable > database
Runs forever
23
- Process independent
- Automatic retries
- Sleep
- RPCs
- Forever functions
- Local variables instead of database
Durable execution
24
- Process independent
- Automatic retries
- Sleep
- RPCs
- Forever functions
- Local variables instead of database
Durable execution
… but how?
How?
03
26
Durable execution
27
Forever function
Variable > database
Runs forever
28
Durable execution systems
29
Used by
System design
patterns
04 microservices.io
bytebytego.com
Circuit breakers
31
Design patterns
Circuit breakers
Event-driven architecture
32
Design patterns
Design patterns: event-driven architecture
33
34
Circuit breakers
Event-driven architecture
Sagas
Design patterns
35
Design patterns: sagas
36
Design patterns: sagas
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
37
Design patterns
Design patterns: event-driven architecture
38
39
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
Design patterns
Design patterns: event sourcing
40
CQRS
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
41
Design patterns
42
Design patterns: CQRS (Command Query Responsibility Segregation)
CQRS
Distributed cron jobs
43
Design patterns
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
CQRS
Distributed cron jobs
Task queues
44
Design patterns
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
CQRS
Distributed cron jobs
Task queues
State machines
45
Design patterns
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
CQRS
Distributed cron jobs
Task queues
State machines
Circuit breakers
Event-driven architecture
Sagas
Transactional outboxes
Event sourcing
46
Design patterns
Recap
47
04 System design patterns
03 How
02 New possibilities
01 Durable execution
48
temporal.io
@temporalio
@lorendsr
t.mp/ato-design

More Related Content

System Design on Easy Mode