microservices: redundancy=maintainability

127
Microservices: Redundancy = Maintainability! Eberhard Wolff @ewolff Fellow innoQ

Upload: eberhard-wolff

Post on 16-Apr-2017

1.091 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Microservices: Redundancy=Maintainability

Microservices:Redundancy =

Maintainability!Eberhard Wolff

@ewolffFellowinnoQ

Page 2: Microservices: Redundancy=Maintainability

http://continuous-delivery-buch.de/

Page 3: Microservices: Redundancy=Maintainability

http://microservices-buch.de/ http://microservices-book.com/

Page 4: Microservices: Redundancy=Maintainability

http://microservices-book.com/primer.html

FREE!!!!

Page 5: Microservices: Redundancy=Maintainability

Maintainablity

Redundant data

Redudant code

Page 6: Microservices: Redundancy=Maintainability

Legacy System

Page 7: Microservices: Redundancy=Maintainability
Page 8: Microservices: Redundancy=Maintainability

Too many dependencies

Cyclic dependencies(dotted lines)

Page 9: Microservices: Redundancy=Maintainability

> COBOL, Assembler

> Not maintainable

> Not replaceable

Page 10: Microservices: Redundancy=Maintainability

L

Page 11: Microservices: Redundancy=Maintainability

> We will replace it!

> We will make it maintainable!

> It will be beautiful!

Page 12: Microservices: Redundancy=Maintainability

We will take good care of the code!

Page 13: Microservices: Redundancy=Maintainability

CleanLikeSpring

Page 14: Microservices: Redundancy=Maintainability

Clean Architecture

Page 15: Microservices: Redundancy=Maintainability

Developer

Page 16: Microservices: Redundancy=Maintainability

Developer

Page 17: Microservices: Redundancy=Maintainability

Result?

Page 18: Microservices: Redundancy=Maintainability
Page 19: Microservices: Redundancy=Maintainability

> Legacy System

> Java

> Not maintainable

> Not replaceable

Page 20: Microservices: Redundancy=Maintainability

L

Page 21: Microservices: Redundancy=Maintainability

> We didn’t try hard enough!

> We will replace it!

> We will make it maintainable!

> It will be beautiful!

Page 22: Microservices: Redundancy=Maintainability

LI need a new job.

Page 23: Microservices: Redundancy=Maintainability

While there are still developers:

Replace the legacy system.

Repeat

Page 24: Microservices: Redundancy=Maintainability

Insanity:Doing the same thingover and over againand expecting different results.

Albert Einstein

Page 25: Microservices: Redundancy=Maintainability

We can achievemaintainability withclean architecture +clean code.

Page 26: Microservices: Redundancy=Maintainability

We can achievemaintainability withclean architecture +clean code.

Page 27: Microservices: Redundancy=Maintainability

Clean approach tried often.

Results?

Page 28: Microservices: Redundancy=Maintainability

Lots of Legacy Code

…and secure jobs.

Page 29: Microservices: Redundancy=Maintainability

We need a different approach!

Page 30: Microservices: Redundancy=Maintainability

Parnas 1972

Modules

Page 31: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Page 32: Microservices: Redundancy=Maintainability

Modules by Domain

> Each domain problem solved in one module.

> New features easy to add

Page 33: Microservices: Redundancy=Maintainability

Modules

> Programming language feature

> Class, package, library …

> Rather weak modules

Page 34: Microservices: Redundancy=Maintainability

Developer

Page 35: Microservices: Redundancy=Maintainability

Microservices

> Modules

> Separate deployment units

> Separate VM / process

Page 36: Microservices: Redundancy=Maintainability

Server Server

MicroService

MicroService

Page 37: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Module = separatedeployment units!

Page 38: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Module = separatedeployment units!

Communication e.g. REST

Page 39: Microservices: Redundancy=Maintainability

REST REST

Page 40: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Dependencies betweensystems cannot sneak in

Page 41: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Dependencies betweensystems cannot sneak in

Page 42: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Dependencies betweensystems cannot sneak in

“Architecture Firewalls”

Page 43: Microservices: Redundancy=Maintainability

“Architecture Firewall”like RESTenforce the architecture

Page 44: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Components small

Page 45: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Components small

Hard to mess up

Page 46: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Components small

Hard to mess up

Page 47: Microservices: Redundancy=Maintainability

ECommerceSystem

Catalog

BillingSearch

Components small

Hard to mess up

Page 48: Microservices: Redundancy=Maintainability

ECommerceSystem

Order

