SlideShare a Scribd company logo
1 of 618
Download to read offline
Microservices
ThoughtWorks
James Lewis
@boicy
jalewis@thoughtworks.com
Schedule
• 09:00 - 10:20 Session 1
• 10:20 - 10:35 Break
• 10:35 - 12:00 Session 2
• 12:00 - 13:00 Lunch
• 13:00 - 14:20 Session 3
• 14:20 - 14:35 Break
• 14:35 - 16:00 Session 4
09:00 - 10:20 Session 1
• Introduction
• Why Services
• Principles & Constraints
• Evolutionary Architecture
10:35 - 12:00 Session 2
• Integration
13:00 - 14:20 Session 3
• Splitting Services
• CAP
• Testing & CDCs
• Operational Concerns
14:35 - 16:00 Session 4
• Deployment
• Conway’s Law
• Conclusions
http://www.flickr.com/photos/55255903@N07/6835060992
http://www.flickr.com/photos/22154104@N00/3466383400
Why Services?
or: are we building systems that are too big?
90% of the TCO of an application is incurred post launch
IT project­related losses are an embarrassment for the industry fund backers – Australian​Super, Cbus, HOSTPLUS, HESTA and MTAA Super –
which pride themselves on low fees and improving member services.  Illustration: Karl Hilzinger
A group of industry superannuation funds has revealed in accounts lodged with the Australian Securities and
Investments Commission that the cost of implementing a key IT project has blown out by another $43 million.
This means that a project that started in 2008 and was meant to be completed by 2010 will cost super fund members at
least $250 million and will be delivered at least four years late.
Superpartners, a super administration company owned by five industry retirement schemes, posted a $7.4 million loss
on revenues of $257 million for the 12 months ended June 30, after being forced to take a $20.4 million impairment
Superpartners’ botched IT project costs industry
super funds millions
Published 26 November 2013 01:17, Updated 27 November 2013 07:46
Sally Patten
we have to rewrite entire ecosystems every few years
we have to rewrite entire ecosystems every few years
this doesn’t make many CFO’s happy
real life 1
Retail
Site
Departure
Control
Retail
Site
Departure
Control
Retail
Site
Departure
Control
Retail
Site
Departure
Control
48 Cores
256 GB RAM (NUMA)
~ $1 x 106 per machine
21
Airline
Tightly coupled
“Golden Hammer Syndrome”
Single point of failure
Expensive to scale
High operational cost
High cost of failure
23
Airline
Retail
Site
Departure
Control
Airline
Retail
Site
Departure
Control
Airline
Retail
Site
Departure
Control
Airline
Retail
Site
Departure
Control
X
We can organise services along organisational boundaries
We can organise services along organisational boundaries
V1
By sub-divinding our systems, we can speed the release of new features
V2
By sub-divinding our systems, we can speed the release of new features
It allows us different options in terms of scaling
It allows us different options in terms of scaling
Go
JVM
NodeJS
Ruby
Go
JVM
NodeJS
Ruby
and we can use different tools and tech
Go
NodeJS
Ruby
Clojure!
and we can use different tools and tech
Why now?
standing on the
shoulders of giants
Engineering for:
reliability and availability
Devops
circuit breakers, health checks,
status pages
Strategic Design
Bounded Contexts
“town planning”
web integration
application protocols
HATEOAS
infrastructure
automation
patterns for push
button deployments
the lean software
value stream
Summary
We understand more about building reliable distributed systems
cloud compute and programmable infrastructure has matured
organisations need to adapt and change quickly to survive
we spend too much money on building monoliths
plus…
it’s cool
Evolutionary
Architecture
“Just enough
architecture”
45
building software
is not like building a house
46
its much more like how towns evolve
47
evolutionary architecture
is in the gaps
48
emergent design is within
the zones
49
ALLOW BUSINESS CAPABILITIES TO EVOLVE
HAVE A ROUGH IDEA ABOUT WHAT YOU WANT TO BUILD,
AND DEFER DECISIONS UNTIL YOU KNOW MORE
Summary
do just enough up front
evolutionary architecture is in the gaps
emergent design is in the boxes
Bounded Contexts
What makes a good
service?
High Cohesion
Loose Coupling
The Trifle
The Trifle
Musik Web
The Trifle
Musik Web
Persistence
The Trifle
Musik Web
Persistence
The Trifle
Musik Web
Persistence
The Trifle
Musik Web
Persistence
Bounded Context
"The delimited applicability of a
particular model. BOUNDING
CONTEXTS gives team members a
clear and shared understanding of what
has to be consistent and what can
develop independently."
A specific responsibility
enforced by explicit
boundaries
http://www.sapiensworks.com/blog/post/
2012/04/17/DDD-The-Bounded-Context-
Explained.aspx
Add to cart
Add to cart
Checkout
Add to cart
Checkout
View Latest
Releases
Add to cart
Checkout
View Latest
Releases
Search
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Shopping Cart Catalog
Music Library
Hexagonal Architectures
66
bounded contexts all the way down (and back up
again)
Object
Object
Object
Object
Object
James’ conjecture
“objects should be no bigger than my head”
Object
Object
Object
Object
Object
as we chunk up domains of abstraction, each
domain should be small enough to fit in my head
Architecture Principles
you want to maximise the degrees of
freedom of your system
to build systems is to make trade-offs
to build systems is to make trade-offs
throughput vs cost
to build systems is to make trade-offs
throughput vs cost
to build systems is to make trade-offs
throughput vs cost
portability vs deployability
to build systems is to make trade-offs
throughput vs cost
portability vs deployability
to build systems is to make trade-offs
throughput vs cost
portability vs deployability
replacability vs maintainability
to build systems is to make trade-offs
throughput vs cost
portability vs deployability
replacability vs maintainability
evolutionary architecture and emergent design are
approaches that maximise flex
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
They should move you towards a state where the tradeoffs don’t
happen so often or have such large impact
The idea of architecture principles is to try
and balance these tradeoffs
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
They should move you towards a state where the tradeoffs don’t
happen so often or have such large impact
The idea of architecture principles is to try
and balance these tradeoffs
They should be driven by the goals of the business
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
They should move you towards a state where the tradeoffs don’t
happen so often or have such large impact
The idea of architecture principles is to try
and balance these tradeoffs
They should be driven by the goals of the business
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
They should move you towards a state where the tradeoffs don’t
happen so often or have such large impact
The idea of architecture principles is to try
and balance these tradeoffs
They should be driven by the goals of the business
for the next 18-24 months
to try and balance short term gain with longer term strategic goals
Where trade offs have to be made they should be done so
visibility and consciously
They should move you towards a state where the tradeoffs don’t
happen so often or have such large impact
The idea of architecture principles is to try
and balance these tradeoffs
They should be driven by the goals of the business
for the next 18-24 months
any longer and, well, holographic watches
http://www.12factor.net/
Heroku’s 12 factors are a mixture of principles and
constraints
http://www.12factor.net/
Integration
or…
Avoiding Babel
Two Key Attributes Of A
Good Service
1. High Cohesion
2. Loose Coupling
1. High Cohesion
2. Loose Coupling
© 2013 Electronic Arts Inc.
Otherwise…
http://www.flickr.com/photos/mikecogh/4472054494/
An Evolutionary View
Data Oriented
Procedure
Oriented
Document
Oriented
Resource
Oriented
Databases
DB
MusikShopMono
DB Schema
Recomendation
Service
MusicShopMono
DB Schema
Recomendation
ServiceMusicShopMono
DB Schema
Recomendation
ServiceMusicShopMono
DB Schema
Recomendation
ServiceMusicShopMono
No loose coupling!
DB Schema
Recomendation
Service
MusicShopMono
DB Schema
Magic ETL
which is ok until...
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
External
Data
Read only
data
Read only
data
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
which is ok until...
and yes, this is a real world example...
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
External
Data
Read only
data
Read only
data
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
changing anything is really really hard
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
different types of data are smeared about
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
systems like this are brittle
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
systems like this are brittle
difficult to reason aboutHR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
systems like this are brittle
difficult to reason about
difficult to change
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
systems like this are brittle
difficult to reason about
difficult to change
difficult to maintain
HR
UI
"Middleware DB"
? ? ?
Data Warehouse
?
canned reports cubes / ad-hoc
UIUI
UI
Finance
UI
Views of
external
Data
Read only
external
data
Read only
external
dataDirect db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
Direct db access
SSO
UI / Service
AD
Direct db access
Direct db access
?
Next!
RPC
method calls across a
process boundary
consider a client invoking the createUser endpoint
consider a client invoking the createUser endpoint
createUser(id,
firstName,
lastName,
address)
consider a client invoking the createUser endpoint
other clients can use the same call as the first
createUser(id,
firstName,
lastName,
address)
other clients can use the same call as the first
createUser(id,
firstName,
lastName,
address)
so far so good
but what happens when you want to change
how one of the clients calls your service?
but what happens when you want to change
how one of the clients calls your service?
maybe I don’t want to use first name
and last name anymore
I want to use the ‘fullname’
createUser(id,
firstName,
lastName,
address)
createUserByFullname(
id,
fullName,
address)
or I want to specify address individually
createUser(id,
firstName,
lastName,
address)
createUserByFullname(
id,
fullName,
address)
createUserByFullnameAnd
Address(
id,
fullName,
street1,
street2,
zipcode)
one of two things tends to happen with
systems of this type
one of two things tends to happen with
systems of this type
1. you end up with very long service definitions
one of two things tends to happen with
systems of this type
1. you end up with very long service definitions
2. coordination of changes to clients becomes
difficult
1. specifications quickly become very very
long and a nightmare to maintain
1. specifications quickly become very very
long and a nightmare to maintain
createUserWithFullname(...)
1. specifications quickly become very very
long and a nightmare to maintain
createUserWithFullname(...)
createUser(...)
1. specifications quickly become very very
long and a nightmare to maintain
createUserWithFullname(...)
createUser(...)
createUserWithFullnameAndAddress
(...)
1. specifications quickly become very very
long and a nightmare to maintain
createUserWithFullname(...)
createUser(...)
createUserWithFullnameAndAddress
(...)
createUserWithAddress(...)
1. specifications quickly become very very
long and a nightmare to maintain
createUserWithFullname(...)
createUser(...)
createUserWithFullnameAndAddress
(...)
createUserWithAddress(...)
every time I want to change some logic, I have to change every
method call
2. you have to coordinate the release
cycles of your clients
createUser(id,
firstName,
lastName,
address)
createUser(id,
firstName,
lastName,
address)
createUser(id,
fullname,
address)
@deprecated
2. you have to coordinate the release
cycles of your clients
createUser(id,
firstName,
lastName,
address)
createUser(id,
fullname,
address)
@deprecated
and if you have many clients, thats no easy
task
2. you have to coordinate the release
cycles of your clients
A Brief Aside…
Who can tell me
about RFC 761?
Postel’s Law:
“Be liberal in what you do,
conservative in what you
expect”
Practical impact of this
- only bind to what you
need to - this way you
minimise breaking
service consumption
Service B
Service A
Shared Lib v1
Shared Lib v1
Service B
Service A
Shared Lib v1
Shared Lib v1
Service B
Service A
Shared Lib v1
Shared Lib v1
Service B
Service A
Shared Lib v1
Shared Lib v1
Shared Lib v2
Service B
Service A
Shared Lib v1
Shared Lib v1
Shared Lib v2
Beware of shared
serialization protocols
Service B
Service A
Shared Lib v1
Shared Lib v1
Shared Lib v2
Beware of shared
serialization protocols
WSDL-binding
Service B
Service A
Shared Lib v1
Shared Lib v1
Shared Lib v2
Beware of shared
serialization protocols
WSDL-binding
JAXB
Service B
Service A
Shared Lib v1
Shared Lib v1
Shared Lib v2
Beware of shared
serialization protocols
WSDL-binding
JAXB
Java Serialization
Messaging
(AMC / Associated Press)
a bit like going back to the 50’s enterprise
(AMC / Associated Press)
a bit like going back to the 50’s enterprise
except without the smoking and the rampant misogyny
(AMC / Associated Press)
back in the day, if you wanted to book a
holiday, you didn’t go onto your
corporate intranet to do it right?
back in the day, if you wanted to book a
holiday, you didn’t go onto your
corporate intranet to do it right?
you went to the cupboard
back in the day, if you wanted to book a
holiday, you didn’t go onto your
corporate intranet to do it right?
you went to the cupboard
and you pulled out one of these
back in the day, if you wanted to book a
holiday, you didn’t go onto your
corporate intranet to do it right?
you went to the cupboard
and you pulled out one of these
and you filled it in
james’ holiday request
form
and then you sent it to the HR department
james’ holiday request
form
and then you sent it to the HR department
where it was processed, and eventually you got
another envelope back containing the approval
and messaging is a bit like that
and messaging is a bit like that
asynchronous
and messaging is a bit like that
asynchronous
after all, you wouldn’t want to block waiting for internal mail right?
incidentally, I wasn’t actually there in the 50’s. I just have this on good
authority
and messaging is a bit like that
asynchronous
after all, you wouldn’t want to block waiting for internal mail right?
generally you create a message composed of a document
and you push it onto some kind of queue
and you push it onto some kind of queue
systems interested in your documents can pop those
documents and act on them
systems interested in your documents can pop those
documents and act on them
and return them should that be the semantics of the
exchange
the documents allowed additive changes to
be made without breaking existing clients
the documents allowed additive changes to
be made without breaking existing clients
If you want to add a field, you can do so as long as
clients are late bound to the documents
the documents allowed additive changes to
be made without breaking existing clients
If you want to add a field, you can do so as long as
clients are late bound to the documents
and if you want to rename something, you can do
that easily too (add another one with the same name)
and the asynchronous nature decouples the
applications from each other
and the asynchronous nature decouples the
applications from each other
and the asynchronous nature decouples the
applications from each other
you can change this
and the asynchronous nature decouples the
applications from each other
you can change this
without breaking this
of course, there is a teensy bit
more to it than that...
Channel Adapter
Channel
Datatype
Channel
Dead Letter
Channel
Guaranteed
Delivery
!
Invalid Message
Channel
Message
Bus
Messaging
Bridge
Publish
Subscribe
Channel
Aggregator
Content Based
Router
Composed
Message
Message
FIlter
Message
Router
Recipient List
Process
Manager
Splitter Routing SlipResequencer
Competing
Consumers
Message Endpoint
Durable
Subscriber
Event-Driven
Consumer
Message
Dispatcher
?
Selective
Consumer
Service
Activator
Polling
Consumer
Transactional
Client
Messaging
Gateway
quite a lot more to
be perfectly frank
Getting async comms
right can be hard!
And can require the
dreaded ‘middleware’
The ESB!
Next!
Let’s take a look at the world’s most
successful, distributed, scalable
computing system for some tips
The Web
http://www.flickr.com/photos/photophilde/4527076709/
Client cache
Proxy cache CDN Infrastructure
caches
Reverse proxy
cache
HTTP -> REST!
Leonard Richardson’s maturity
heuristic
Leonard Richardson’s maturity
heuristic
http://martinfowler.com/articles/richardsonMaturityModel.html
http://martinfowler.com/articles/richardsonMaturityModel.html
level 1: divide and conquer
143
GetArtist?id=cmVsZWFzZXMvMQ==
http://martinfowler.com/articles/richardsonMaturityModel.html
level 2: handle similar
situations the same way
145
GET /artists/cmVsZWFzZXMvMQ==
http://martinfowler.com/articles/richardsonMaturityModel.html
level 3: application protocol
discoverable by clients
scottwshaw / gist:ee875a6018e1676b36ad
Last active 22 minutes ago
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var jsonpath = require('JSONPath');
 
