Building Microservice
Architectures
@neal4d
nealford.com
what problem
characteristics
engineering
AGENDA
Service-oriented Architecture
business services BS BS BS BS BS BS
message bus
abstract enterprise-level coarse-grained services
owned and dened process choreographer
by business users
service orchestrator
no implementation - only name, input, and output
data represented as wsdl, bpel, xml, etc.
enterprise services ES ES ES ES ES ES
ExecuteTrade
application services PlaceOrder
AS ProcessClaim
infrastructure services IS
Service-oriented Architecture
business enterprise-level
concrete services BS
coarse-grained
BS BS BS
services
BS BS
owned by shared services teams
message bus
custom or vendorprocess
implementations
choreographer that are one-to-
one or one-to-manyservice
relationship
orchestratorwith business
services
enterprise services ES ES ES ES ES ES
application services AS infrastructure services IS
CreateCustomer CalcQuote ValidateTrade
Service-oriented Architecture
concrete
business application-level
services BS ne-grained
BS BS BS services
BS BS
owned by application teams
message bus
bound to a specic application
process context
choreographer
service orchestrator
AddDriver UpdateAddress CalcSalesTax
enterprise services ES ES ES ES ES ES
application services AS infrastructure services IS
Service-oriented Architecture
businessenterprise-level
concrete services BS
ne-grained
BS BS
services
BS BS
owned
BS
by infrastructure or shared services teams
message bus
implements non-business functionality to support
process choreographer
both enterprise and business services
service orchestrator
WriteAudit CheckUserAccess LogError
enterprise services ES ES ES ES ES ES
application services AS infrastructure services IS
Service-oriented Architecture
business services BS BS BS BS BS BS
message bus
process choreographer
service orchestrator
mediation and routing
enterprise services ES ES message
ES ES enhancement
ES ES
process choreography message transformation
application services AS infrastructure services IS
service orchestration protocol transformation
Service-oriented Architecture
business services BS BS BS BS BS BS
message bus
process choreographer
service orchestrator
enterprise services ES ES ES ES ES ES
application services AS infrastructure services IS
maximize reuse
maximize canonicality
Service-oriented Architecture
business services BS BS BS BS BS BS
message bus
process choreographer
service orchestrator
enterprise services ES ES ES ES ES ES
application services AS infrastructure services IS
incremental change
operationally complex
Yesterdays best
practice is tomorrows
anti-pattern.
We inadvertently build
architectures to solve
outdated problems.
Architecture is abstract
until operationalized.
nealford.com/memeagora/2015/03/30/architecture_is_abstract_until_operationalized.html
Architecture is abstract
until operationalized.
view
AngularJS AngularJS
view view
1.3.15 1.3.15
controller
CustomerInfo
controller CustomerInfo
4.3.1 controller
4.3.1
Customer model Customer
model model
1.3.5 1.3.5
Hibernate Hibernate
ORM ORM ORM
4.3.8 4.4.1
Oracle 12c Oracle 12c
2D 3D 4D
nealford.com/memeagora/2015/03/30/architecture_is_abstract_until_operationalized.html
what problem
characteristics
engineering
AGENDA
Domain Driven Design
Bounded Context
+
Microservices Architecture
distributed architecture
client requests client requests client requests
api layer
Microservices Architecture
separately deployed components
client requests client requests client requests
api layer
Microservices Architecture
service component
client requests client requests client requests
api layer
Microservices Architecture
bounded context
client requests client requests client requests
api layer
Microservices Architecture
service orchestration
client requests client requests client requests
api layer
Monoliths vs. Microservices
Monoliths vs. Microservices
Products, not Projects
projects:
products:
s You build it, you run it
Conways Law
organizations which design systems ... are
constrained to produce designs which are copies
of the communication structures of these
organizations
Melvin Conway
user interface
server-side
DBA
Orders
Shipping
Catalog
Monoliths vs. Microservices
Smart Endpoints, Dumb Pipes
< HTTP >
< messaging >
Standardize on integration, not platform
embrace polyglot solutions
where sensible
too few too many
languages/platforms Building languages/platforms
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Have one, two or maybe three
ways of integrating, not 20.
Sam Newman
Building
Microservices Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Standardize in the gaps between DESIGNING FINE-GRAINED SYSTEMS
services - be exible about what
Pick some sensible conventions,
happens inside the boxes
Sam Newman and stick with them.
Sam Newman
Decentralized Data Management
ACID versus BASE
Decentralized Data Management
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Avoid distributed transactions if
at all possible
Sam Newman
Decentralized Governance
Decentralized Governance
Decentralized Governance
Enterprise architects suer from less
pressure to make the correct choice(s)
in microservice architectures.
Infrastructure Automation
Small, Single Responsibility
small enough to t in your head
rewrite over maintain
(101000 LOC)-ish / service
single responsibility
what problem
characteristics
engineering
AGENDA
Microservice
client requests client requests client requests
api layer
maximize easy evolution
support
Microservice is the rst
architectural style developed
post-Continuous Delivery.
Benefits
Microservice Implementation
PCI Level 1 !!
http://2012.33degree.org/pdf/JamesLewisMicroServices.pdf
http://www.infoq.com/presentations/Micro-Services
Asynchronicity
return optimized for
ranking/aggregation,
not display
Prefer timely partial
over slow complete
Integration & Disintegration
Complected Deployments
!
complect, transitive verb:
intertwine, embrace, especially
to plait together production
Evolutionary Architecture
Components are
deployed.
Features are released.
Applications consist
of routing.
production
Evolutionary Architecture
Dis-integrate
services that
monitoring shows
are no longer used
production
How Big?
release risk
# services
Backends for Frontends
https://www.thoughtworks.com/insights/blog/b-soundcloud
Backends for Frontends
BFF as Migration Path
what problem
characteristics
engineering
AGENDA
Design For Failure
clients must respond gracefully to
provider failure
aggressive monitoring:
- business relevant
- architectural
- semantic
Monitoring
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
You have to get much better at
monitoring.
Sam Newman
Aggregating Monitors
Response Time
Response Time
Response Time
Aggregating Monitors
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Capture metrics, and logs, for
each node, and aggregate them
to get a rolled up picture.
Sam Newman
Synthetic Transactions
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Use synthetic transactions to test
production systems.
Sam Newman
Correlation IDs ID: 123
ID: 123
ID: 123
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Use correlation IDs to track
down nasty bugs
Sam Newman
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Use timeouts, circuit breakers
and bulk-heads to avoid
cascading failure.
Sam Newman
Engineering Consistency
integration
metrics service behavior
Building downstream
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Consider Service Templates to
make it easy to do the right
thing!
Sam Newman
Orchestration
Orchestration describes the
automated arrangement,
coordination, and management of
complex computer systems,
middleware, and services.
http://en.wikipedia.org/wiki/Orchestration_(computing)
choreography vs. orchestration
in
microservices
Orchestration
recalc
quote
change update
address claims
notify
insured
Choreography
recalc update
quote claims
change
address
notify
insured
mediator versus broker topology
http://shop.oreilly.com/product/110000195.do
Testing Microservices
http://martinfowler.com/articles/microservice-testing/
Test Pyramid for Microservices
Inside the Box
Unit Testing
Sociable
Solitary
Integration Testing
Integration Testing
Component Testing
Component Testing
shims:
inproctester
github.com/aharin/inproctester
Plasma
github.com/jennifersmith/plasma
Component Testing
Consumer Driven Contracts
http://martinfowler.com/articles/consumerDrivenContracts.html
Contract Testing
Pact
github.com/realestate-com-au/pact
Pacto
github.com/thoughtworks/pacto
Janus
github.com/gga/janus
focus on personas
& user journeys End-to-End Testing
as few as possible
make tests
data-independent
choose endpoints wisely
rely on infrastructure as code for repeatability
Deployment
engineering
Building
Microservices
Abstract out underlying
DESIGNING FINE-GRAINED SYSTEMS
platform dierences to provide a
uniform deployment
Sam Newman mechanism.
Dont Let Changes Build Up
staging production
Dont Let Changes Build Up
staging production
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
Dont let changes build up -
release as soon as you can, and
preferably one at a time!
Sam Newman
Service Discovery
Dynamic Service Registries
https://consul.io/
http://zookeeper.apache.org
https://coreos.com/etcd/
Service Visualization
https://github.com/adrianco/spigo
Tools
www.devopsbookmarks.com/
Turnkey Platforms
Turnkey Platforms
https://www.hashicorp.com/blog/otto.html
what problem
characteristics
engineering
AGENDA
You must be
this tall to use
microservices
(Micro)service architectures provide unique
benets at the cost of increased (essential)
complexity.
If you can't build a monolith,
what makes you think
microservices are the answer?
www.codingthearchitecture.com/2014/07/06/distributed_big_balls_of_mud.html
Service-based Architecture
is there a middle ground?
service-oriented microservices
architecture architecture
service-based
architecture
Service-based Architecture
service database integration
granularity scope hub
Migration
Partition Along Natural Boundaries
Build a small number of larger services first.
domain
transactional
structural
organizational
Inverse Conway Maneuver
Build teams that look like
domain
the architecture you want
(and it will follow).
case study: RealEstate.com.au
Efferent Coupling
efferent
Strive for low efferent
coupling for your team.
Continuous Delivery
Teams with low eerent coupling
deliver relatively independently
into a common integration
pipeline (without fearing breaking
each others builds).
nealford.com
@neal4d
nealford.com/videos
nealford.com/books
www.oreilly.com/software-architecture-video-training-series.html