SlideShare una empresa de Scribd logo
1 de 127
Descargar para leer sin conexión
Microservices:
Redundancy =
Maintainability!
Eberhard Wolff
@ewolff
Fellow
innoQ
http://continuous-delivery-buch.de/
http://microservices-buch.de/ http://microservices-book.com/
http://microservices-book.com/primer.html
FREE!!!!
Maintainablity
Redundant data
Redudant code
Legacy System
Too many dependencies
Cyclic dependencies
(dotted lines)
> COBOL, Assembler
> Not maintainable
> Not replaceable
L
> We will replace it!
> We will make it maintainable!
> It will be beautiful!
We will take good care
of the code!
Clean
Like
Spring
Clean Architecture
Developer
Developer
Result?
> Legacy System
> Java
> Not maintainable
> Not replaceable
L
> We didn’t try hard enough!
> We will replace it!
> We will make it maintainable!
> It will be beautiful!
LI need a new job.
While there are still
developers:
Replace the legacy system.
Repeat
Insanity:
Doing the same thing
over and over again
and expecting different
results.
Albert Einstein
We can achieve
maintainability with
clean architecture +
clean code.
We can achieve
maintainability with
clean architecture +
clean code.
Clean approach tried often.
Results?
Lots of Legacy Code
…and secure jobs.
We need a different
approach!
Parnas 1972
Modules
ECommerce
System
Order
Catalog
Billing
Search
Modules by Domain
> Each domain problem solved
in one module.
> New features easy to add
Modules
> Programming language feature
> Class, package, library …
> Rather weak modules
Developer
Microservices
> Modules
> Separate deployment units
> Separate VM / process
Server Server
Micro
Service
Micro
Service
ECommerce
System
Order
Catalog
Billing
Search
Module = separate
deployment units!
ECommerce
System
Order
Catalog
Billing
Search
Module = separate
deployment units!
Communication e.g. REST
REST REST
ECommerce
System
Order
Catalog
Billing
Search
Dependencies between
systems cannot sneak in
ECommerce
System
Order
Catalog
Billing
Search
Dependencies between
systems cannot sneak in
ECommerce
System
Order
Catalog
Billing
Search
Dependencies between
systems cannot sneak in
“Architecture Firewalls”
“Architecture Firewall”
like REST
enforce the architecture
ECommerce
System
Order
Catalog
Billing
Search
Components small
ECommerce
System
Order
Catalog
Billing
Search
Components small
Hard to mess up
ECommerce
System
Order
Catalog
Billing
Search
Components small
Hard to mess up
ECommerce
System
Catalog
Billing
Search
Components small
Hard to mess up
ECommerce
System
Order
Catalog
Billing
Search
Components small
Hard to mess up
Replace if messed up.
Small,
independent deployable
modules
are recyclable.
Recycle your
software!
!
How many people
are trying
to replace legacy
systems?
Replaceability
is usually no goal
for a software project.
Why??
We can achieve
maintainability with
clean architecture +
clean code
We can achieve
maintainability with
architecture firewalls +
recyclable modules
Maintainability
Redundancy
Redundancy
Redundant data
Every information
should be stored and
updated in one place.
No redundancy for
our product data!
ECommerce
System
Products
database
ECommerce
System
Invoicing
System
Products
database
ECommerce
System
Invoicing
System
Products
database
Products
database
ECommerce
System
Products
database
Invoicing
System
ECommerce
System
Products
database
Invoicing
System
Purchase
System
ECommerce
System
Products
database
Invoicing
System
Purchase
System
Marketing
System
Products
data model?
No redundancies
High complexity
Hard to change
A central,
redundancy-free data model
is the optimum.
A central,
redundancy-free data model
is the optimum.
UBIQUITOUS
LANGUAGE
VALUE
OBJECT
ENTITY
Address
VALUE
OBJECT
ENTITYor
529 pages
Part IV
Chapter 14
A domain model
is only useful
in a Bounded Context.
There is no
universal data model
in a large system.
Let me repeat:
There is no
universal data model
in a large system.
Address
for a customer
VALUE
OBJECT
ENTITYor
Address
for calculating the
drones’ routes
VALUE
OBJECT
ENTITYor
ECommerce
System
Products
Invoicing
System
Purchase
System
Marketing
System
ECommerce
System
Invoicing
System
Purchase
System
Marketing
System
BOUNDED
CONTEXT
BOUNDED
CONTEXT
BOUNDED
CONTEXT
BOUNDED
CONTEXT
Create a model
for each BOUNDED CONTEXT.
Each BOUNDED CONTEXT
can be a Microservice
with its own database schema
Low complexity
Easy to change
i.e. easy to maintain
Few redundancies
Separate facets
ECommerce
System
Invoicing
System
Purchase
System
Marketing
System
Product:
Image
Product:
Price
Product:
Supplier
Product:
Brochure
A central,
redundancy-free data model
is the optimum.
A central,
“redundancy-free”
data model
is often hard to maintain
and wrong.
Redundancy
Redundant data
Redundancy
Redundant code
Redundant code:
The ultimate sin
> Fix bug in many different place
> Decisions implemented in
many places
> ...and hard to change
DRY
Don’t
Repeat
Yourself
DRY Systems?
Great!
DRY between systems?
DRY is a trade-off
System System System System
common common common common
System System System System
common abstraction
Reuse:
The Holy Grail
of the nineties
So where are all the
reusable internal
frameworks?
Premature optimization,
that’s like a sneeze.
Premature abstraction
is like Ebola;
it makes my eyes bleed.
Christer Ericson
The entire history of
software engineering
is that of the
rise in levels of abstraction.
Grady Booch
Using code is hard.
Reusing code is almost
impossible.
But we are reusing Open
Source all the time!
Create an Open
Source project!
Open Source
> Good code quality
> Documentation
> Model to accept contributions
“But high quality Open Source is hard.
We just share code!”
“You only provide high quality as Open
Source…
...but for colleagues low quality is OK?”
Let’s assume it’s possible to reuse code.
Reuse is still a tradeoff.
System System System System
common common common common
System System System System
abstraction
System System System System
abstraction
Change!
System System System System
abstractionChange!
System System System System
abstractionChange!
Impact Impact Impact
System System System System
abstractionChange!
Impact Impact Impact
Now we have reuse
…and a dependency.
Dependency not just
in software!
System System System System
common abstractionChange!
Impact Impact Impact
Dependency between teams
Coordination
Meetings
Getting no real work done
L
Reuse is a tradeoff:
Reuse vs.
Independence
Independence=
Easy to change=
Maintainability
Independence is important
for self-organization.
Self-organization =
deciding yourself
Not meetings upon meetings
Deciding yourself
is only possible,
if teams and modules
are independent.
Redundancies between
systems must be avoided.
Redundancies between
systems must be avoided.
Reuse is a tradeoff:
Reuse vs.
Independence
Microservices focus
on independence
The Microservices
Manifesto ;-)
Microservices
Manifesto ;-)
We value:
Replaceability over
maintainability
Microservices
Manifesto ;-)
We value:
BOUNDED CONTEXT over
redundancy-free data
Microservices
Manifesto ;-)
We value:
Independence over
“Don’t Repeat Yourself!”
Replaceability over
maintainability
BOUNDED CONTEXT over
redundant-free data
Independence over DRY