var version1 = {"results": 
    {"link": {"uri": "http://musikshop.com/search/artist=the%20brakes",
        "rel": "self"},
     "releases": [{"release": "Tale of Two Cities",
             "year": "2008",
             "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMQ==",
          "rel": "http://musikshop.com/rels/release"}},
            {"release": "The Brakes", 
             "year": "2006",
             "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMg==",
          "rel": "http://musikshop.com/rels/release"}}]}};
 
jsonpath.eval(version1, "$..[?(@.rel=='http://musikshop.com/rels/release')]");
gistfile1.json
A Document with Hypermedia
Links
Basket!
What if consumers of a service
could act in the same way?
scottwshaw / gist:ee875a6018e1676b36ad
Last active 22 minutes ago
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var jsonpath = require('JSONPath');
 
var version1 = {"results": 
    {"link": {"uri": "http://musikshop.com/search/artist=the%20brakes",
        "rel": "self"},
     "releases": [{"release": "Tale of Two Cities",
             "year": "2008",
             "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMQ==",
          "rel": "http://musikshop.com/rels/release"}},
            {"release": "The Brakes", 
             "year": "2006",
             "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMg==",
          "rel": "http://musikshop.com/rels/release"}}]}};
 
jsonpath.eval(version1, "$..[?(@.rel=='http://musikshop.com/rels/release')]");
gistfile1.json
A Document with Hypermedia
Links
A non-breaking change to the
service contract
scottwshaw / gist:d531a3f35de01ea45644
Last active 20 minutes ago
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var jsonpath = require('JSONPath');
 