Catalog

BillingSearch

Components small

Hard to mess upReplace if messed up.

Page 49: Microservices: Redundancy=Maintainability

Small,independent deployablemodulesare recyclable.

Page 50: Microservices: Redundancy=Maintainability

Recycle your software!!

Page 51: Microservices: Redundancy=Maintainability

How many peopleare tryingto replace legacy systems?

Page 52: Microservices: Redundancy=Maintainability

Replaceabilityis usually no goalfor a software project.

Why??

Page 53: Microservices: Redundancy=Maintainability

We can achievemaintainability withclean architecture +clean code

Page 54: Microservices: Redundancy=Maintainability

We can achievemaintainability witharchitecture firewalls +recyclable modules

Page 55: Microservices: Redundancy=Maintainability

Maintainability�

Page 56: Microservices: Redundancy=Maintainability

Redundancy

Page 57: Microservices: Redundancy=Maintainability

RedundancyRedundant data

Page 58: Microservices: Redundancy=Maintainability

Every information should be stored and updated in one place.

Page 59: Microservices: Redundancy=Maintainability

No redundancy forour product data!

Page 60: Microservices: Redundancy=Maintainability

ECommerceSystem

Productsdatabase

Page 61: Microservices: Redundancy=Maintainability

ECommerceSystem

InvoicingSystem

Productsdatabase

Page 62: Microservices: Redundancy=Maintainability

ECommerceSystem

InvoicingSystem

Productsdatabase

Productsdatabase

Page 63: Microservices: Redundancy=Maintainability

ECommerceSystem

Productsdatabase

InvoicingSystem

Page 64: Microservices: Redundancy=Maintainability

ECommerceSystem

Productsdatabase

InvoicingSystem

PurchaseSystem

Page 65: Microservices: Redundancy=Maintainability

ECommerceSystem

Productsdatabase

InvoicingSystem

PurchaseSystem

MarketingSystem

Page 66: Microservices: Redundancy=Maintainability

Productsdata model?

Page 67: Microservices: Redundancy=Maintainability
Page 68: Microservices: Redundancy=Maintainability

No redundancies

High complexity

Hard to change

Page 69: Microservices: Redundancy=Maintainability

A central,redundancy-free data modelis the optimum.

Page 70: Microservices: Redundancy=Maintainability

A central,redundancy-free data modelis the optimum.

Page 71: Microservices: Redundancy=Maintainability

UBIQUITOUSLANGUAGE

VALUEOBJECT

ENTITY

Page 72: Microservices: Redundancy=Maintainability

Address

VALUEOBJECT

ENTITYor

Page 73: Microservices: Redundancy=Maintainability

529 pagesPart IVChapter 14

Page 74: Microservices: Redundancy=Maintainability

A domain modelis only usefulin a Bounded Context.

Page 75: Microservices: Redundancy=Maintainability

There is nouniversal data modelin a large system.

Page 76: Microservices: Redundancy=Maintainability

Let me repeat:

Page 77: Microservices: Redundancy=Maintainability

There is nouniversal data modelin a large system.

Page 78: Microservices: Redundancy=Maintainability

Addressfor a customer

VALUEOBJECT

ENTITYor

Page 79: Microservices: Redundancy=Maintainability

Addressfor calculating the

drones’ routes

VALUEOBJECT

ENTITYor

Page 80: Microservices: Redundancy=Maintainability

ECommerceSystem

Products

InvoicingSystem

PurchaseSystem

MarketingSystem

Page 81: Microservices: Redundancy=Maintainability

ECommerceSystem

InvoicingSystem

PurchaseSystem

MarketingSystem

BOUNDED

CONTEXT

BOUNDED

CONTEXT

BOUNDED

CONTEXT

BOUNDED

CONTEXT

Page 82: Microservices: Redundancy=Maintainability

Create a modelfor each BOUNDED CONTEXT.

Page 83: Microservices: Redundancy=Maintainability

Each BOUNDED CONTEXTcan be a Microservicewith its own database schema

Page 84: Microservices: Redundancy=Maintainability

Low complexity

Easy to change

i.e. easy to maintain

Page 85: Microservices: Redundancy=Maintainability
Page 86: Microservices: Redundancy=Maintainability

Few redundancies

Separate facets

Page 87: Microservices: Redundancy=Maintainability

ECommerceSystem

InvoicingSystem

PurchaseSystem

MarketingSystem

Product:Image

Product:Price

Product:Supplier

Product:Brochure

Page 88: Microservices: Redundancy=Maintainability

