12-factor
microservices
@ONSdigital ONSdigital
Software Engineer Community of Practice
29th November 2016
Slide 2
Slide 2 text
Hi, I’m Ian
@iankent ian-kent
Slide 3
Slide 3 text
12-factor microservices
• What is 12-factor?
• What are microservices?
• What are distributed systems?
• What is event driven architecture?
Slide 4
Slide 4 text
The twelve factors
Slide 5
Slide 5 text
The twelve factors
• Portability between environments
• Suitable for modern platforms
• Supports continuous deployment
• Can scale without significant changes
Why use 12-factor?
Slide 6
Slide 6 text
The twelve factors
• Codebase
• Dependencies
• Config
• Backing services
• Build, release, run
• Processes
• Port binding
• Concurrency
• Disposability
• Dev/prod parity
• Logs
• Admin processes
More info
https://12factor.net
Slide 7
Slide 7 text
Any questions?
The twelve factors
Slide 8
Slide 8 text
A baby names API
Slide 9
Slide 9 text
A baby names API
What does it do?
• One endpoint: GET /top10
• Simple JSON response:
Slide 10
Slide 10 text
A baby names API
Slide 11
Slide 11 text
A baby names API
Slide 12
Slide 12 text
Microservices
Slide 13
Slide 13 text
Microservices
Microservice myths
• Can be rewritten in two weeks
• Less than 50 lines of code
• More difficult to design
• More difficult to build and deploy
Slide 14
Slide 14 text
Microservices
What is a microservice?
• Single responsibility
• Bounded context
• Well defined interfaces
• Composable
Microservices
What are the challenges?
• Interfaces
• Distributed systems
• Complex architecture
• Build and deployment
Slide 17
Slide 17 text
Any questions?
Microservices
Slide 18
Slide 18 text
Distributed systems
Slide 19
Slide 19 text
Distributed systems
What are they?
• Spread across physical servers,
datacentre’s and continents
• Coordinate by passing messages
• Fail often, in unexpected ways
• Suffers from CAP theorem
Slide 20
Slide 20 text
Distributed systems
The fallacies
• The network is reliable
• Bandwidth is infinite
• Topology doesn't
change
• Transport cost is zero
• Latency is zero
• The network is secure
• There is one
administrator
• The network is
homogeneous
Slide 21
Slide 21 text
Any questions?
Distributed systems
Slide 22
Slide 22 text
A baby names API
Slide 23
Slide 23 text
A baby names API
Slide 24
Slide 24 text
A baby names API
New requirement
Registrars can provide
data electronically
Slide 25
Slide 25 text
A baby names API
What does it do?
• One endpoint: POST /baby
• Simple JSON input:
Slide 26
Slide 26 text
A baby names API
Slide 27
Slide 27 text
A baby names API
So why not?
• Complexity
• Security
• Scaling
• Risk
Slide 28
Slide 28 text
A baby names API
Slide 29
Slide 29 text
Event driven architecture
Slide 30
Slide 30 text
Event driven architecture
What is it?
• Asynchronous
• Fault tolerant
• Scalable
• Resilient under load
Slide 31
Slide 31 text
Any questions?
Event driven architecture
Slide 32
Slide 32 text
A baby names API
Slide 33
Slide 33 text
A baby names API
Slide 34
Slide 34 text
A baby names API
New requirement
Provide a real-time
stream of baby names
Slide 35
Slide 35 text
A baby names API
What does it do?
• One endpoint: GET /stream
• Simple JSON output stream:
Slide 36
Slide 36 text
A baby names API
Slide 37
Slide 37 text
A baby names API
So why not?
• ~2k new babies per day
• Atomic database updates
• Top 10 changes infrequently
• How does streaming work?
Slide 38
Slide 38 text
A baby names API
Baby name events
• New baby registration
• Send to streaming API users
• Update database
• Has top 10 changed?
• Notify output API
Slide 39
Slide 39 text
A baby names API
Slide 40
Slide 40 text
TL;DR
Slide 41
Slide 41 text
12-factor microservices
• What is 12-factor?
• What are microservices?
• What are distributed systems?
• What is event driven architecture?