var version2 = {"results": {
    "link": {"uri": "http://musikshop.com/search/artist=the%20brakes",
             "rel": "http://musikshop.com/rels/self"},
    "fullLengthReleases": [{"release": "Tale of Two Cities",
                            "year": "2008",
                            "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMQ==",
                                     "rel": "http://musikshop.com/rels/release"}}],
    "EPReleases": [{"release": "The Brakes",
                    "year": "2006",
                    "link": {"uri": "http://musikshop.com/api/cmVsZWFzZXMvMg==",
                             "rel": "http://musikshop.com/rels/release"}}]}}
 
jsonpath.eval(version2, "$..[?(@.rel=='http://musikshop.com/rels/release')]");
 
 
            
gistfile1.json
In practice most people end up here
Aim high!
Go read more!
http://martinfowler.com/articles/richardsonMaturityModel.html
http://www.crummy.com/writing/speaking/2008-QCon/
Summary
• REST over HTTP is best - aim high!
• Messaging is cool, but can be hard
• Whatever you do, think lazy binding!
How To Split Services
Add to cart
Add to cart
Checkout
Add to cart
Checkout
View Latest
Releases
Add to cart
Checkout
View Latest
Releases
Search
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Add to cart
Checkout
View Latest
Releases
Search
Listen To Previews
Shopping Cart Catalog
Music Library
MusikShopMono
MusikShopMono
Warehouse Finance
Catalog Recommendation
That was the easy bit
Enter the DB
DB
MusikShopMono
DB Schema
Recomendation
Service
MusicShopMono
DB Schema
Recomendation
ServiceMusicShopMono
DB Schema
Recomendation
ServiceMusicShopMono
DB
MusikShopMono
Warehouse Finance
Catalog Recommendation
Repository
DB
MusikShopMono
Warehouse Finance
Catalog Recommendation
Catalog
MusikShopMono
Catalog
Line Items
MusikShopMono
Catalog Finance
Line Items
MusikShopMono
Catalog Finance
Line Items Ledger
MusikShopMono
Catalog Finance
Line Items Ledger
MusikShopMono
Catalog Finance
Line Items Ledger
MusikShopMono
Catalog Finance
Line Items Ledger
MusikShopMono
Catalog Finance
Line Items Ledger
MusikShopMono
MusikShop
System
Finance ServiceCatalog Service
MusikShop
System
Finance ServiceCatalog Service
MusikShop
System
Line Items
Finance ServiceCatalog Service
MusikShop
System
Line Items Ledger
Finance ServiceCatalog Service
Country Codes
MusikShopMono
Finance
Warehouse
Catalog
Catalog
Finance
Warehouse
Country Codes
Country Codes
Country Codes
MusikShopMono
Catalog
Finance
Warehouse
MusikShopMono
Finance Warehouse
Customer Record
MusikShopMono
reify
Finance Warehouse
Customer Record
MusikShop
Finance Warehouse
Customer Record
Customer
MusikShop
Warehouse ServiceFinance Service
MusikShop
System
Customer Service
Catalog Warehouse
Item
MusikShop
Catalog Warehouse
Item
MusikShop
Bee Gees Hits | $4.99 | 45
Catalog Warehouse
Item
MusikShop
Bee Gees Hits | $4.99 | 45
Catalog Warehouse
Item
MusikShop
Bee Gees Hits | $4.99 | 45
Catalog Warehouse
Catalog Item
MusikShop
Stock Levels
Do some up front thinking. Just enough!
Do some up front thinking. Just enough!
Do some up front thinking. Just enough!
DB
Do some up front thinking. Just enough!
DB
Cost Of Change
Do some up front thinking. Just enough!
@samnewman
Summary
• Split around bounded contexts
• Make small, incremental changes
• Split inside the process boundary before
splitting out services
• Start coarse-grained
CAP Theory
http://www.flickr.com/photos/76578519@N00/4695658106
What is CAP theory?
It is impossible for a distributed computer
system to simultaneously provide all three
of the following guarantees:
http://en.wikipedia.org/wiki/CAP_theorem
• Consistency (all nodes see the same data at the same
time)
• Availability (a guarantee that every request receives a
response about whether it was successful or failed)
• Partition tolerance (the system continues to operate
despite arbitrary message loss or failure of part of the
system)
Partition Tolerance
The system continues to operate despite arbitrary message
loss or failure of part of the system
Typically, we need this - so end up trading off the other two
Node 1
Inventory Service
Master DB
dc1
Node 2
Slave DB
dc2
Load Balancer
A standard setup - slave DB for backup purposes
Node 1
Inventory Service
Master DB
dc1
Node 2
Slave DB
dc2
Load Balancer
A standard setup - slave DB for backup purposes
Option 1: Keep Node 2 serving traffic
Node 1
Master DB
Node 2
Slave DB
Load Balancer
Inventory Service
Option 1: Keep Node 2 serving traffic
Data is potentially
stale, but, we keep
Node 2 up Node 1
Master DB
Node 2
Slave DB
Load Balancer
Inventory Service
Option 1: Keep Node 2 serving traffic
Data is potentially
stale, but, we keep
Node 2 up
We have
sacrificed
consistency for
availability
Node 1
Master DB
Node 2
Slave DB
Load Balancer
Inventory Service
Option 2: Remove Node 2 from service
Node 1
Master DB
Node 2
Slave DB
Load Balancer
Inventory Service
Option 2: Remove Node 2 from service
Node 1
Master DB
Node 2
Slave DB
Load BalancerNow we have
had to degrade
availability to
ensure
consistency
Inventory Service
Which is right?
What about sacrificing
Partition Tolerance?
Node 1
Inventory Service
Master DB
dc1
Node 2
Slave DB
dc2
Load Balancer
Node 1
Inventory Service
Master DB
dc1
Node 2
Slave DB
dc2
Load Balancer
So in general, we talk
about CP or AP systems
And now, Eventual
Consistency
Node 1 Node 1
Catalog
Service
Web Shop
Node 1 & 2 will have the
same catalog ‘eventually’
Each node pulls back a copy of the catalog, and caches it for speed reasons
Node 1 Node 1
Catalog
Service
Web Shop
ttl: 5 mins
12:00
Node 1 & 2 will have the
same catalog ‘eventually’
Each node pulls back a copy of the catalog, and caches it for speed reasons
Node 1 Node 1
Catalog
Service
Web Shop
ttl: 5 mins
12:00
Update12:02
Node 1 & 2 will have the
same catalog ‘eventually’
Each node pulls back a copy of the catalog, and caches it for speed reasons
Node 1 Node 1
Catalog
Service
Web Shop
ttl: 5 mins
12:00
Update12:02
ttl: 5 mins
12:03
Node 1 & 2 will have the
same catalog ‘eventually’
Each node pulls back a copy of the catalog, and caches it for speed reasons
http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
You can’t beat CAP
Theory
It’s Maths
http://lpd.epfl.ch/sgilbert/pubs/BrewersConjecture-SigAct.pdf
http://ferd.ca/beating-the-cap-theorem-checklist.html
You entire system
doesn’t need to be CP
or AP!
Catalog
Web Shop
Payment
ttl: 5 mins
Customer
Catalog
Web Shop
Payment
ttl: 5 mins
Customer
Catalog
Web Shop
Payment
ttl: 5 mins
Customer
Catalog
Web Shop
Payment
ttl: 5 mins
Customer
Catalog
Web Shop
Payment
ttl: 5 mins
Customer
Web Shop
Web Shop Web Shop Web Shop Web Shop
Web Shop Web Shop Web Shop
Master DB
Web Shop
Web Shop Web Shop Web Shop
Master DB
Web Shop
Slave Slave
Web Shop Web Shop Web Shop
Master DB
Web Shop
Slave Slave
Consistency = locks
locks in distributed systems are hard
and they are the enemy of scaling
https://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en//archive/chubby-osdi06.pdf
Transaction Club
• The first rule is…don’t!
• If you really, really, really have to, consider
merging services first
Summary
• Understand if consistency or availability is
important - and this is normally a business
decision!
• It isn’t all or nothing
• Avoid distributed transactions if you can
TESTING &
DEPLOYING
MICROSERVICES
Microservices Workshop
57
58
Accounts
Returns
Invoicing
Shipping
Inventory
Customer
Service
58
Accounts
Returns
Invoicing
Shipping
Inventory
Customer
Service
59
59
59
DB
60
Small
Medium
Large
TEST PYRAMID
Increasing Scope
More Confidence
Faster!
Better Isolation
61
DB
Small
Large
Medium
61
DB
Small
Large
Medium
62
DB
Small
Large
Medium
62
DB
Small
Large
Medium
63
DB
Small
Large
Medium
63
DB
Small
Large
Medium
63
DB
Small
Large
Medium
6464
Small
Medium
Large
TEST SNOWCONE
65
Small
Medium
Large
66
Small
Medium
Large
Build
Tests
Tests
Source
Control
…
BUILD PIPELINE
66
Small
Medium
Large
Build
Tests
Tests
Source
Control
Faster Feedback
…
BUILD PIPELINE
66
Small
Medium
Large
Build
Tests
Tests
Source
Control
Faster Feedback
Binary Artifact(s)
…
BUILD PIPELINE
66
Small
Medium
Large
Build
Tests
Tests
Source
Control
Faster Feedback
Binary Artifact(s)
…
BUILD PIPELINE
67
DB
67
DB
68
S/M TestsBuild Large Tests UAT Prod
68
S/M TestsBuild Large Tests UAT Prod
DB
Machine CI Node
Large Tests Environment
Large Tests
69
S/M TestsBuild Large Tests UAT Prod
DB
Machine
UAT Environment
Machine
70
S/M TestsBuild Large Tests UAT Prod
Master
DB
Machine
Production Environment
Machine Machine Machine
Slave
DB
71
S/M TestsBuild Large Tests UAT Prod
More Production Like
71
S/M TestsBuild Large Tests UAT ProdLarge Tests
More Production Like
71
S/M TestsBuild Large Tests UAT ProdLarge Tests
Faster Feedback
More Production Like
72
Customer Service
72
Customer Service
S/M TestsBuild Large Tests
72
Customer Service
S/M TestsBuild Large Tests
72
Customer Service
S/M TestsBuild Large Tests
73
Customer
Service
Web Shop
Fulfilment
Service
73
Customer
Service
Web Shop
Fulfilment
Service
Large
Medium
Small
74
Customer
Service
Fulfilment
Service
Large
Medium
Small
74
Customer
Service
Fulfilment
Service
Large
Medium
Small
74
Customer
Service
Large
Medium
Small
Fulfilment
Service
Stub
75
Mountebank
http://www.mbtest.org
76
S/M TestsBuild Large Tests
76
S/M TestsBuild Large Tests
Customer
Service
Fulfilment
Service
Stub
77
Customer
Service
V1
Web Shop
Fulfilment
Service
77
Web Shop
Customer
Service
v2
Fulfilment
Service
77
Web Shop
Customer
Service
v2
Fulfilment
Service
77
Web Shop
Customer
Service
v2
Fulfilment
Service
78
S/M TestsBuild Large Tests
Customer
Service
Customer
Service
v1
Web Shop
v1
Production
78
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v1
Web Shop
v1
Production
78
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v1
Web Shop
v1
Production
Customer
Service
v2
Web Shop
v1
Integration
Test
79
Customer
Service
v1
Web Shop
v1
Production
79
Customer
Service
v1
Web Shop
v1
Production
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v2
79
S/M TestsBuild Large TestsWeb Shop
Customer
Service
v1
Web Shop
v1
Production
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v2
79
S/M TestsBuild Large TestsWeb Shop
Customer
Service
v1
Web Shop
v1
Production
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v2
Web Shop
v2
79
S/M TestsBuild Large TestsWeb Shop
Customer
Service
v1
Web Shop
v1
Production
S/M TestsBuild Large Tests Integration Test
Customer
Service
Customer
Service
v2
Web Shop
v2
???
80
S/M TestsBuild Large TestsWeb Shop
S/M TestsBuild Large Tests
Customer
Service
80
S/M TestsBuild Large TestsWeb Shop
S/M TestsBuild Large Tests
Customer
Service
Integration Test
80
S/M TestsBuild Large TestsWeb Shop
S/M TestsBuild Large Tests
Customer
Service
Integration Test
S/M TestsBuild Large Tests
Invoice
Service
80
S/M TestsBuild Large TestsWeb Shop
S/M TestsBuild Large Tests
Customer
Service
Integration Test
S/M TestsBuild Large Tests
Invoice
Service
S/M TestsBuild Large TestsBasket
80
S/M TestsBuild Large TestsWeb Shop
S/M TestsBuild Large Tests
Customer
Service
Integration Test
S/M TestsBuild Large Tests
Invoice
Service
S/M TestsBuild Large TestsBasket
S/M TestsBuild Large TestsFulfilment
81
81
Browsers
81
Timing
Browsers
81
Provisioning of Environments
Timing
Browsers
81
Provisioning of Environments
Networks
Timing
Browsers
81
Deployment
Provisioning of Environments
Networks
Timing
Browsers
81
Deployment
Provisioning of Environments
Networks
Timing
Browsers Diagnosis
82
82
Integration Test
82
Integration Test Prod…
82
Integration Test Prod…
82
Integration Test Prod…
82
Integration Test Prod…
83
Danger Will Robinson!
84
Show Tangle
85
Golden Rule:
Get good at releasing services independently
86
SO NO INTEGRATION TESTS?
87
87
87
SEMANTIC MONITORING
88
Customer
Service
Web Shop
88
Customer
Service
Web Shop
Small
Medium
Large
88
Customer
Service
Web Shop
Small
Medium
Large
88
Customer
Service
Web Shop
Small
Medium
Large
Consumer Driven Contracts
89
Customer
Service
Web Shop
89
Customer
Service
Web Shop
Expectations
89
Customer
Service
Web Shop
Expectations
89
Customer
Service
Web Shop
Expectations
Prod
89
Customer
Service
Web Shop
Expectations
Prod
90
90
https://github.com/realestate-com-au/pact
91
Prod
Prod
Prod
Prod
91
Prod
Prod
Prod
Prod
91
Prod
Prod
Prod
Prod
QA
91
Prod
Prod
Prod
Prod
QA
Good Monitoring
91
Prod
Prod
Prod
Prod
QA
Good Monitoring
Fast Remediation
91
Prod
Prod
Prod
Prod
QA
Good Monitoring
Fast Remediation
92
S/M TestsBuild Large Tests UAT ProdLarge Tests
Faster Feedback
More Production Like
92
S/M TestsBuild Large Tests UAT ProdLarge Tests
Faster Feedback
More Production Like
92
S/M TestsBuild Large Tests UAT ProdLarge Tests
Faster Feedback
More Production Like
93
DB
Machine CI Node
Large Tests Environment
S/M TestsBuild Large Tests UAT ProdLarge TestsLarge Tests
93
DB
Machine CI Node
Large Tests Environment
DB
Machine
UAT Environment
Machine
S/M TestsBuild Large Tests UAT ProdLarge Tests UAT
93
DB
Machine CI Node
Large Tests Environment
DB
Machine
UAT Environment
Machine
Master
DB
Machine
Production Environment
Machine Machine Machine
Slave
DB
S/M TestsBuild Large Tests UAT ProdLarge Tests Prod
94
Faster Feedback
More Production Like
S/M TestsBuild Large Tests UAT ProdLarge Tests
remember, this is what we are optimising for
94
Faster Feedback
More Production Like
S/M TestsBuild Large Tests UAT ProdLarge Tests
remember, this is what we are optimising for
95
96
97
Ansible
Puppet
Chef
97
Ansible
Puppet
Chef
97
Ansible
Puppet
Chef
AWS
97
Ansible
Puppet
Chef
AWS
Digital Ocean
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
Feedback Can Suffer
97
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
Feedback Can Suffer
Cycle Time
98
Prod
Prod
Prod
Prod
optimise for a single service on a single image
98
Prod
Prod
Prod
Prod
Packer Images
optimise for a single service on a single image
98
Prod
Prod
Prod
Prod
“Machine”
Service
Packer Images
optimise for a single service on a single image
98
Prod
Prod
Prod
Prod
“Machine”
Service
“Machine”
Service Service
Packer Images
optimise for a single service on a single image
98
Prod
Prod
Prod
Prod
“Machine”
Service
“Machine”
Service Service
Packer Images
optimise for a single service on a single image
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
VMWare
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
VMWare
Vagrant
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
VMWare
Vagrant
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
VMWare
Vagrant
99
S/M TestsBuild Large Tests UAT ProdLarge Tests
AWS
VMWare
Vagrant
100
“Machine”
Service
100
“Machine”
Service
Much Easier To Reason About
100
“Machine”
Service
Much Easier To Reason About
Easier To Provision (Or Decommission)
100
“Machine”
Service
Much Easier To Reason About
Easier To Provision (Or Decommission)
Fewer Side-effects
100
“Machine”
Service
Much Easier To Reason About
Easier To Provision (Or Decommission)
Fewer Side-effects
Cost & Management Overhead!
100
“Machine”
Service
Much Easier To Reason About
Easier To Provision (Or Decommission)
Fewer Side-effects
Cost & Management Overhead!
AWS
Digital Ocean
OpenStack
100
“Machine”
Service
Much Easier To Reason About
Easier To Provision (Or Decommission)
Fewer Side-effects
Cost & Management Overhead!
AWS
Digital Ocean
OpenStack
101
101
Be aware of - and balance - your test Pyramid
101
Be aware of - and balance - your test Pyramid
Understand the balance between testing & rapid remediation
101
Be aware of - and balance - your test Pyramid
Understand the balance between testing & rapid remediation
Deploy one thing at a time
101
Be aware of - and balance - your test Pyramid
Understand the balance between testing & rapid remediation
Deploy one thing at a time
Consider consumer-driven contracts over integration tests
101
Be aware of - and balance - your test Pyramid
Understand the balance between testing & rapid remediation
Deploy one thing at a time
Consider consumer-driven contracts over integration tests
Explore image-based deployments to reduce environment differences
Operational
Complexity
Alert!!!
UP
DOWN
DOWN
DOWN
Too slow?
UP?
UP? DOWN?
UP? DOWN?
Too slow? Where is the problem?
“it pushes the accidental complexity into the infrastructure”
Martin Fowler
“it pushes the accidental complexity into the infrastructure”
Martin Fowler
monitoring and logging are essential
Monitoring
Response time tracking
Response time tracking
Log aggregation
Response time tracking
Log aggregation
Monitor down-stream
dependencies
Response time tracking
Log aggregation
Monitor down-stream
dependencies
Response time tracking
Log aggregation
Monitor down-stream
dependencies
UP?
DOWN?
Track health
every instance of every
service…
every instance of every
service…
And you want to
standardize
…needs to be status
aware
source: https://github.com/Netflix/Hystrix/wiki/Dashboard
aggregated dashboards
Logstash &
Kibana
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
ID 123
Correlation IDs
Synthetic Transactions
Architectural Safety
Measures
“Every socket, process, pipe, or remote
procedure call can and will hang. Even
database calls [...]”
M. Nygard,“Release It”
Cascading Failures
• Happen when a problem in a service causes
a problem in one or more consumers of
that service
• Become a bigger problem with more
services (cross more process boundaries)
• Can a failure in one back-end application
take down the entire system (including the
parts that don’t depend on that back-end)?
Failure Types
• Rejected connections
• Dropped ACKs
• Slow responses (these are the nasty ones!)
Defense Mechanisms
• Resource pools
• Timeouts
• Circuit breakers
• Bulkheads
• Fail fast
Circuit Breakers
• If a service consistently fails, stop calling it
for a while!
MusikShop v1
Rekomender
v124
www.MusikShop
Take That
Queens Of The
Stone Age
Snoop Dogg
We Rekomend ‘The
Brakes’!
MusikShop v1
Rekomender
v124
www.MusikShop
Take That
Queens Of The
Stone Age
Snoop Dogg
We Rekomend ‘The
Brakes’!
MusikShop v1
Rekomender
v124
www.MusikShop
Take That
Queens Of The
Stone Age
Snoop Dogg
We Rekomend ‘The
Brakes’!
We Can’t Rekomend
Right Now!
MusikShop v1
Rekomender
v124
www.MusikShop
Take That
Queens Of The
Stone Age
Snoop Dogg
We Rekomend ‘The
Brakes’!
We Can’t Rekomend
Right Now!
MusikShop v1
Rekomender
v124
www.MusikShop
Take That
Queens Of The
Stone Age
Snoop Dogg
We Rekomend ‘The
Brakes’!
Bulkheads
• = Damage containment
• Separate resource pools
• Partitioned servers
Fail Fast
• Check (and perhaps reserve) required
resources before processing a request
• Reject immediately if, say, a circuit breaker
has been tripped
• Allow consumers to query state of service
before proceeding (see monitoring later)
How Small?
This might be the
wrong question
How many >> size
So how many is too
many?
From an architectural &
operations view...
How many >> how small
From an architectural &
operations view...
Pain?
Pain? Pain?
http://www.flickr.com/photos/oufoufsworld/1233382476/
Summary
• Complexity doesn’t vanish, but with help it
can be more evident
• Monitoring & architectural safety measures
are essential!
• Start with a few services and understand
what your appetite is for this new sort of
complexity
Organisational
Structures & Conway’s
Law
"organizations which design systems ... are
constrained to produce designs which are
copies of the communication structures of
these organizations"
- Melvin Conway, Dude
(HBR rejected the original paper as the
thesis wasn’t proved)
“If seven people create a compiler, you get a
seven pass compiler”
- Dan North, not quite a dude
http://www.flickr.com/photos/chijs/2869992728/
http://www.flickr.com/photos/noodlepie/7256072798/
High change
frequency
Fine-grained
High change
frequency
Fine-grained
High change
frequency
Fine-grained
Low change
frequency
Coarse-grained
= Pain!
http://www.flickr.com/photos/a_ninjamonkey/3565672226/
#123
As a despot when I
press the big red
button I want...
#123
As a despot when I
press the big red
button I want...
Splitting Stories
• When splitting, try and synchronise the
work
• Consider re-assigning service ownership
temporarily
• Splitting stories across multiple teams is
painful...
• ...so what about shared services?
Conway’s law!
#123
As a despot when I
press the big red
button I want...
#123
As a despot when I
press the big red
button I want...
Problems:
#123
As a despot when I
press the big red
button I want...
Consistency of XD
Problems:
#123
As a despot when I
press the big red
button I want...
Consistency of XD
Sequencing
Problems:
#123
As a despot when I
press the big red
button I want...
Consistency of XD
Sequencing
Bottlenecks
Problems:
#123
As a despot when I
press the big red
button I want...
Consistency of XD
Sequencing
Bottlenecks
Testing
Problems:
#123
As a despot when I
press the big red
button I want...
Consistency of XD
Sequencing
Bottlenecks
TL, QA,
PM
Testing
Problems:
Summary
• In general assign services to team...
• ...where team means a co-located group of
people
• Strongly splitting services around
organizational boundaries
• Avoid shared services, instead temporarily
re-assign ownership to reduce the need for
fine-grained orchestration of work
CONCLUSIONS
Microservices Workshop
155
156
http://martinfowler.com/articles/microservices.html
157
Sam Newman
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
158
159
https://www.flickr.com/photos/futurowoman/2923992303
160
Monitoring
Deployment
Testing
Organisational Structure
Integration
Architectural Safety
161
Go Incremental
163
164
1. Rule of Modularity: Write simple parts connected by clean interfaces.
2. Rule of Clarity: Clarity is better than cleverness.
3. Rule of Composition: Design programs to be connected to other programs.
4. Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
5. Rule of Simplicity: Design for simplicity; add complexity only where you must.
6. Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing
else will do.
7. Rule of Transparency: Design for visibility to make inspection and debugging easier.
8. Rule of Robustness: Robustness is the child of transparency and simplicity.
9. Rule of Representation: Fold knowledge into data so program logic can be stupid and
robust.
10.Rule of Least Surprise: In interface design, always do the least surprising thing.
11.Rule of Silence: When a program has nothing surprising to say, it should say nothing.
12.Rule of Repair: When you must fail, fail noisily and as soon as possible.
13.Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
14.Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
15.Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
16.Rule of Diversity: Distrust all claims for “one true way”.
17.Rule of Extensibility: Design for the future, because it will be here sooner than you think.
164
1. Rule of Modularity: Write simple parts connected by clean interfaces.
2. Rule of Clarity: Clarity is better than cleverness.
3. Rule of Composition: Design programs to be connected to other programs.
4. Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
5. Rule of Simplicity: Design for simplicity; add complexity only where you must.
6. Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing
else will do.
7. Rule of Transparency: Design for visibility to make inspection and debugging easier.
8. Rule of Robustness: Robustness is the child of transparency and simplicity.
9. Rule of Representation: Fold knowledge into data so program logic can be stupid and
robust.
10.Rule of Least Surprise: In interface design, always do the least surprising thing.
11.Rule of Silence: When a program has nothing surprising to say, it should say nothing.
12.Rule of Repair: When you must fail, fail noisily and as soon as possible.
13.Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
14.Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
15.Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
16.Rule of Diversity: Distrust all claims for “one true way”.
17.Rule of Extensibility: Design for the future, because it will be here sooner than you think.
the 17 rules of UNIX programming
165
The Rule of Diversity
the 16th rule
DISTRUST ALL CLAIMS FOR “ONE TRUE WAY”
and finally
James Lewis
jalewis@thoughtworks.com
166

