from mainframe to microservice: an introduction to distributed systems

69
From Mainframe to Microservice An Introduction to Distributed Systems @tyler_treat Workiva

Upload: tyler-treat

Post on 20-Aug-2015

18.592 views

Category:

Software


0 download

TRANSCRIPT

Page 1: From Mainframe to Microservice: An Introduction to Distributed Systems

From Mainframe to Microservice

An Introduction to Distributed Systems

@tyler_treat Workiva

Page 2: From Mainframe to Microservice: An Introduction to Distributed Systems

An Introduction to Distributed Systems❖ Building a foundation of understanding

❖ Why distributed systems?

❖ Universal fallacies

❖ Characteristics and the CAP theorem

❖ Common pitfalls

❖ Digging deeper

❖ Byzantine Generals Problem and consensus

❖ Split-brain

❖ Hybrid consistency models

❖ Scaling shared data and CRDTs

Page 3: From Mainframe to Microservice: An Introduction to Distributed Systems

–Leslie Lamport

“A distributed system is one in which the failure of a computer you didn't even know existed can

render your own computer unusable.”

Page 4: From Mainframe to Microservice: An Introduction to Distributed Systems

Scale Up vs. Scale Out

❖ Add resources to a node ❖ Increases node capacity, load

is unaffected ❖ System complexity unaffected

Vertical Scaling❖ Add nodes to a cluster ❖ Decreases load, capacity is

unaffected ❖ Availability and throughput w/

increased complexity

Horizontal Scaling

Page 5: From Mainframe to Microservice: An Introduction to Distributed Systems

A distributed system is a collection of independent computers that behave as a single coherent system.

Page 6: From Mainframe to Microservice: An Introduction to Distributed Systems

Why Distributed Systems?

Availability

Fault Tolerance

Throughput

Architecture

Economics

serve every request

resilient to failures

parallel computation

decoupled, focused services

scale-out becoming manageable/cost-effective

Page 7: From Mainframe to Microservice: An Introduction to Distributed Systems

oh shit…

Page 8: From Mainframe to Microservice: An Introduction to Distributed Systems

–Ken Arnold

“You have to design distributed systems with the

expectation of failure.”

Page 9: From Mainframe to Microservice: An Introduction to Distributed Systems

Distributed systems engineers are the world’s biggest pessimists.

Page 10: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #1The network is reliable.

❖ Message delivery is never guaranteed ❖ Best effort ❖ Is it worth it? ❖ Resiliency/redundancy/failover

Page 11: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #2Latency is zero.

❖ We cannot defy the laws of physics ❖ LAN to WAN deteriorates quickly ❖ Minimize network calls (batch) ❖ Design asynchronous systems

Page 12: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #3Bandwidth is infinite.

❖ Out of our control ❖ Limit message sizes ❖ Use message queueing

Page 13: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #4The network is secure.

❖ Everyone is out to get you ❖ Build in security from day 1 ❖ Multi-layered ❖ Encrypt, pentest, train developers

Page 14: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #5Topology doesn’t change.

❖ Network topology is dynamic ❖ Don’t statically address hosts ❖ Collection of services, not nodes ❖ Service discovery

Page 15: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #6There is one administrator.

❖ May integrate with third-party systems ❖ “Is it our problem or theirs?” ❖ Conflicting policies/priorities ❖ Third parties constrain; weigh the risk

Page 16: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #7Transport cost is zero.

❖ Monetary and practical costs ❖ Building/maintaining a network is not

trivial ❖ The “perfect” system might be too costly

Page 17: From Mainframe to Microservice: An Introduction to Distributed Systems

Universal Fallacy #8The network is homogenous.

❖ Networks are almost never homogenous ❖ Third-party integration? ❖ Consider interoperability ❖ Avoid proprietary protocols

Page 18: From Mainframe to Microservice: An Introduction to Distributed Systems

These problems apply to LAN and WAN systems (single-data-center and cross-data-center)

No one is safe.

Page 19: From Mainframe to Microservice: An Introduction to Distributed Systems

–Murphy’s Law

“Anything that can go wrong will go wrong.”

Page 20: From Mainframe to Microservice: An Introduction to Distributed Systems
Page 21: From Mainframe to Microservice: An Introduction to Distributed Systems

Characteristics of a Reliable Distributed System

Fault-tolerant

Available

Scalable

Consistent

Secure

Performant

nodes can fail

serve all the requests, all the time

behave correctly with changing topologies

state is coordinated across nodes

access is authenticated

it’s fast!

Page 22: From Mainframe to Microservice: An Introduction to Distributed Systems
Page 23: From Mainframe to Microservice: An Introduction to Distributed Systems

Distributed systems are all about trade-offs.