A central,redundancy-free data modelis the optimum.

Page 89: Microservices: Redundancy=Maintainability

A central,“redundancy-free”data modelis often hard to maintainand wrong.

Page 90: Microservices: Redundancy=Maintainability

RedundancyRedundant data �

Page 91: Microservices: Redundancy=Maintainability

RedundancyRedundant code

Page 92: Microservices: Redundancy=Maintainability

Redundant code:The ultimate sin> Fix bug in many different place

> Decisions implemented in many places

> ...and hard to change

Page 93: Microservices: Redundancy=Maintainability

DRYDon’t

RepeatYourself

Page 94: Microservices: Redundancy=Maintainability

DRY Systems?Great!

DRY between systems?DRY is a trade-off

Page 95: Microservices: Redundancy=Maintainability

System System System System

common common common common

Page 96: Microservices: Redundancy=Maintainability

System System System System

common abstraction

Page 97: Microservices: Redundancy=Maintainability

Reuse:The Holy Grailof the nineties

So where are all the reusable internal frameworks?

Page 98: Microservices: Redundancy=Maintainability

Premature optimization,that’s like a sneeze.Premature abstractionis like Ebola;it makes my eyes bleed.

Christer Ericson

Page 99: Microservices: Redundancy=Maintainability

The entire history ofsoftware engineeringis that of therise in levels of abstraction.

Grady Booch

Page 100: Microservices: Redundancy=Maintainability

Using code is hard.

Reusing code is almost impossible.

But we are reusing Open Source all the time!

Page 101: Microservices: Redundancy=Maintainability

Create an Open Source project!

Page 102: Microservices: Redundancy=Maintainability

Open Source

> Good code quality

> Documentation

> Model to accept contributions

Page 103: Microservices: Redundancy=Maintainability

“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?”

Page 104: Microservices: Redundancy=Maintainability

Let’s assume it’s possible to reuse code.

Reuse is still a tradeoff.

Page 105: Microservices: Redundancy=Maintainability

System System System System

common common common common

Page 106: Microservices: Redundancy=Maintainability

System System System System

abstraction

Page 107: Microservices: Redundancy=Maintainability

System System System System

abstraction

Change!

Page 108: Microservices: Redundancy=Maintainability

System System System System

abstractionChange!

Page 109: Microservices: Redundancy=Maintainability

System System System System

abstractionChange!

Impact Impact Impact

Page 110: Microservices: Redundancy=Maintainability

System System System System

abstractionChange!

Impact Impact Impact

Page 111: Microservices: Redundancy=Maintainability

Now we have reuse

…and a dependency.

Page 112: Microservices: Redundancy=Maintainability

Dependency not just in software!

Page 113: Microservices: Redundancy=Maintainability

System System System System

common abstractionChange!

Impact Impact Impact

Page 114: Microservices: Redundancy=Maintainability

Dependency between teams

Coordination

Meetings

Getting no real work done

Page 115: Microservices: Redundancy=Maintainability

L

Page 116: Microservices: Redundancy=Maintainability

Reuse is a tradeoff:

Reuse vs.Independence

Independence=Easy to change=Maintainability

Page 117: Microservices: Redundancy=Maintainability

Independence is importantfor self-organization.

Self-organization =deciding yourself

Not meetings upon meetings

Page 118: Microservices: Redundancy=Maintainability

Deciding yourselfis only possible,if teams and modulesare independent.

Page 119: Microservices: Redundancy=Maintainability

Redundancies betweensystems must be avoided.

Page 120: Microservices: Redundancy=Maintainability

Redundancies betweensystems must be avoided.

Page 121: Microservices: Redundancy=Maintainability

Reuse is a tradeoff:

Reuse vs.Independence

Page 122: Microservices: Redundancy=Maintainability

Microservices focus

on independence

Page 123: Microservices: Redundancy=Maintainability

The MicroservicesManifesto ;-)

Page 124: Microservices: Redundancy=Maintainability

MicroservicesManifesto ;-)

We value:Replaceability overmaintainability

Page 125: Microservices: Redundancy=Maintainability

MicroservicesManifesto ;-)

We value:BOUNDED CONTEXT overredundancy-free data

Page 126: Microservices: Redundancy=Maintainability

MicroservicesManifesto ;-)

We value:Independence over“Don’t Repeat Yourself!”

Page 127: Microservices: Redundancy=Maintainability

Replaceability over maintainability

BOUNDED CONTEXT over redundant-free data

Independence over DRY