More Related Content

Similar to Design & Implementation of Microservices - James Lewis

Visible Architectures
Visible ArchitecturesVisible Architectures
Visible ArchitecturesLuke Hohmann
 
Use Collaboration to Solve Your Biggest Challenges
Use Collaboration to Solve Your Biggest ChallengesUse Collaboration to Solve Your Biggest Challenges
Use Collaboration to Solve Your Biggest ChallengesApttus
 
The Role Of An Architect
The Role Of An ArchitectThe Role Of An Architect
The Role Of An Architectllangit
 
Toule Presentation : Dark Color Theme
Toule Presentation : Dark Color ThemeToule Presentation : Dark Color Theme
Toule Presentation : Dark Color Themepunkl.
 
Toule Presentation : Light Color Theme
Toule Presentation : Light Color ThemeToule Presentation : Light Color Theme
Toule Presentation : Light Color Themepunkl.
 
Ronald Schmelzer Keynote Address
Ronald Schmelzer Keynote AddressRonald Schmelzer Keynote Address
Ronald Schmelzer Keynote AddressNathaniel Palmer
 
Deploying a QMS Within Your Budget
Deploying a QMS Within Your BudgetDeploying a QMS Within Your Budget
Deploying a QMS Within Your BudgetVERSE Solutions
 
