SlideShare a Scribd company logo
Microservices
@Steve_Upton
What Microservices
actually look like
DevOps
“10+ Deploys Per Day: Dev and Ops
Cooperation at Flickr”
John Allspaw, Velocity 2009
“...a cross-disciplinary community of practice
dedicated to the study of building, evolving and
operating rapidly-changing resilient systems at
scale.”
Jez Humble
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Continuous Delivery
Configuration Management
Monitoring
Continuous Delivery
“If you have more meetings than releases, you’re
an enterprise company”
Clifton Cunningham, CTO @ TES Global
Containers
Containers
credit to Anne Currie
Bare Metal
Bare Metal
✔ Powerful
✔ Simple
Bare Metal
✔ Powerful
✔ Simple
❌ Brittle
❌ Inflexible
Bare Metal
✔ Powerful
✔ Simple
❌ Brittle
❌ Inflexible
Virtual Machines
Virtual Machines
✔ Flexible
✔ Networking
✔ Security
Virtual Machines
✔ Flexible
✔ Networking
✔ Security
❌ Overweight
Virtual Machines
✔ Flexible
✔ Networking
✔ Security
❌ Overweight
Virtual Machines
✔ Flexible
✔ Networking
✔ Security
❌ Overweight
Containers
Containers
✔ Lightweight
✔ Agile
Containers
✔ Lightweight
✔ Agile
❌ Untested
❌ Networking
❌ Security
Containers
✔ Lightweight
✔ Agile
❌ Untested
❌ Networking
❌ Security
Containers
✔ Lightweight
✔ Agile
❌ Untested
❌ Networking
❌ Security
DSR Microservices (Day 1, Part 2)
Exercise
Configuration Management
DSR Microservices (Day 1, Part 2)
Immutable Infrastructure
Don’t change, replace
Requires automation
Immutable Infrastructure
Don’t change, replace
Requires automation
Blue-Green
Docker Compose
Manage multi-container apps
Docker Compose
Manage multi-container apps
Collection of dockerfiles → services
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Is Docker production ready?
Is Docker production ready?
Is Docker production ready?
Not great at backwards compatibility…
Requires extra tooling
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
“Concurrent Production”
“The development contracts are being performed
concurrent with the production contracts”
2015 Lockheed Martin Annual Report
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Ideas
Ideas
Build
Ideas
Build
Product
Ideas
Measure
Build
Product
Ideas
Measure
Build
ProductData
Ideas
Measure
Build
ProductData
Learn
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Inter-service communication
Build Test
HTTP
Build Test
Email
Build Test
Email
Slack
Build Test
Email
Slack
Fireworks
Build Test
Email
Slack
Fireworks
Build Test
Email
Slack
Fireworks
DSR Microservices (Day 1, Part 2)
“Service Discovery
is an anti-pattern”
“Service Discovery
is an anti-pattern”
Richard Rodger, CTO @ nearForm
Messaging!
Build Test
Email
Slack
Fireworks
RabbitMQ
Build Test
publish
Email
Slack
Fireworks
RabbitMQ
Build Test
publish
Email
Slack
Fireworks
RabbitMQ
subscribe
Time To Live
mq.publish(msg, {ttl: 10});
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code != 200) {
if (getTime() - startTime < timeout) {
put(msg, startTime);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code == 404) {
// ???
} else if (response.code != 200) {
if (getTime() - startTime < timeout) {
put(msg, startTime);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code == 404) {
// ???
} else if (response.code == 429) {
// ???
} else if (response.code == 500) {
// ???
} else if (response.code != 200) {
if (getTime() - startTime < timeout) {
put(msg, startTime);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code == 404) {
// ???
} else if (response.code == 429) {
// ???
} else if (response.code == 500) {
// ???
} else if (response.code != 200) {
if (getTime() - startTime < timeout) {
timeSpent = getTime() - startTime;
delay = Math.pow(timeSpent, 2);
setTimeout(put(msg, startTime), delay);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code == 404) {
// ???
} else if (response.code == 429) {
// ???
} else if (response.code == 500) {
// ???
} else if (response.code != 200) {
if (getTime() - startTime < timeout) {
timeSpent = getTime() - startTime;
delay = Math.pow(timeSpent, 2);
remainingTime = timeout - timeSpent;
delay = Math.min(delay, remainingTime);
setTimeout(put(msg, startTime), delay);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
mq.publish(msg, {ttl: 10});
function put(msg, startTime) {
response = http.put(msg);
if (response.code == 404) {
// ???
} else if (response.code == 429) {
// ???
} else if (response.code == 500) {
// ???
} else if (response.code != 200) {
if (getTime() - startTime < timeout) {
timeSpent = getTime() - startTime;
fuzz = Math.floor(Math.random() * 10);
delay = Math.pow(timeSpent, 2) + fuzz;
remainingTime = timeout - timeSpent;
delay = Math.min(delay, remainingTime);
setTimeout(put(msg, startTime), delay);
}
}
}
startTime = getTime();
put(msg, startTime);
Time To Live
Quality of Service
// Best effort, fire and forget
mq.publish(unimportantMessage, {qos: 0});
// At least once delivery
mq.publish(idempotentMessage, {qos: 1});
// Exactly once delivery
mq.publish(importantMessage, {qos: 2});
Quality of Service
// Best effort, fire and forget
mq.publish(unimportantMessage, {qos: 0});
// At least once delivery
mq.publish(idempotentMessage, {qos: 1});
// Exactly once delivery
mq.publish(importantMessage, {qos: 2});
Quality of Service
// Best effort, fire and forget
mq.publish(unimportantMessage, {qos: 0});
// At least once delivery
mq.publish(idempotentMessage, {qos: 1});
// Exactly once delivery
mq.publish(importantMessage, {qos: 2});
Quality of Service
Concurrency
Concurrency
Upload text → Generate video → Post video
Concurrency
Fast Slow Fast
Upload text → Generate video → Post video
Concurrency
Fast Slow Fast
Upload text → Generate video → Post video
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Video generation
service
Video generation
service
Concurrency
Upload
service
Video generation
service
Posting
service
Text Video
Video generation
service
Video generation
service
LoadBalancer
Concurrency
publish
RabbitMQ
subscribe
Upload
service
Video generation
service
Video generation
service
Video generation
service
Concurrency
publish
RabbitMQ
subscribe
Upload
service
Video generation
service
Video generation
service
Video generation
service
Concurrency
publish
RabbitMQ
subscribe
Upload
service
Video generation
service
Video generation
service
Video generation
service
Concurrency
publish
RabbitMQ
subscribe
Upload
service
Video generation
service
Video generation
service
Video generation
service
Concurrency
publish
RabbitMQ
subscribe
Upload
service
Video generation
service
Video generation
service
Video generation
service
“Publish everything!”
Tom Livesey, Droplet
DSR Microservices (Day 1, Part 2)
Exercise
DSR Microservices (Day 1, Part 2)
Lots of data sources
Lots of data sources
Lots of data consumers
Lots of data sources
Lots of data consumers
Lots of integrations
LinkedIn before
LinkedIn before
O(n2
)
LinkedIn after
Up close
The log
Append only
Time ordered
Distributed logging
DSR Microservices (Day 1, Part 2)
add(20)
add(5)
subtract(10)
add(15)
add(20)
add(5)
subtract(10)
add(15)
add(20)
add(5)
subtract(10)
add(15)
?
add(20)
add(5)
subtract(10)
add(15)
“If two identical, deterministic processes begin in
the same state and get the same inputs in the
same order, they will produce the same output and
end in the same state.”
State Machine Replication Principle, Jay Kreps, LinkedIn
30
add(20)
add(5)
subtract(10)
add(15)
?
Log as source of Truth
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Initial
population
person born
person died
person born
person born
Initial
population
Population:
308,745,538
person born
person died
person born
person born
Initial
population
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
2 million writes s-1
(on 3 cheap machines)
10s of millions of writes s-1
(LinkedIn production)
2 million writes s-1
(on 3 cheap machines)
10s of millions of writes s-1
(LinkedIn production)
7 transactions s-1
(Bitcoin network)
Log as source of Truth
Event Sourcing
“We don’t care if our production system crashes.”
Valerii Vasylkov, William Hill
DSR Microservices (Day 1, Part 2)
Data science. Analytics
about the business
Full-fledged stream
processing framework
Microservice like. Core
business functions
Build an app that consumes
from Kafka directly
Data science. Analytics
about the business
Full-fledged stream
processing framework
Microservice like. Core
business functions
Build an app that consumes
from Kafka directly
Data science. Analytics
about the business
Full-fledged stream
processing framework
Microservice like. Core
business functions
Build an app that consumes
from Kafka directly
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Testing Microservices
Monolithic testing
Monolithic testing
App
Test
Monolithic testing
App
Test
Test data
Test data
Test data
Monolithic testing
App
Test
Test data
Test data
Test data
Output ✔
Output ✔
Output ✔
Monolithic testing
App
Test
Test data
Test data
Test data
Output ✔
Output ✖
Output ✔
Monolithic testing
App
Test
Test data
Test data
Test data
Output
✔
Output
✔
Output
✔
Output ✔
Output ✔
Output ✔
Monolithic testing
App
Test Production
App
Test data
Test data
Test data
Output ✔
Output ✔
Output ✔
Microservice testing
Test
Microservice
Microservice
Microservice
Microservice testing
Test
Microservice
Microservice
Microservice
Tests
Outputs
✔
Tests
Outputs
✔
Outputs
✔
Tests
Microservice testing
Production
Microservice
Microservice
Microservice
Microservice testing
Production
Microservice
Microservice
Microservice
Monitoring = Testing
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
Chaos Gorilla
Chaos Kong
Conformity Monkey
Security Monkey
Janitor Monkey
Latency Monkey
“Everything fails all the time”
Werner Vogels, VP + CTO @ Amazon
Design for Failure
Self healing systems
Debugging Microservices
DSR Microservices (Day 1, Part 2)
“How big should my Microservice be?”
Everyone
Domain Driven Design (DDD)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
DSR Microservices (Day 1, Part 2)
“Not all of a large system will
be well designed”
Eric Evans
“The first draft of anything is shit”
Ernest Hemingway
“... big enough to fit in your head”
Dan North
“Replaceable component architecture”
Dan North
Monolith first?
12factor.net
I. Codebase
One codebase tracked in revision control, many deploys
I. Codebase
One codebase tracked in revision control, many deploys
Always use version control!
I. Codebase
One codebase tracked in revision control, many deploys
Always use version control!
One app (microservice) per repo
I. Codebase
One codebase tracked in revision control, many deploys
Always use version control!
One app (microservice) per repo
Multiple deploys per app (local, dev, prod, etc.)
II. Dependencies
Explicitly declare and isolate dependencies
II. Dependencies
Explicitly declare and isolate dependencies
Never assume something is pre-installed
II. Dependencies
Explicitly declare and isolate dependencies
Never assume something is pre-installed
Package managers/repos make this easy! $ pip install -r requirements.txt
$ npm install
$ bundle install
II. Dependencies
Explicitly declare and isolate dependencies
Never assume something is pre-installed
Package managers/repos make this easy!
Isolate dependencies to prevent ‘leaking’
$ pip install -r requirements.txt
$ npm install
$ bundle install
II. Dependencies
Explicitly declare and isolate dependencies
Never assume something is pre-installed
Package managers/repos make this easy!
Isolate dependencies to prevent ‘leaking’
$ npm install
II. Dependencies
Explicitly declare and isolate dependencies
Never assume something is pre-installed
Package managers/repos make this easy!
Isolate dependencies to prevent ‘leaking’
(Aims to) prevent “it works on my machine”
$ npm install
III. Config
Store config in the environment
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
Store config in environment not codebase
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
Store config in environment not codebase
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
Store config in environment not codebase
Suggest environment vars, but other options...
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
Store config in environment not codebase
Suggest environment vars, but other options...
Supports multiple deploys from one codebase
III. Config
Store config in the environment
Config changes between deploys (dev, prod, etc.)
Store config in environment not codebase
Suggest environment vars, but other options...
Supports multiple deploys from one codebase
Makes Open Sourcing easier
IV. Backing services
Treat backing services as attached resources
IV. Backing services
Treat backing services as attached resources
Backing services are any remote services
IV. Backing services
Treat backing services as attached resources
Backing services are any remote services
Loosely coupled to a deploy
IV. Backing services
Treat backing services as attached resources
Backing services are any remote services
Loosely coupled to a deploy
Treated as local resources
IV. Backing services
Treat backing services as attached resources
Backing services are any remote services
Loosely coupled to a deploy
Treated as local resources
Allows easy swapping out of services
V. Build, release, run
Strictly separate build and run stages
V. Build, release, run
Strictly separate build and run stages
Build
V. Build, release, run
Strictly separate build and run stages
Build → Release
V. Build, release, run
Strictly separate build and run stages
Build → Release → Run
V. Build, release, run
Strictly separate build and run stages
Build → Release → Run
Strict separation between the stages
V. Build, release, run
Strictly separate build and run stages
Build → Release → Run
Strict separation between the stages
One way (no tweaking the live server!)
VI. Processes
Execute the app as one or more stateless processes
VI. Processes
Execute the app as one or more stateless processes
Apps run as processes (duh)
VI. Processes
Execute the app as one or more stateless processes
Apps run as processes (duh)
No state: every node is independent
VI. Processes
Execute the app as one or more stateless processes
Apps run as processes (duh)
No state: every node is independent
Caching is fine, but not for future use
VI. Processes
Execute the app as one or more stateless processes
Apps run as processes (duh)
No state: every node is independent
Caching is fine, but not for future use
State must be stored in backing services
VII. Port binding
Export services via port binding
VII. Port binding
Export services via port binding
Expose endpoints
http://localhost:5000/
test.mosquitto.org:1883
redis://redisbox:6379/0
VII. Port binding
Export services via port binding
Expose endpoints
No runtime injection or native APIs http://localhost:5000/
test.mosquitto.org:1883
redis://redisbox:6379/0
VII. Port binding
Export services via port binding
Expose endpoints
No runtime injection or native APIs
HTTP or other protocols make things easy
http://localhost:5000/
test.mosquitto.org:1883
redis://redisbox:6379/0
VIII. Concurrency
Scale out via the process model
VIII. Concurrency
Scale out via the process model
Processes are the unit of scaling
VIII. Concurrency
Scale out via the process model
Processes are the unit of scaling
Don’t daemonize!
VIII. Concurrency
Scale out via the process model
Processes are the unit of scaling
Don’t daemonize!
Take advantage of OS resource scaling
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
Can be started or stopped quickly (Cattle not pets)
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
Can be started or stopped quickly (Cattle not pets)
Quick startup allows easy scaling up
Graceful shutdown allows easy scaling down
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
Can be started or stopped quickly (Cattle not pets)
Quick startup allows easy scaling up
Graceful shutdown allows easy scaling down
Easier if you scale with independent processes...
X. Dev/prod parity
Keep development, staging, and production as similar as possible
X. Dev/prod parity
Keep development, staging, and production as similar as possible
Keep time between environment deploys low
X. Dev/prod parity
Keep development, staging, and production as similar as possible
Keep time between environment deploys low
Devs also handle deployment and maintenance (DevOps)
Keep tooling between environments as similar as possible
X. Dev/prod parity
Keep development, staging, and production as similar as possible
Keep time between environment deploys low
Devs also handle deployment and maintenance (DevOps)
Keep tooling between environments as similar as possible
If you can, try one environment...
XI. Logs
Treat logs as event streams
XI. Logs
Treat logs as event streams
Don’t mess around writing to files, just use stdout
XI. Logs
Treat logs as event streams
Don’t mess around writing to files, just use stdout
In dev, you can watch stdout
In production, it can be routed to other stores (Splunk etc.)
XI. Logs
Treat logs as event streams
Don’t mess around writing to files, just use stdout
In dev, you can watch stdout
In production, it can be routed to other stores (Splunk etc.)
Keeps aggregated logs time ordered (like Kafka)
XII. Admin processes
Run admin/management tasks as one-off processes
XII. Admin processes
Run admin/management tasks as one-off processes
One-off admin tasks (DB migrations etc.) should be run from production environment
XII. Admin processes
Run admin/management tasks as one-off processes
One-off admin tasks (DB migrations etc.) should be run from production environment
Don’t run scripts from local machine or directly on the DB
XII. Admin processes
Run admin/management tasks as one-off processes
One-off admin tasks (DB migrations etc.) should be run from production environment
Don’t run scripts from local machine or directly on the DB
Check in scripts to app repos to keep things in sync
One-off admin tasks (DB migrations etc.) should be run from production environment
Don’t run scripts from local machine or directly on the DB
Check in scripts to app repos to keep things in sync
ssh into production box and run the task
XII. Admin processes
Run admin/management tasks as one-off processes
XII. Admin processes
Run admin/management tasks as one-off processes
One-off admin tasks (DB migrations etc.) should be run from production environment
Don’t run scripts from local machine or directly on the DB
Check in scripts to app repos to keep things in sync
ssh into production box and run the task
...or don’t. Immutable Infrastructure!
1990 2000 2010 2015
Orderleadtime(log(ish))
< 1 sec
1 hour
1 week
6 months Data center
Virtual machines
Commercial
cloud (AWS)
Docker
FaaS
5 secs
PaaS
Microservices or distributed systems?
The future of
Microservices
DSR Microservices (Day 1, Part 2)
Hardware lead times
1990 2000 2010 2015
Orderleadtime(log(ish))
< 1 sec
1 hour
1 week
6 months Data center
Virtual machines
Commercial
cloud (AWS)
Docker
FaaS
5 secs
PaaS
Hardware lead times
1990 2000 2010 2015
Orderleadtime(log(ish))
< 1 sec
1 hour
1 week
6 months Data center
Virtual machines
Commercial
cloud (AWS)
Docker
FaaS
5 secs
PaaS
Amazon Lambda
Serverless
‘Serverless’ (not really)
Function as a Service (FaaS)
No persistence, no upkeep costs
200 ms startup time (Node.js)
What is the role of a manager?
Managers
Managers
Provide guidance
Managers
Provide guidance
Keep things ‘safe’
Managers
Provide guidance
Keep things ‘safe’
Organise the team
Managers
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Managers Microservices
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Managers Microservices
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Explore new tech
Managers Microservices
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Explore new tech
Experiment
Managers Microservices
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Explore new tech
Experiment
Enables self-organisation
Managers Microservices
Provide guidance
Keep things ‘safe’
Organise the team
Enable team to work
Explore new tech
Experiment
Enables self-organisation
Tech empowers team
DSR Microservices (Day 1, Part 2)
No managers (or other titles)
Programmers take responsibility
Expect/allow failure (remove fear)
Work directly with customers
Programmer Anarchy
Conclusion
Speed > efficiency
DevOps
Empower teams
Embrace the distributed world
Speed > efficiency
DevOps
Empower teams
Embrace the distributed world
Speed > efficiency
DevOps
Empower teams
Embrace the distributed world
Speed > efficiency
DevOps
Empower teams
Embrace the distributed world
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
“Microservices are hard. Some things you get for
free, but you have to work for the good stuff. If
you won’t put in the work, you shouldn’t be doing
Microservices. (You should be doing that stuff
anyway!)”
Steve Upton
Questions?
@Steve_Upton
steveupton.io
Essential reading
https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
https://plus.google.com/+RipRowan/posts/eVeouesvaVX
https://engineering.linkedin.com/distributed-systems/log-what-every-software-engi
neer-should-know-about-real-time-datas-unifying
http://martinfowler.com/articles/microservices.html
http://jonasboner.com/bla-bla-microservices-bla-bla/
https://www.youtube.com/watch?v=_EWUeZoyB0k
Good reading
http://highscalability.com/blog/2014/10/27/microservices-in-production-the-good-th
e-bad-the-it-works.html
http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
References
http://www.slideshare.net/BruceWong3/the-case-for-chaos
http://www.slideshare.net/fredgeorge
http://www.slideshare.net/dataloop/anne-currie-force12io-game-of-hosts-containers-vs-vms
https://www.nrdc.org/sites/default/files/data-center-efficiency-assessment-IB.pdf
https://martinjeeblog.com/2012/11/20/what-is-programmer-anarchy-and-does-it-have-a-future/
http://static.googleusercontent.com/media/research.google.com/en//people/jeff/Berkeley-Latency-
Mar2012.pdf
http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html
References cont.
http://www.ibm.com/developerworks/webservices/library/ar-esbpat1/
https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-885j-aircraft-systems-engineering-fall-
2005/
https://www.fogcreek.com/blog/eight-fallacies-of-distributed-computing-tech-talk/
http://www.ibiblio.org/harris/500milemail.html
http://www.lockheedmartin.com/content/dam/lockheed/data/corporate/documents/2015-Annual-Re
port.pdf
http://www.counterpunch.org/2013/03/04/when-money-is-no-object-the-strange-saga-of-the-f-35/
References cont.
https://www.youtube.com/watch?v=dxk8b9rSKOo
http://assets.en.oreilly.com/1/event/60/Velocity%20Culture%20Presentation.pdf
http://www.cubrid.org/blog/dev-platform/understanding-tcp-ip-network-stack/
https://www.oreilly.com/ideas/an-introduction-to-immutable-infrastructure
http://www.methodsandtools.com/archive/archive.php?id=97
Bad things
http://www.ibm.com/developerworks/webservices/library/ar-esbpat1/
http://www.networkworld.com/article/3114195/system-management/the-8-fallacies-of-distributed-co
mputing-are-becoming-irrelevant.html
Image credits
http://fontawesome.io/
https://github.com/thepracticaldev/orly-full-res
http://dimaip.github.io/slides/docker101.html
http://www.clipartlord.com/category/military-clip-art/bomb-clip-art/explosion-clip-art/
https://en.wikipedia.org/wiki/File:S-IC_engines_and_Von_Braun.jpg
http://www.nutsvolts.com/magazine/article/the_computer_that_took_man_to_the_moon
https://spaceflightnow.com/2014/11/05/engineers-recommend-changes-to-orion-heat-shield/
https://www.hq.nasa.gov/alsj/alsj-DrinkFood.html
Image credits cont.
https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19720013196.pdf

More Related Content

PDF
DSR Testing (Part 1)
PDF
DSR Testing (Part 2)
PDF
Need for Async: Hot pursuit for scalable applications
PDF
The Need for Async @ ScalaWorld
PDF
Distributed Consensus A.K.A. "What do we eat for lunch?"
PDF
Introduction of failsafe
PDF
We Are All Testers Now: The Testing Pyramid and Front-End Development
PDF
Reactive Programming with Rx
DSR Testing (Part 1)
DSR Testing (Part 2)
Need for Async: Hot pursuit for scalable applications
The Need for Async @ ScalaWorld
Distributed Consensus A.K.A. "What do we eat for lunch?"
Introduction of failsafe
We Are All Testers Now: The Testing Pyramid and Front-End Development
Reactive Programming with Rx

What's hot (20)

PDF
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
PDF
Voxxed Vienna 2015 Fault tolerant microservices
PPTX
Java 104
PPTX
Java 101
PDF
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
PDF
Resilience with Hystrix
PDF
State of Akka 2017 - The best is yet to come
PDF
Building Reactive Systems with Akka (in Java 8 or Scala)
PDF
The Cloud-natives are RESTless @ JavaOne
PDF
Be More Productive with Kotlin
PPTX
Legacy Code Kata v3.0
PDF
Not Only Streams for Akademia JLabs
PDF
Actor Model Akka Framework
PDF
The things we don't see – stories of Software, Scala and Akka
PDF
Leveraging Open Source for Database Development: Database Version Control wit...
PDF
Non-blocking Michael-Scott queue algorithm
PDF
Devoxx France: Fault tolerant microservices on the JVM with Cassandra
PDF
Coscup 2013 : Continuous Integration on top of hadoop
PPTX
Legacy Dependency Kata v2.0
PDF
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
Voxxed Vienna 2015 Fault tolerant microservices
Java 104
Java 101
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Resilience with Hystrix
State of Akka 2017 - The best is yet to come
Building Reactive Systems with Akka (in Java 8 or Scala)
The Cloud-natives are RESTless @ JavaOne
Be More Productive with Kotlin
Legacy Code Kata v3.0
Not Only Streams for Akademia JLabs
Actor Model Akka Framework
The things we don't see – stories of Software, Scala and Akka
Leveraging Open Source for Database Development: Database Version Control wit...
Non-blocking Michael-Scott queue algorithm
Devoxx France: Fault tolerant microservices on the JVM with Cassandra
Coscup 2013 : Continuous Integration on top of hadoop
Legacy Dependency Kata v2.0
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Ad

Viewers also liked (20)

PDF
Understanding Microservices
PPTX
Melbourne Microservices Meetup: Agenda for a new Architecture
PPT
A csodák logikája
PDF
Delivering with Microservices - How to Iterate Towards Sophistication
PDF
Building microservices web application using scala & akka
PDF
Growing a microservices landscape (with smart use cases)
PDF
Microservice Architecture
PDF
Microservice Websites (microXchg 2017)
PDF
Akka Persistence and Eventuate
PPTX
vert.x - asynchronous event-driven web applications on the JVM
PDF
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
PDF
Securing Microservices using Play and Akka HTTP
PPTX
Micro Service Architecture
PDF
Akka in Practice: Designing Actor-based Applications
PDF
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
ODP
Akka Finite State Machine
PDF
The promises and perils of microservices
PDF
Akka in Production - ScalaDays 2015
PDF
Better Software—Faster: Ten Best Practices from Sequoia's Microservices Summit
PDF
The Progression of APIs and Microservices - Photon Infotech
Understanding Microservices
Melbourne Microservices Meetup: Agenda for a new Architecture
A csodák logikája
Delivering with Microservices - How to Iterate Towards Sophistication
Building microservices web application using scala & akka
Growing a microservices landscape (with smart use cases)
Microservice Architecture
Microservice Websites (microXchg 2017)
Akka Persistence and Eventuate
vert.x - asynchronous event-driven web applications on the JVM
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Securing Microservices using Play and Akka HTTP
Micro Service Architecture
Akka in Practice: Designing Actor-based Applications
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Akka Finite State Machine
The promises and perils of microservices
Akka in Production - ScalaDays 2015
Better Software—Faster: Ten Best Practices from Sequoia's Microservices Summit
The Progression of APIs and Microservices - Photon Infotech
Ad

Similar to DSR Microservices (Day 1, Part 2) (20)

PPTX
Clean Code Development
PPTX
Good code
PPTX
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
PDF
Mutation @ Spotify
PDF
Adopting F# at SBTech
PDF
Presto anatomy
PDF
Architectural Tradeoff in Learning-Based Software
PPTX
Where the wild things are - Benchmarking and Micro-Optimisations
PDF
[245] presto 내부구조 파헤치기
PDF
Intro to Machine Learning with TF- workshop
PPTX
Hazelcast and MongoDB at Cloud CMS
PPTX
Imagine a world without mocks
PDF
Akka with Scala
PDF
Secure .NET programming
PDF
Priming Java for Speed at Market Open
PPTX
Async await
PPTX
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
PDF
What can be done with Java, but should better be done with Erlang (@pavlobaron)
PPTX
Metaprogramming with JavaScript
PDF
Mutation Testing: Start Hunting The Bugs
Clean Code Development
Good code
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Mutation @ Spotify
Adopting F# at SBTech
Presto anatomy
Architectural Tradeoff in Learning-Based Software
Where the wild things are - Benchmarking and Micro-Optimisations
[245] presto 내부구조 파헤치기
Intro to Machine Learning with TF- workshop
Hazelcast and MongoDB at Cloud CMS
Imagine a world without mocks
Akka with Scala
Secure .NET programming
Priming Java for Speed at Market Open
Async await
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Metaprogramming with JavaScript
Mutation Testing: Start Hunting The Bugs

More from Steve Upton (8)

PDF
The histories of microservices
PDF
DSR Microservices (Day 2)
PDF
DSR Microservices (Day 1, Part 1)
PDF
Computers of Apollo
PDF
DSR microservices
ODP
Inter-service communication
PDF
Agile101
PDF
Mq light in microservices
The histories of microservices
DSR Microservices (Day 2)
DSR Microservices (Day 1, Part 1)
Computers of Apollo
DSR microservices
Inter-service communication
Agile101
Mq light in microservices

Recently uploaded (20)

PPTX
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
PDF
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
PDF
PPT on Performance Review to get promotions
PPTX
additive manufacturing of ss316l using mig welding
PDF
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PPTX
web development for engineering and engineering
PPTX
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
PDF
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
PPTX
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
PDF
R24 SURVEYING LAB MANUAL for civil enggi
PPTX
UNIT 4 Total Quality Management .pptx
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
PPTX
Internet of Things (IOT) - A guide to understanding
DOCX
573137875-Attendance-Management-System-original
PPT
CRASH COURSE IN ALTERNATIVE PLUMBING CLASS
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
PPTX
Foundation to blockchain - A guide to Blockchain Tech
PDF
Digital Logic Computer Design lecture notes
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
PPT on Performance Review to get promotions
additive manufacturing of ss316l using mig welding
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
web development for engineering and engineering
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
R24 SURVEYING LAB MANUAL for civil enggi
UNIT 4 Total Quality Management .pptx
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
Internet of Things (IOT) - A guide to understanding
573137875-Attendance-Management-System-original
CRASH COURSE IN ALTERNATIVE PLUMBING CLASS
Model Code of Practice - Construction Work - 21102022 .pdf
Foundation to blockchain - A guide to Blockchain Tech
Digital Logic Computer Design lecture notes
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx

DSR Microservices (Day 1, Part 2)