SLIDE 1 Learning the Three Types
Mike Amundsen @mamund API Academy
SACon London 2018
SLIDE 2
SLIDE 3
http://apiacademy.co
SLIDE 4
http://g.mamund.com/msabook
SLIDE 5 @TheCAMBook
"A reusable guide to the technology, business, and politics of doing APIs at scale within the enterprise."
- - Kin Lane, API Evangelist
SLIDE 6
http://g.mamund.com/cambook
SLIDE 7 Overview
- Programming the Network
- Microservices
- Three Types of Microservice Components
- Nygard's Stability Patterns
- Applying Nygard to Microservices
- But Wait, There's More...
SLIDE 8
SLIDE 9
SLIDE 10
SLIDE 11
SLIDE 12
SLIDE 13
SLIDE 14
SLIDE 15
Traveling
SLIDE 16
Traveling
SLIDE 17
Traveling the Network
SLIDE 18
Programming the Network
SLIDE 19
SLIDE 20
SLIDE 21 "Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf
"There is no simultaneity at a distance."
Programming the Network
Pat Helland
SLIDE 22 Newton rules the "inside"
Sir Isaac Newton
SLIDE 23 Einstein rules the "outside"
Albert Einstein
SLIDE 24 "Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf
Programming the Network
Pat Helland
SLIDE 25 "Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf
Programming the Network
Pat Helland
SLIDE 26 "Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf
Programming the Network
Pat Helland
SLIDE 27 https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
Fallacies of Distributed Computing (1994)
L Peter Deutsch
SLIDE 28 The Language of the System, Rich Hickey (2012) https://www.youtube.com/watch?v=ROor6_NGIWU
The Language of the System (2012)
Rich Hickey
SLIDE 29
Programming the Network brings new challenges
SLIDE 30
Microservices
SLIDE 31 "An approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms."
https://www.thoughtworks.com/insights/blog/microservices-nutshell
SLIDE 32 "Emphasizes scalability of component interactions, generality of interfaces, independent deployment of components, and intermediary components."
SLIDE 33 "A universal linked information system, in which generality and portability are [most] important."
SLIDE 34 Microservice Characteristics
- Make each program to one thing well
- Expect the output of every program to be the input of
another program
- Design and build software to be tried early
- Use tools to lighten the programming task
SLIDE 35 Unix Operating Principles (1978)
- Make each program to one thing well
- Expect the output of every program to be the input of
another program
- Design and build software to be tried early
- Use tools to lighten the programming task
https://en.wikipedia.org/wiki/Unix_philosophy
SLIDE 36
Loosely-coupled components running in an engineered system.
SLIDE 37
Three Types of Microservices
SLIDE 38 Three Types of Microservices
- Stateless
- Persistence
- Aggregator
SLIDE 39
Stateless Microservices
SLIDE 40 Stateless Microservices
- Simple processors (converters, translators, etc.)
- No dependence on other microservices
- No local data storage (disk I/O)
The most common MSC example, but the least useful!
SLIDE 41 Stateless Microservices
- No shared state
- Easy to replace
- Easy to scale up
Ephemeral Computing
SLIDE 42 Stateless Microservices
WARNING: NOT REAL CODE!
SLIDE 43
Persistence Microservices
SLIDE 44 Persistence Microservices
- Simple (local) storage (reads and/or writes)
- Disk I/O dependent
- Possibly VM or one-U dependent
Commonly needed MSC, not the easiest to implement.
SLIDE 45 Persistence Microservices
- System of Record/Source of Truth
- Relatively easy to scale for reads (CQRS)
- No cross-service two-phase commits (Saga)
Durable Storage
SLIDE 46 Persistence Microservices
WARNING: NOT REAL CODE!
SLIDE 47
Aggregator Microservices
SLIDE 48 Aggregator Microservices
- Depends on other ("distant") microservices
- Network dependent
- Usually Disk I/O dependence, too
The most often-needed; most challenging, too.
SLIDE 49 Aggregator Microservices
- Sequence vs. Parallel calls
- Timing is everything
- Easy to scale (should be…)
Workflow Choreography
SLIDE 50 Aggregator Microservices
WARNING: NOT REAL CODE!
SLIDE 51 Three Types of Microservices
- Stateless (ephemeral)
- Persistence (durable)
- Aggregator (workflow)
SLIDE 52
But, what about the network?
SLIDE 53
Nygard's Stability Patterns
SLIDE 54 “Bugs will happen. They cannot be eliminated, so they must be survived instead.”
SLIDE 55
SLIDE 56 Nygard Stability Patterns
- Timeout
- Circuit Breaker
- Bulkhead
- Steady State
- Fail Fast
- Handshaking
SLIDE 57 "Nygard Stability Patterns" -- Timeout
"The timeout is a simple mechanism allowing you to stop waiting for an answer once you think it will not come."
SLIDE 58 "Nygard Stability Patterns" -- Timeout
"The timeout is a simple mechanism allowing you to stop waiting for an answer once you think it will not come."
WARNING: NOT REAL CODE!
SLIDE 59 "Nygard Stability Patterns" -- Circuit Breaker
"Circuit breakers are a way to automatically degrade functionality when the system is under stress."
SLIDE 60 "Nygard Stability Patterns" -- Circuit Breaker
"Circuit breakers are a way to automatically degrade functionality when the system is under stress."
SLIDE 61 "Nygard Stability Patterns" -- Bulkhead
"The bulkhead enforces a principle of damage containment."
SLIDE 62 "Nygard Stability Patterns" -- Bulkhead
"The bulkhead enforces a principle of damage containment."
SLIDE 63 "Nygard Stability Patterns" -- Bulkhead
"The bulkhead enforces a principle of damage containment."
SLIDE 64 "Nygard Stability Patterns" -- Steady State
"The system should be able to run indefinitely without human intervention."
- - Chapter 5.4
- Avoid fiddling
- Purge data w/ app logic
- Limit caching
- Roll the logs
SLIDE 65 "Nygard Stability Patterns" -- Steady State
"The system should be able to run indefinitely without human intervention."
- - Chapter 5.4
- Avoid fiddling
- Purge data w/ app logic
- Limit caching
- Roll the logs
SLIDE 66 "Nygard Stability Patterns" -- Fail Fast
"If the system can determine in advance that it will fail at an
- peration, it’s always better to fail fast."
- - Chapter 5.5
SLIDE 67 "Nygard Stability Patterns" -- Fail Fast
"If the system can determine in advance that it will fail at an
- peration, it’s always better to fail fast."
- - Chapter 5.5
WARNING: NOT REAL CODE!
SLIDE 68 "Nygard Stability Patterns" -- Handshaking
"Handshaking is all about letting the server protect itself by throttling its own workload."
SLIDE 69 "Nygard Stability Patterns" -- Handshaking
"Handshaking is all about letting the server protect itself by throttling its own workload."
WARNING: NOT REAL CODE!
SLIDE 70 "Nygard Stability Patterns" -- Cache
"Caching can reduce the load on the server and cut response times to a fraction of what they would be without caching."
SLIDE 71 "Nygard Stability Patterns" -- Cache
"Caching can reduce the load on the server and cut response times to a fraction of what they would be without caching."
WARNING: NOT REAL CODE!
SLIDE 72 "Nygard Stability Patterns" -- Cache
"Caching can reduce the load on the server and cut response times to a fraction of what they would be without caching."
WARNING: NOT REAL CODE!
SLIDE 73
Stabilizing Stateless Microservices
SLIDE 74 Stateless Microservices
WARNING: NOT REAL CODE!
SLIDE 75 Networked Stateless
- What if the work takes too long?
SLIDE 76 Stable Stateless Microservices
WARNING: NOT REAL CODE!
SLIDE 77
Stabilizing Persistence Microservices
SLIDE 78 Persistence Microservices
WARNING: NOT REAL CODE!
SLIDE 79 Networked Persistence
- What if the work takes too long?
- What is the dependent service doesn't respond in time?
- What if the dependent service is down?
- What if the storage overflows (data, logs, etc.)?
SLIDE 80 Stable Persistence Microservices
- 1. Fail-Fast
- 2. Timeout
- 3. Circuit Breaker
- 4. Steady State
WARNING: NOT REAL CODE!
SLIDE 81
Stabilizing Aggregator Microservices
SLIDE 82 Aggregator Microservices
WARNING: NOT REAL CODE!
SLIDE 83 Networked Aggregators
- What if the work takes too long?
- What if a dependent services doesn't respond in time?
- What if a dependent service is down?
- What if storage overflows (data, logs, etc.)?
- What if a dependent service is unhealthy?
- What if traffic for a service spikes?
SLIDE 84 Stable Aggregator Microservices
- 1. Fail-Fast
- 2. Timeout
- 3. Circuit Breaker
- 4. Steady State
- 5. Handshaking
- 6. Bulkhead
WARNING: NOT REAL CODE!
SLIDE 85
Nygard's Admonition...
SLIDE 86 Applying Nygard's Patterns to Services
○ fail fast
○ fail fast, timeout, circuit breaker, steady state
○ fail fast, timeout, circuit breaker, steady state, handshaking, bulkhead
Apply Nygard's Stability Patterns to improve the health
- f your components and your system.
SLIDE 87
SLIDE 88 https://blogs.technet.microsoft.com/michael_platt/2005/08/30/integration-and-interoperability/
"Interoperation is peer to peer. Integration is where a system is subsumed within another."
- - Michael Platt, Microsoft
Aim for Interop, not Integration...
SLIDE 89 Aim for Interop, not Integration...
By Wkinterop - Powerpoint -> PNG, CC BY-SA 3.0, https://en.wikipedia.org/w/index.php?curid=35139609
SLIDE 90 https://blogs.technet.microsoft.com/michael_platt/2005/08/30/integration-and-interoperability/
"There is no simultaneity at a distance."
- - Pat Helland, Salesforce
Include time/distance in your models
Pat Helland
SLIDE 91 "I'm sorry that coined the term 'objects' for this
- topic. The big idea is 'messaging'."
Alan Kay, 1998
Include time/distance in your models
SLIDE 92 https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
L Peter Deutsch
Remember, you're programming the network
SLIDE 93
Remember, you're programming the network
https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf
SLIDE 94
The HTTP protocol supports a number of "safe" actions such as HEAD, and GET. The HTTP methods PUT, POST, and DELETE are categorized as "unsafe" actions.
Remember, you're programming the network
https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf
SLIDE 95
Remember, you're programming the network
https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf
SLIDE 96
In HTML when a FORM element has the METHOD property set to "get" this represents an idempotent action. When the same property is set to "post" the affordance represents a non-idempotent action.
Remember, you're programming the network
https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf
SLIDE 97 Other Considerations...
- Interop vs. Integration
- Time & Distance
- Safety & Idempotence
SLIDE 98
So...
SLIDE 99
We need microservices...
SLIDE 100
So that we can program the network...
SLIDE 101 Which means applying patterns to our code..,
- 1. Fail-Fast
- 2. Timeout
- 3. Circuit Breaker
- 4. Steady State
- 5. Handshaking
- 6. Bulkhead
SLIDE 102
And that means understanding the role of semantics...
SLIDE 103
And the role of distance & time...
SLIDE 104
And constantly reminding ourselves of the challenge.
SLIDE 105
That's a lot!
SLIDE 106 The Best Software Architecture
"The best software architecture 'knows' what changes often and makes that easy."
SLIDE 107
Let's continue the conversation...
SLIDE 108 Learning the Three Types
Mike Amundsen @mamund API Academy
SACon London 2018
SLIDE 109 Learning the Three Types
Mike Amundsen @mamund API Academy
SACon London 2018