Architecture led procurement
Architecture led procurementArchitecture led procurement
Architecture led procurementRichard Veryard
 
Managing Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelManaging Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelChris Sterling
 
Modern Architectures: Keynote - Using Fabrics to Weave Success in the Cloud
Modern Architectures: Keynote - Using Fabrics to Weave Success in the CloudModern Architectures: Keynote - Using Fabrics to Weave Success in the Cloud
Modern Architectures: Keynote - Using Fabrics to Weave Success in the CloudDreamforce
 
The Role Of The Architect In Turbulent Times
The Role Of The Architect In Turbulent TimesThe Role Of The Architect In Turbulent Times
The Role Of The Architect In Turbulent TimesDavid Chou
 
Speeding Up Innovation
Speeding Up InnovationSpeeding Up Innovation
Speeding Up InnovationDevOpsDays DFW
 
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...AgileNetwork
 
I T E007 Warner 091807
I T E007  Warner 091807I T E007  Warner 091807
I T E007 Warner 091807Dreamforce07
 
Elusi Presentation : Light Color Theme
Elusi Presentation : Light Color ThemeElusi Presentation : Light Color Theme
Elusi Presentation : Light Color Themepunkl.
 
Elusi Presentation : Dark Color Theme
Elusi Presentation : Dark Color ThemeElusi Presentation : Dark Color Theme
Elusi Presentation : Dark Color Themepunkl.
 