Page 24: From Mainframe to Microservice: An Introduction to Distributed Systems

CAP Theorem

❖ Presented in 1998 by Eric Brewer

❖ Impossible to guarantee all three:

❖ Consistency

❖ Availability

❖ Partition tolerance

Page 25: From Mainframe to Microservice: An Introduction to Distributed Systems

Consistency

Page 26: From Mainframe to Microservice: An Introduction to Distributed Systems

Consistency❖ Linearizable - there exists a total order of all state

updates and each update appears atomic

❖ E.g. mutexes make operations appear atomic

❖ When operations are linearizable, we can assign a unique “timestamp” to each one (total order)

❖ A system is consistent if every node shares the same total order

❖ Consistency which is both global and instantaneous is impossible

Page 27: From Mainframe to Microservice: An Introduction to Distributed Systems

Consistency

Eventual consistencyreplicas allowed to diverge, eventually converge

Strong consistencyreplicas can’t diverge; requires linearizability

Page 28: From Mainframe to Microservice: An Introduction to Distributed Systems

Availability

❖ Every request received by a non-failing node must be served

❖ If a piece of data required for a request is unavailable, the system is unavailable

❖ 100% availability is a myth

Page 29: From Mainframe to Microservice: An Introduction to Distributed Systems

Partition Tolerance

❖ A partition is a split in the network—many causes

❖ Partition tolerance means partitions can happen

❖ CA is easy when your network is perfectly reliable

❖ Your network is not perfectly reliable

Page 30: From Mainframe to Microservice: An Introduction to Distributed Systems

Partition Tolerance

Page 31: From Mainframe to Microservice: An Introduction to Distributed Systems

Common Pitfalls

❖ Halting failure - machine stops

❖ Network failure - network connection breaks

❖ Omission failure - messages are lost

❖ Timing failure - clock skew

❖ Byzantine failure - arbitrary failure

Page 32: From Mainframe to Microservice: An Introduction to Distributed Systems

Exploring some higher-level concepts

Digging Deeper

Page 33: From Mainframe to Microservice: An Introduction to Distributed Systems

Byzantine Generals Problem

❖ Consider a city under siege by two allied armies

❖ Each army has a general

❖ One general is the leader

❖ Armies must agree when to attack

❖ Must use messengers to communicate

❖ Messengers can be captured by defenders

Page 34: From Mainframe to Microservice: An Introduction to Distributed Systems

Byzantine Generals Problem

Page 35: From Mainframe to Microservice: An Introduction to Distributed Systems

Byzantine Generals Problem

❖ Send 100 messages, attack no matter what

❖ A might attack without B

❖ Send 100 messages, wait for acks, attack if confident

❖ B might attack without A

❖ Messages have overhead

❖ Can’t reliably make decision (provenly impossible)

Page 36: From Mainframe to Microservice: An Introduction to Distributed Systems

Distributed Consensus

❖ Replace 2 generals with N generals

❖ Nodes must agree on data value

❖ Solutions:

❖ Multi-phase commit

❖ State replication

Page 37: From Mainframe to Microservice: An Introduction to Distributed Systems

Two-Phase Commit

❖ Blocking protocol

❖ Coordinator waits for cohorts

❖ Cohorts wait for commit/rollback

❖ Can deadlock

Page 38: From Mainframe to Microservice: An Introduction to Distributed Systems

Three-Phase Commit

❖ Non-blocking protocol

❖ Abort on timeouts

❖ Susceptible to network partitions

Page 39: From Mainframe to Microservice: An Introduction to Distributed Systems

State Replication

❖ E.g. Paxos, Raft protocols

❖ Elect a leader (coordinator)

❖ All changes go through leader

❖ Each change appends log entry

❖ Each node has log replica

Page 40: From Mainframe to Microservice: An Introduction to Distributed Systems

State Replication

❖ Must have quorum (majority) to proceed

❖ Commit once quorum acks

❖ Quorums mitigate partitions

❖ Logs allow state to be rebuilt

Page 41: From Mainframe to Microservice: An Introduction to Distributed Systems

Split-Brain

Page 42: From Mainframe to Microservice: An Introduction to Distributed Systems

Split-Brain

Page 43: From Mainframe to Microservice: An Introduction to Distributed Systems

Split-Brain

Page 44: From Mainframe to Microservice: An Introduction to Distributed Systems

Split-Brain

❖ Optimistic (AP) - let partitions work as usual

❖ Pessimistic (CP) - quorum partition works, fence others

Page 45: From Mainframe to Microservice: An Introduction to Distributed Systems

Hybrid Consistency Models❖ Weak == available, low latency, stale reads

❖ Strong == fresh reads, less available, high latency

