Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning...

109
Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London 2018

Transcript of Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning...

Page 1: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Learning the Three Types of Microservices

Mike Amundsen@mamund

API Academy

SACon London 2018

Page 2: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 3: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

http://apiacademy.co

Page 4: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

http://g.mamund.com/msabook

Page 5: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

@TheCAMBook

"A reusable guide to the technology, business, and

politics of doing APIs at scale within the enterprise."

-- Kin Lane, API Evangelist

Page 6: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

http://g.mamund.com/cambook

Page 7: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Overview

● Programming the Network● Microservices● Three Types of Microservice Components● Nygard's Stability Patterns● Applying Nygard to Microservices● But Wait, There's More...

Page 8: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 9: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 10: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 11: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 12: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 13: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 14: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 15: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Traveling

Page 16: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Traveling

Page 17: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Travelingthe Network

Page 18: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Programmingthe Network

Page 19: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 20: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 21: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Pat Helland (2005)

Programming the Network

Pat Helland

Page 22: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Newton rules the "inside"

Sir Isaac Newton

Page 23: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Einstein rules the "outside"

Albert Einstein

Page 24: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf

Programming the Network

Pat Helland

Page 25: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf

Programming the Network

Pat Helland

Page 26: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Data on the Inside vs. Data on the Outside, Helland (2005) http://cidrdb.org/cidr2005/papers/P12.pdf

Programming the Network

Pat Helland

Page 27: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing

Fallacies of Distributed Computing (1994)

L Peter Deutsch

Page 28: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

The Language of the System, Rich Hickey (2012) https://www.youtube.com/watch?v=ROor6_NGIWU

The Language of the System (2012)

Rich Hickey

Page 29: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Programming the Network brings new challenges

Page 30: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Microservices

Page 31: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"An approach to developing a single application as a suite of

small services, each running in its own process and

communicating with lightweight mechanisms."

-- Martin Fowler, 2014

https://www.thoughtworks.com/insights/blog/microservices-nutshell

Page 32: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Emphasizes scalability of component interactions, generality of interfaces,

independent deployment of components, and intermediary

components."

-- Roy Fielding, 2000

Page 33: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"A universal linked information system, in which generality and portability are [most] important."

-- Tim Berners-Lee, 1989

Page 34: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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

Page 35: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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

Page 36: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Loosely-coupled components running in an

engineered system.

Page 37: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Three Types of Microservices

Page 38: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Three Types of Microservices

● Stateless● Persistence● Aggregator

Page 39: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stateless Microservices

Page 40: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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!

Page 41: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stateless Microservices

● No shared state● Easy to replace● Easy to scale up

Ephemeral Computing

Page 42: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stateless Microservices

WARNING: NOT REAL CODE!

Page 43: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Persistence Microservices

Page 44: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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.

Page 45: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Persistence Microservices

● System of Record/Source of Truth● Relatively easy to scale for reads (CQRS)● No cross-service two-phase commits (Saga)

Durable Storage

Page 46: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Persistence Microservices

WARNING: NOT REAL CODE!

Page 47: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aggregator Microservices

Page 48: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aggregator Microservices

● Depends on other ("distant") microservices ● Network dependent● Usually Disk I/O dependence, too

The most often-needed; most challenging, too.

Page 49: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aggregator Microservices

● Sequence vs. Parallel calls● Timing is everything● Easy to scale (should be…)

Workflow Choreography

Page 50: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aggregator Microservices

WARNING: NOT REAL CODE!

Page 51: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Three Types of Microservices

● Stateless (ephemeral)● Persistence (durable)● Aggregator (workflow)

Page 52: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

But, what about the network?

Page 53: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Nygard's Stability Patterns

Page 54: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

“Bugs will happen. They cannot be eliminated, so they

must be survived instead.”

-- Michael T. Nygard

Page 55: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 56: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Nygard Stability Patterns

● Timeout● Circuit Breaker● Bulkhead● Steady State● Fail Fast● Handshaking

Page 57: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Chapter 5.1

Page 58: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Ch 5.1

WARNING: NOT REAL CODE!

Page 59: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Circuit Breaker

"Circuit breakers are a way to automatically degrade functionality when the system is under stress."

-- Chapter 5.2

Page 60: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Circuit Breaker

"Circuit breakers are a way to automatically degrade functionality when the system is under stress."

-- Chapter 5.2

Page 61: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Bulkhead