Microservices in der Cloud - Software Architecture Summit Berlin 2016
Microservices in der Cloud - Software Architecture Summit Berlin 2016Microservices in der Cloud - Software Architecture Summit Berlin 2016
Microservices in der Cloud - Software Architecture Summit Berlin 2016Christian Deger
 
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...Amazon Web Services
 
How to establish Enterprise Architecture in large organisations using TOGAF
How to establish Enterprise Architecture in large organisations using TOGAFHow to establish Enterprise Architecture in large organisations using TOGAF
How to establish Enterprise Architecture in large organisations using TOGAFNemanja Kostic
 

Similar to Design & Implementation of Microservices - James Lewis (20)

Visible Architectures
Visible ArchitecturesVisible Architectures
Visible Architectures
 
Use Collaboration to Solve Your Biggest Challenges
Use Collaboration to Solve Your Biggest ChallengesUse Collaboration to Solve Your Biggest Challenges
Use Collaboration to Solve Your Biggest Challenges
 
The Role Of An Architect
The Role Of An ArchitectThe Role Of An Architect
The Role Of An Architect
 
Toule Presentation : Dark Color Theme
Toule Presentation : Dark Color ThemeToule Presentation : Dark Color Theme
Toule Presentation : Dark Color Theme
 
Toule Presentation : Light Color Theme
Toule Presentation : Light Color ThemeToule Presentation : Light Color Theme
Toule Presentation : Light Color Theme
 