Más contenido relacionado

Destacado

Redundancy
RedundancyRedundancy
Redundancy
Sheila A
 

Destacado (14)

Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support Agile
 
Redundancy
RedundancyRedundancy
Redundancy
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to Microservices
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale Agile
 
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale Agile
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for Microservices
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology Stack
 
Redundancy
RedundancyRedundancy
Redundancy
 
Infrastructure for Continuous Delivery & Microservices: PaaS or Docker?
Infrastructure for Continuous Delivery & Microservices: PaaS or Docker?Infrastructure for Continuous Delivery & Microservices: PaaS or Docker?
Infrastructure for Continuous Delivery & Microservices: PaaS or Docker?
 
There is no such thing as a microservice! (oracle code nyc)
There is no such thing as a microservice! (oracle code nyc)There is no such thing as a microservice! (oracle code nyc)
There is no such thing as a microservice! (oracle code nyc)
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 

Similar a Microservices: Redundancy=Maintainability

Solvcon PyCon APAC 2014
Solvcon PyCon APAC 2014Solvcon PyCon APAC 2014
Solvcon PyCon APAC 2014
weijr
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
guest446c0
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
James Peckham
 

Similar a Microservices: Redundancy=Maintainability (20)

Microservices: Redundancy = Maintainability! (Eberhard Wolff Technology Stream)
Microservices: Redundancy = Maintainability! (Eberhard Wolff Technology Stream)Microservices: Redundancy = Maintainability! (Eberhard Wolff Technology Stream)
Microservices: Redundancy = Maintainability! (Eberhard Wolff Technology Stream)
 
Accelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAccelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and Microservices
 
Solvcon PyCon APAC 2014
Solvcon PyCon APAC 2014Solvcon PyCon APAC 2014
Solvcon PyCon APAC 2014
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
 
We need revisions and CRAP everywhere in Drupal core
We need revisions and CRAP everywhere in Drupal coreWe need revisions and CRAP everywhere in Drupal core
We need revisions and CRAP everywhere in Drupal core
 
DevOps demystified
DevOps demystifiedDevOps demystified
DevOps demystified
 
Dev Environments: The Next Generation
Dev Environments: The Next GenerationDev Environments: The Next Generation
Dev Environments: The Next Generation
 
At the Trailhead with Matt Stine
At the Trailhead with Matt StineAt the Trailhead with Matt Stine
At the Trailhead with Matt Stine
 
Relational Database CI/CD
Relational Database CI/CDRelational Database CI/CD
Relational Database CI/CD
 
Container Soup for Your Soul: The Microservice Edition, Building Deployment ...
 Container Soup for Your Soul: The Microservice Edition, Building Deployment ... Container Soup for Your Soul: The Microservice Edition, Building Deployment ...
Container Soup for Your Soul: The Microservice Edition, Building Deployment ...
 
A sweet taste of clean code and software design
A sweet taste of clean code and software designA sweet taste of clean code and software design
A sweet taste of clean code and software design
 
CQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architectureCQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architecture
 
A Tale of Contemporary Software
A Tale of Contemporary SoftwareA Tale of Contemporary Software
A Tale of Contemporary Software
 
Keep calms and Docker On ... Innotech
Keep calms and Docker On ... InnotechKeep calms and Docker On ... Innotech
Keep calms and Docker On ... Innotech
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new build
 
Moving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed TracesMoving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed Traces
 
Continuous deployment of polyglot microservices: A practical approach
Continuous deployment of polyglot microservices: A practical approachContinuous deployment of polyglot microservices: A practical approach
Continuous deployment of polyglot microservices: A practical approach
 
The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To Know
 
What DevOps Isn't
What DevOps Isn'tWhat DevOps Isn't
What DevOps Isn't
 

Más de Eberhard Wolff

Más de Eberhard Wolff (15)

Architectures and Alternatives
Architectures and AlternativesArchitectures and Alternatives
Architectures and Alternatives
 
Beyond Microservices
Beyond MicroservicesBeyond Microservices
Beyond Microservices
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous Delivery
 
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncFour Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, Async
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with Java
 
Top Legacy Sins
Top Legacy SinsTop Legacy Sins
Top Legacy Sins
 
REST vs. Messaging For Microservices
REST vs. Messaging For MicroservicesREST vs. Messaging For Microservices
REST vs. Messaging For Microservices
 
Continuous Delivery, DevOps, Cloud - New Requirements for New Architectures
Continuous Delivery, DevOps, Cloud - New Requirements for New ArchitecturesContinuous Delivery, DevOps, Cloud - New Requirements for New Architectures
Continuous Delivery, DevOps, Cloud - New Requirements for New Architectures
 
Microservices: Architecture for Agile Software Development
Microservices: Architecture for Agile Software DevelopmentMicroservices: Architecture for Agile Software Development
Microservices: Architecture for Agile Software Development
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
 
Microservice - All is Small, All is Well?
Microservice - All is Small, All is Well?Microservice - All is Small, All is Well?
Microservice - All is Small, All is Well?
 
Legacy Sins
Legacy SinsLegacy Sins
Legacy Sins
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?NoSQL Riak MongoDB Elasticsearch - All The Same?
NoSQL Riak MongoDB Elasticsearch - All The Same?
 
Micro Service – The New Architecture Paradigm
Micro Service – The New Architecture ParadigmMicro Service – The New Architecture Paradigm
Micro Service – The New Architecture Paradigm
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 

Microservices: Redundancy=Maintainability