"The bulkhead enforces a principle of damage containment."-- Chapter 5.3

Page 62: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Bulkhead

"The bulkhead enforces a principle of damage containment."-- Chapter 5.3

Page 63: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Bulkhead

"The bulkhead enforces a principle of damage containment."-- Chapter 5.3

Page 64: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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

Page 65: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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

Page 66: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Fail Fast

"If the system can determine in advance that it will fail at an operation, it’s always better to fail fast."

-- Chapter 5.5

Page 67: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Fail Fast

"If the system can determine in advance that it will fail at an operation, it’s always better to fail fast."

-- Chapter 5.5

WARNING: NOT REAL CODE!

Page 68: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Handshaking

"Handshaking is all about letting the server protect itself by throttling its own workload."

-- Chapter 5.6

Page 69: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"Nygard Stability Patterns" -- Handshaking

"Handshaking is all about letting the server protect itself by throttling its own workload."

-- Chapter 5.6

WARNING: NOT REAL CODE!

Page 70: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Chapter 10.2

Page 71: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Chapter 10.2

WARNING: NOT REAL CODE!

Page 72: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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."

-- Chapter 10.2

WARNING: NOT REAL CODE!

Page 73: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stabilizing Stateless Microservices

Page 74: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stateless Microservices

WARNING: NOT REAL CODE!

Page 75: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Networked Stateless

● What if the work takes too long?

Page 76: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stable Stateless Microservices

1. Fail-Fast

WARNING: NOT REAL CODE!

Page 77: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stabilizing Persistence Microservices

Page 78: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Persistence Microservices

WARNING: NOT REAL CODE!

Page 79: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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.)?

Page 80: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stable Persistence Microservices

1. Fail-Fast2. Timeout3. Circuit Breaker4. Steady State

WARNING: NOT REAL CODE!

Page 81: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stabilizing Aggregator Microservices

Page 82: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aggregator Microservices

WARNING: NOT REAL CODE!

Page 83: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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?

Page 84: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Stable Aggregator Microservices

1. Fail-Fast2. Timeout3. Circuit Breaker4. Steady State5. Handshaking6. Bulkhead

WARNING: NOT REAL CODE!

Page 85: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Nygard's Admonition...

Page 86: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Applying Nygard's Patterns to Services● Stateless

○ fail fast● Persistence

○ fail fast, timeout, circuit breaker, steady state● Aggregation

○ fail fast, timeout, circuit breaker, steady state, handshaking, bulkhead

Apply Nygard's Stability Patterns to improve the health

of your components and your system.

Page 87: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London
Page 88: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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...

Page 89: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Aim for Interop, not Integration...

By Wkinterop - Powerpoint -> PNG, CC BY-SA 3.0, https://en.wikipedia.org/w/index.php?curid=35139609

Page 90: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

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

Page 91: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

"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

Page 92: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing

L Peter Deutsch

Remember, you're programming the network

Page 93: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

●Safety

Remember, you're programming the network

https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf

Page 94: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

●Safety 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

Page 95: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

●Safety●Idempotence

Remember, you're programming the network

https://www.w3.org/2011/10/integration-workshop/p/hypermedia-oriented-design.pdf

Page 96: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

●Safety●Idempotence

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

Page 97: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Other Considerations...

● Interop vs. Integration● Time & Distance● Safety & Idempotence

Page 98: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

So...

Page 99: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

We need microservices...

Page 100: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

So that we can program the network...

Page 101: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Which means applying patterns to our code..,

1. Fail-Fast2. Timeout3. Circuit Breaker4. Steady State5. Handshaking6. Bulkhead

Page 102: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

And that means understanding the role of semantics...

Page 103: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

And the role of distance & time...

Page 104: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

And constantly reminding ourselves of the challenge.

Page 105: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

That's a lot!

Page 106: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

The Best Software Architecture"The best software architecture 'knows' what

changes often and makes that easy."- Paul Clements

Page 107: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Let's continue the conversation...

Page 108: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Learning the Three Types of Microservices

Mike Amundsen@mamund

API Academy

SACon London 2018

Page 109: Learning the Three Types - amundsen.commamund.com/talks/2018-10-sacon/2018-10-sacon.pdf · Learning the Three Types of Microservices Mike Amundsen @mamund API Academy SACon London

Learning the Three Types of Microservices

Mike Amundsen@mamund

API Academy

SACon London 2018