Ronald Schmelzer Keynote Address
Ronald Schmelzer Keynote AddressRonald Schmelzer Keynote Address
Ronald Schmelzer Keynote Address
 
Deploying a QMS Within Your Budget
Deploying a QMS Within Your BudgetDeploying a QMS Within Your Budget
Deploying a QMS Within Your Budget
 
Architecture led procurement
Architecture led procurementArchitecture led procurement
Architecture led procurement
 
Managing Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelManaging Software Debt Workshop at Intel
Managing Software Debt Workshop at Intel
 
Modern Architectures: Keynote - Using Fabrics to Weave Success in the Cloud
Modern Architectures: Keynote - Using Fabrics to Weave Success in the CloudModern Architectures: Keynote - Using Fabrics to Weave Success in the Cloud
Modern Architectures: Keynote - Using Fabrics to Weave Success in the Cloud
 
The Role Of The Architect In Turbulent Times
The Role Of The Architect In Turbulent TimesThe Role Of The Architect In Turbulent Times
The Role Of The Architect In Turbulent Times
 
Speeding Up Innovation
Speeding Up InnovationSpeeding Up Innovation
Speeding Up Innovation
 
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...
ANI | Business Agility Day @Gurugram | Are you a responsible Business | Dilje...
 
I T E007 Warner 091807
I T E007  Warner 091807I T E007  Warner 091807
I T E007 Warner 091807
 
