SlideShare uma empresa Scribd logo
1 de 275
Baixar para ler offline
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
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
Exercise
Configuration Management
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
“Concurrent Production”
“The development contracts are being performed
concurrent with the production contracts”
2015 Lockheed Martin Annual Report
Ideas
Ideas
Build
Ideas
Build
Product
Ideas
Measure
Build
Product
Ideas
Measure
Build
ProductData
Ideas
Measure
Build
ProductData
Learn
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
“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
Exercise
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
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
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
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
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
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
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
“How big should my Microservice be?”
Everyone
Domain Driven Design (DDD)
“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
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
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

Mais conteúdo relacionado

Mais procurados

Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Victoria Schiffer
 

Mais procurados (20)

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

Destaque

Micro Service Architecture
Micro Service ArchitectureMicro Service Architecture
Micro Service Architecture
Eduards Sizovs
 
Akka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based ApplicationsAkka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based Applications
NLJUG
 
The promises and perils of microservices
The promises and perils of microservicesThe promises and perils of microservices
The promises and perils of microservices
Uwe Friedrichsen
 

Destaque (20)

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

Semelhante a DSR Microservices (Day 1, Part 2)

Secure .NET programming
Secure .NET programmingSecure .NET programming
Secure .NET programming
Ante Gulam
 

Semelhante a DSR Microservices (Day 1, Part 2) (20)

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

Mais de Steve Upton (8)

The histories of microservices
The histories of microservicesThe histories of microservices
The histories of microservices
 
DSR Microservices (Day 2)
DSR Microservices (Day 2)DSR Microservices (Day 2)
DSR Microservices (Day 2)
 
DSR Microservices (Day 1, Part 1)
DSR Microservices (Day 1, Part 1)DSR Microservices (Day 1, Part 1)
DSR Microservices (Day 1, Part 1)
 
Computers of Apollo
Computers of ApolloComputers of Apollo
Computers of Apollo
 
DSR microservices
DSR microservicesDSR microservices
DSR microservices
 
Inter-service communication
Inter-service communicationInter-service communication
Inter-service communication
 
Agile101
Agile101Agile101
Agile101
 
Mq light in microservices
Mq light in microservicesMq light in microservices
Mq light in microservices
 

Último

Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Christo Ananth
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ssuser89054b
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
ankushspencer015
 

Último (20)

Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
Vivazz, Mieres Social Housing Design Spain
Vivazz, Mieres Social Housing Design SpainVivazz, Mieres Social Housing Design Spain
Vivazz, Mieres Social Housing Design Spain
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
Double rodded leveling 1 pdf activity 01
Double rodded leveling 1 pdf activity 01Double rodded leveling 1 pdf activity 01
Double rodded leveling 1 pdf activity 01
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 

DSR Microservices (Day 1, Part 2)