❖ How do you choose a consistency model?

❖ Hybrid models

❖ Weaker models when possible (likes, followers, votes)

❖ Stronger models when necessary

❖ Tunable consistency models (Cassandra, Riak, etc.)

Page 46: From Mainframe to Microservice: An Introduction to Distributed Systems

Scaling Shared Data❖ Sharing mutable data at large scale is difficult

❖ Solutions:

❖ Immutable data

❖ Last write wins

❖ Application-level conflict resolution

❖ Causal ordering (e.g. vector clocks)

❖ Distributed data types (CRDTs)

Page 47: From Mainframe to Microservice: An Introduction to Distributed Systems

Scaling Shared Data

Imagine a shared, global counter…

“Get, add 1, and put” transaction will not scale

Page 48: From Mainframe to Microservice: An Introduction to Distributed Systems

CRDT

❖ Conflict-free Replicated Data Type

❖ Convergent: state-based

❖ Commutative: operations-based

❖ E.g. distributed sets, lists, maps, counters

❖ Update concurrently w/o writer coordination

Page 49: From Mainframe to Microservice: An Introduction to Distributed Systems

CRDT❖ CRDTs always converge (provably)

❖ Operations commute (order doesn’t matter)

❖ Highly available, eventually consistent

❖ Always reach consistent state

❖ Drawbacks:

❖ Requires knowledge of all clients

❖ Must be associative, commutative, and idempotent

Page 50: From Mainframe to Microservice: An Introduction to Distributed Systems

G-Counter

Page 51: From Mainframe to Microservice: An Introduction to Distributed Systems

CRDT

❖ Add to set is associative, commutative, idempotent ❖ add(“a”), add(“b”), add(“a”) => {“a”, “b”}

❖ Adding and removing items is not ❖ add(“a”), remove(“a”) => {}

❖ remove(“a”), add(“a”) => {“a”}

❖ CRDTs require interpretation of common data structures w/ limitations

Page 52: From Mainframe to Microservice: An Introduction to Distributed Systems

Two-Phase Set❖ Use two sets, one for adding, one for removing

❖ Elements can be added once and removed once

❖ { “a”: [“a”, “b”, “c”], “r”: [“a”]}

❖ => {“b”, “c”}

❖ add(“a”), remove(“a”) => {“a”: [“a”], “r”: [“a”]}

❖ remove(“a”), add(“a”) => {“a”: [“a”], “r”: [“a”]}

Page 53: From Mainframe to Microservice: An Introduction to Distributed Systems
Page 54: From Mainframe to Microservice: An Introduction to Distributed Systems

Let’s Recap...

Page 55: From Mainframe to Microservice: An Introduction to Distributed Systems

Distributed architectures allow us to build highly available, fault-tolerant systems.

Page 56: From Mainframe to Microservice: An Introduction to Distributed Systems

We can't live in this fantasy land where everything works perfectly

all of the time.

Page 57: From Mainframe to Microservice: An Introduction to Distributed Systems
Page 58: From Mainframe to Microservice: An Introduction to Distributed Systems
Page 59: From Mainframe to Microservice: An Introduction to Distributed Systems

Shit happens — network partitions, hardware failure, GC pauses, latency, dropped packets…

Page 60: From Mainframe to Microservice: An Introduction to Distributed Systems

Build resilient systems.

Page 61: From Mainframe to Microservice: An Introduction to Distributed Systems

Design for failure.

Page 62: From Mainframe to Microservice: An Introduction to Distributed Systems

kill -9

Page 63: From Mainframe to Microservice: An Introduction to Distributed Systems

Consider the trade-off between consistency and availability.

Page 64: From Mainframe to Microservice: An Introduction to Distributed Systems

Partition tolerance is not an option, it’s required.

(if you’re building a distributed system)

Page 65: From Mainframe to Microservice: An Introduction to Distributed Systems

Use weak consistency when possible, strong when necessary.

Page 66: From Mainframe to Microservice: An Introduction to Distributed Systems

Sharing data at scale is hard, let’s go shopping.

(or consider your options)

Page 67: From Mainframe to Microservice: An Introduction to Distributed Systems

State is hell.

Page 68: From Mainframe to Microservice: An Introduction to Distributed Systems

Further Readings❖ Jepsen series

Kyle Kingsbury (aphyr)

❖ A Comprehensive Study of Convergent and Commutative Replicated Data TypesShapiro et al.

❖ In Search of an Understandable Consensus Algorithm Ongaro et al.

❖ CAP Twelve Years Later Eric Brewer

❖ Many, many more…

Page 69: From Mainframe to Microservice: An Introduction to Distributed Systems

@tyler_treat github.com/tylertreatbravenewgeek.com

Thanks!