Elusi Presentation : Light Color Theme
Elusi Presentation : Light Color ThemeElusi Presentation : Light Color Theme
Elusi Presentation : Light Color Theme
 
Elusi Presentation : Dark Color Theme
Elusi Presentation : Dark Color ThemeElusi Presentation : Dark Color Theme
Elusi Presentation : Dark Color Theme
 
6.4 User Stories Teamwork v2.0
6.4 User Stories  Teamwork v2.06.4 User Stories  Teamwork v2.0
6.4 User Stories Teamwork v2.0
 
Microservices in der Cloud - Software Architecture Summit Berlin 2016
Microservices in der Cloud - Software Architecture Summit Berlin 2016Microservices in der Cloud - Software Architecture Summit Berlin 2016
Microservices in der Cloud - Software Architecture Summit Berlin 2016
 
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...
The People Pillar of Cloud Adoption: Developing Your Workforce & Building Dig...
 
How to establish Enterprise Architecture in large organisations using TOGAF
How to establish Enterprise Architecture in large organisations using TOGAFHow to establish Enterprise Architecture in large organisations using TOGAF
How to establish Enterprise Architecture in large organisations using TOGAF
 

More from JAXLondon_Conference

Cassandra and Spark - Tim Berglund
Cassandra and Spark - Tim BerglundCassandra and Spark - Tim Berglund
Cassandra and Spark - Tim BerglundJAXLondon_Conference
 
All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...JAXLondon_Conference
 
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursJAXLondon_Conference
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerJAXLondon_Conference
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJAXLondon_Conference
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJAXLondon_Conference
 
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay PrewerSmoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay PrewerJAXLondon_Conference
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerJAXLondon_Conference
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarJAXLondon_Conference
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantJAXLondon_Conference
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenJAXLondon_Conference
 
The art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel DaviesThe art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel DaviesJAXLondon_Conference
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerJAXLondon_Conference
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsJAXLondon_Conference
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzJAXLondon_Conference
 
Java vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris BaileyJava vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris BaileyJAXLondon_Conference
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJAXLondon_Conference
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJAXLondon_Conference
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordJAXLondon_Conference
 

More from JAXLondon_Conference (20)

Cassandra and Spark - Tim Berglund
Cassandra and Spark - Tim BerglundCassandra and Spark - Tim Berglund
Cassandra and Spark - Tim Berglund
 
All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...
 
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
 
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay PrewerSmoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian Colyer
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir Talwar
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel Bryant
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie Allen
 
The art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel DaviesThe art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel Davies
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave Syer
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly Cummins
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von Zitzewitz
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Java vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris BaileyJava vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris Bailey
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen Colebourne
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin Stopford
 

Recently uploaded

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 

Recently uploaded (20)

Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 

Design & Implementation of Microservices - James Lewis