A Pattern Language for Microservices
-
Upload
chris-richardson -
Category
Software
-
view
541 -
download
0
Transcript of A Pattern Language for Microservices
@crichardson
A pattern language for microservices
Chris Richardson
Founder of Eventuate.io Founder of the original CloudFoundry.com Author of POJOs in Action
@crichardson [email protected] http://learnmicroservices.io
Copyright © 2017. Chris Richardson Consulting, Inc. All rights reserved
@crichardson
Presentation goal
Overview of the microservice architecture pattern language
and how to use it to architect an
application
@crichardson
About Chris
@crichardson
About Chris
Consultant and trainer focusing on modern
application architectures including microservices
(http://www.chrisrichardson.net/)
@crichardson
About Chris
Founder of a startup that is creating an open-source/SaaS platform
that simplifies the development of transactional microservices
(http://eventuate.io)
@crichardson
About Chris
http://learnmicroservices.io
@crichardson
The paper that never made it to PLoP 2001
@crichardson
Agenda
Why microservices?
Benefits of the microservice architecture
Microservices != silver bullet
The microservice pattern language
Applying the microservice pattern language
@crichardson
Modern software development: moving fast and not breaking things!
46x
440x
24x
5x lower
Amazon: ~0.001%
Netflix: 16 minutes
@crichardson
How to move fast and not break things?
Architecture:
Process:
Small, autonomous teams ????
DevOps/Continuous delivery/deployment
Organization:
@crichardson
The monolithic architecture
Tomcat
Browser
WAR
SQL database
HTML
REST/JSON
Client App
Simple to ….
Develop Test
Deploy Scale
Catalog Module
Reviews Module
Orders Module
StoreFront UI Module
@crichardson
But successful applications keep
growing ….
@crichardson
… and modularity breaks down…
http://www.laputan.org/mud/
“Shantytowns are squalid, sprawling slums.”
@crichardson
Monolithic hell
Agile development and deployment
becomes impossible
By John Martin, Public Domain, https://commons.wikimedia.org/w/index.php?curid=3353638
@crichardson
Monolithic hell:
Technology stack becomes increasingly obsolete BUT a rewrite is not feasible
The microservice architecture is an architectural style that
structures an application as a set of loosely coupled, services
organized around business capabilities
@crichardson
The Microservice architecture tackles complexity through
modularization
Improved scalability is secondary
*
@crichardson
Microservice architecture
Browser
Mobile Device
Content Router
API Gateway
Catalog Service
Review Service
Order Service
… Service
Catalog Database
Review Database
Order Database
… Database
HTTP /HTML
REST
REST
Browse & Search WebApp
Product Detail WebApp
….
@crichardson
Agenda
Why microservices?
Benefits of the microservice architecture
Microservices != silver bullet
The microservice pattern language
Applying the microservice pattern language
@crichardson
Microservices enable continuous delivery/deployment
Process: Continuous delivery/deployment
Organization:Small, agile, autonomous,
cross functional teams
Architecture: Microservice architecture
Enables
Enables Enables
SuccessfulSoftware
Development
Services =
testability and
deployability
Teams own services
@crichardson
Smaller, simpler applications
Easier to understand, develop and test
Less jar/classpath hell - who needs OSGI?
Faster to build, test and deploy
Reduced startup time - improves MTTR
Scales development: develop, deploy and scale each service independently
Small, autonomous teams
Clearly defined responsibilities
Catalog Service
Review Service
Order Service
… Service
Catalog Team
Review Team
Order Team
… Team
Responsible for
@crichardson
Easier to scale
@crichardson
Improves fault isolation
@crichardson
Easily evolve your technology stack
... and fail safely
@crichardson
Agenda
Why microservices?
Benefits of the microservice architecture
Microservices != silver bullet
The microservice pattern language
Applying the microservice pattern language
@crichardson
No silver bullets
http://en.wikipedia.org/wiki/Fred_Brooks
@crichardson
Complexity
http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
@crichardson
Complexity of developing a distributed system
@crichardson
Multiple databases &
Transaction managementMust use event-driven eventual consistency
@crichardson
Complexity of testing a distributed system
@crichardson
Complexity of deploying and operating a distributed system
You need a lot of automation: VM/container
orchestration or PaaS
@crichardson
Developing and deploying features that span multiple services requires careful coordination
@crichardson
Agenda
Why microservices?
Benefits of the microservice architecture
Microservices != silver bullet
The microservice pattern language
Applying the microservice pattern language
@crichardson
Are microservices a good fit for my application?
@crichardson
When using microservices:How to decompose an application into services?
How to deploy an application’s services?How to handle cross cutting concerns?
Which communication mechanisms to use?
How do external clients communicate with the services?
How does a client discover the network location of a service instance?
How to prevent a network or service failure from cascading to other services?
How to maintain data consistency and implement queries?
How to make testing easier?
How to understand the behavior of an application and troubleshoot problems?
How to implement a UI screen or page that displays data from multiple services?
@crichardson
Microservice pattern language =
collection of patterns that solve these
architecture, design, development and operational problems
@crichardson
What’s a pattern?
Reusable solution to a problem
occurring in a particular context
@crichardson
The structure of a pattern encourages objectivity
Resulting context
aka the situation
Name
Context
Problem
Related patterns
(conflicting) issues etc to address Forces
Solution Benefits
Drawbacks
Issues to resolve
Alternatives
Solutions to issues
@crichardson
Microservice architecture pattern
Context Developing large, complex architecture
Problem What’s the runtime architecture?
Benefits Faster development Easy adopt new technologies
Drawbacks Complexity of a distributed system
Issues Decomposition Distributed system issues: IPC, discovery, …
Alternative patterns Monolithic architecture
Successor patterns Service Registry, API Gateway, …
@crichardson
Microservices pattern language: http://microservices.io
@crichardson
Microservices pattern language: layers
@crichardson
Agenda
Why microservices?
Benefits of the microservice architecture
Microservices != silver bullet
The microservice pattern language
Applying the microservice pattern language
@crichardson
The pattern language guides you when developing an architecture
What architectural decisions you must make
For each decision:
Available options
Trade-offs of each option
@crichardson
Predecessor - Successor ⇒
Sequence?
@crichardson
Key patterns
Problem: What’s the architecture?Forces
Maintainability
Deployability
Testability
Extensibility
…
Monolithic architecture
Microservice architecture
Single deployable/executable OR
Tightly coupled services
Multiple loosely coupled services
Problem: How to decompose an application into services?
Forces
Stability
Cohesive
Loosely coupled
Not too large
Decompose bybusiness capability
Decompose bysubdomain
Organize around business capabilities
Organize around DDD subdomains
Problem: how to ensure services are loosely coupled?
Forces:
Services must be loosely coupled
Evolving schema of shared database = coordination
… Ensures loose coupling
@crichardson
Problem: how to maintain data consistency?Context
• Each service has its own database
• Data is private to a service
Forces
Transactional data consistency must be maintained across multiple services
2PC is not an option
@crichardson
Problem: how to perform queries?
CQRS
Context
Each service has its own database
Forces
Queries must join data from multiple services
Data is private to a serviceMaintain query views by subscribing to events
API Composition
@crichardson
Problem: How do services communicate?
Messaging Remote ProcedureInvocation
Domain-specific
Forces
Services must communicate
Usually processes on different machines
…
@crichardson
The rest are generic technical architecture patterns
= Undifferentiated heavy lifting!
@crichardson
Problem: How to handle cross cutting concerns?
Microservice Chassis
Forces
Every service must implement logging; externalize configuration; health check endpoint; metrics; …
Problem: How to deploy an application’s services?
Multiple Services per host
Single Service per Host
Service-per-Container
Service-per-VM
Serverless deployment
Service deployment platform
Forces
Multiple languages
Isolated
Constrained
Monitor-able
Reliable
Efficient
@crichardson
Problem: How to discover a service instance’s network location?
Client-side discovery
Server-side discovery
Service registry
Self registration
3rd party registration
Forces
Client needs IP address of service instance
Dynamic IP addresses
Dynamically provisioned instances
@crichardson
Problem: How do external clients communicate with the services?
API gateway
Backend for front end
@crichardson
Problem: How to prevent a network or service failure from cascading?
Circuit Breaker
@crichardson
Problem: how to monitor the behavior of your application?
Exception tracking
Distributed tracing
Audit logging Application metrics
Log aggregation
Health check API
@crichardson
Summary
The monolithic architecture is a good choice for small/simple applications
Use the microservice architecture for large/complex applications
Microservice architecture != silver bullet
Use the microservice architecture pattern language to guide your decision making