108
@koenighotze #Voxxed #10TipsMicroservices 10 Tips for failing badly at Microservices David Schmitz Senacor Technologies

10 Tips for failing at microservices

Embed Size (px)

Citation preview

Page 1: 10 Tips for failing at microservices

@koenighotze#Voxxed #10TipsMicroservices

10 Tips for failing badly at Microservices

David Schmitz Senacor Technologies

Page 2: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

David Schmitz / @koenighotze

Senacor Technologies

Principal Architect

Programmer

That’s me coding EJBs

Page 3: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Disclaimer

This is not YOU! Opinions are my OWN!TM

Page 4: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

What’s in it for you?

Your boss want’s to modernise, but you don’t

Things to do to sabotage your project

Lessons learned the hard way

Things have been anonymised to protect the guilty

Page 5: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The Boss read about microservices?

Page 6: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Extreme agile cloud native digital

microservices!

Disrupt or be disrupted!

Sounds good. And cloud and agile equal

good?!?Industry 4.0!

FTW!

Page 7: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

“IT People! Make it happen! Build me some microservices”

Page 8: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

What the hell is a microservice and why should I care?

Page 9: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Microservices IMHO

Single Bounded Context

UI and Services

Independent

Self-Contained

Local storage

Share nothing

User Interface

Services

Persistence

Operations

Page 10: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Whatever! BLAH BLAH

User Interface

Services

Persistence

Operations

Too lazy to actually read all

this stuff…looks boring and I

want to look at funny cat

pics.

Page 11: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Sabotage Extravaganza

Follow these

Page 12: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Sabotage Extravaganza10 9 8 7 6 5 4 3 2 1

Direction of Awesomeness

Page 13: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

10 - Go Full-Scale-Polyglot

Page 14: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Page 15: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Waldo-Tech Stack

Page 16: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Technical knowledge - Excitement

Groundhog Code - Redevelop solutions

Maintenance field trips

Heisenberg monitoring & Ops

The Zoo of Technology

Page 17: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Jump the Bandwagon$ npm ls | grep @0 [email protected] │ ├─┬ [email protected] │ │ │ ├─┬ [email protected] │ │ │ │ └── [email protected] │ │ └── [email protected] ├─┬ [email protected] │ │ ├── [email protected] │ │ │ │ └── [email protected] │ │ │ └── [email protected] │ │ │ └── [email protected] │ │ │ └── [email protected]

Page 18: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Polyglot?

Page 19: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Polyglot?

thx @Codepitbull

Page 20: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Freedom is a human right

Everybody loves a puzzle - REST, HAL, SIREN

Find new friends while searching for fixes on Stackoverflow

Synergies: Polyglot UI with beta status

Keep ops on their toes by multi-monitoring and logging (easy win -> Date format!)

Page 21: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 22: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

9 - The data monolith

(c) Disney Corporation

Page 23: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Page 24: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Mum said we should share

Credit Account Payment

Giant SQL Datastore

Page 25: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Mum said we should share

Credit Account Payment

Page 26: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Name must be VARCHAR(200) instead of

VARCHAR(50)

Page 27: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Account table changes

Credit Account Payment

Page 28: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Credit Account Payment

Boom

Page 29: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Sharing is a Good ThingTM

All microservices must share the database

Avoid table or schema ownership

Insidious dependencies, e.g. Connection pools keep everybody awake at night

Page 30: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 31: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

8 - The event monolith

Page 32: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Marketing Pitch

Customer Homeaddress

Updated

Credit acquired

New Customer Created

Direction of Time

Customer Credit

Event Store

Page 33: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Eventsourcing Marketing Pitch

Audit trail - Immutable history for free

Distributed data management

Decoupled microservices with CQRS

…and much more!

Page 34: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

‘Das schöne Österreich’ will no longer be

accepted as a country code

Page 35: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

WET is the new DRY

Country: “AU”

Country: “Das schöne Österreich”

Direction of Time

Customer Credit

Event Store

Page 36: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Don’t change messy past events

Don’t come up with a data strategy

Copy and Paste compensation actions

Event history as bugfixes

Dont’t need it? Play the “We might become google or linkedin!” card

Page 37: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

7 - The Home Grown monolith

Page 38: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

– Carl Sagan (slightly paraphrased)

“If you wish to make MICROSERVICES from scratch, you must first create a FRAMEWORK”

Wrapping up

Page 39: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Home made Eventsourcing

{ "type": "NewCustomerCreated", "id": 1234, "payload": { } }

{ "type": "NewCustomerCreated", "id": 1234, "payload": { } }

CustomerAccount Reporting

ES V1 ES V1 ES V1

Page 40: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The customer system needs special, non-numeric ids

Page 41: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Version increaseCustomer V2

{ "type": "NewCustomerCreated", "id": "1234-5678", "payload": { ... } }

ES 2

Page 42: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Runtime surpriseCustomer V2Account Reporting

ES V1 ES V1ES 2

{ "type": "NewCustomerCreated", "id": "1234-5678", "payload": { ... } }

Page 43: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Change the world eventCustomer V2Account V2 Reporting V2

ES V2 ES V2ES 2

Page 44: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Microservice Promise

Customer

Account

Reporting

Independent release

Page 45: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Monolithic Release Plan

Customer

Account

Reporting

Common Release

Page 46: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Cross-cutting dependencies as social tools

Job insurance via invasive frameworks

Building frameworks is fun! Try it!

Ideas: Collections, String-Utils, Logging, ORM!

Page 47: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

6 - Think of the meat cloud

Page 48: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

W K

P T

Optimise your Revenue!

Page 49: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Who KNOWS how to do it?K

P T

Optimise your Revenue!

Who WANTS it to be done?

Who has the required

PRIVILEGES?

Who has TIME to actually

do it?

Page 50: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Insight: CD is very useful

Delivery pipeline

Production

Page 51: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And the rest of the world?

Delivery pipeline

Production

Handcrafted with love

Soulless automation

Page 52: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

W

Quickly…release a new Customer microservice

K

P T

Page 53: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

P T

KW

Page 54: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Ops Toolchain - Vi all the way!

P T

W K

P T

Page 55: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Ops Toolchain - Vi all the way!

P T

W K

P T

Page 56: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Prod Status - Illustration

Page 57: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Infrastructure is expensive…be proud to take care of it

Microsoft Word is some kind of automation

Play the “we are not google” card

If someone asks, say you are using Docker

Page 58: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

5 - The distributed monolith

Page 59: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Friends stay close together

Customer AccountCredit

Security

Page 60: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Let’s offer a discount to new users

Page 61: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The Musketeer Pattern

Customer AccountCredit

Security

Page 62: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Combine the complexity of a microservice architecture with

the rigidity and fragility of a monolith

Page 63: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The network is reliable

Dependencies indicate good design, like in Dependency Injection

Synchronous dependencies are easy

What is half a system good for, anyway? So avoid Circuit breakers

Page 64: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 65: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

4 - The SPA monolith

Page 66: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Micro is REST only

Customer REST Credit RESTAccount REST

Giant Monster UI

Page 67: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Add a mandatory social-number field to the

customer

Page 68: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

But not that mandatory. E.g. if the customer is not committed, yet

Page 69: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

No clear responsibility

Customer Domain Credit DomainAccount Domain

Comprehensive UI Domain Model

Page 70: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Domain is spread around

Customer REST Credit RESTAccount REST

Page 71: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Ach, just put it there

Room available

Page 72: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Meet people while discussion ownership and conflicting features

Keep the testers busy with side effects

Single point of failure -> Easy to find

Page 73: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

By all means, avoid composition

CreditCustomer Account

Tailor.JS / Project Mosaic

Page 74: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

…and avoid Hyperlinks!

CreditCustomer Account

Page 75: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

3 - The decision monolith

Page 76: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

“But we need Java 7…it is 2017 after all!”

Page 77: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The sieve of sanity

Architecture & Design Sieve

Page 78: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The sieve of sanity

Agile

RxMicroservice

Actors Augmented realityCloudAWSWebRTC IoT

Blockchain

Page 79: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The sieve of sanity

Agile

RxMicroservice

Actors Augmented realityCloudAWSWebRTC IoT

Blockchain

Architecture & Design Sieve

Page 80: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The sieve of sanity

JEE

WebSphere

Agile

RxMicroservice

Actors Augmented realityCloudAWSWebRTC IoT

Blockchain

Architecture & Design Sieve

Page 81: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

…works on larger scale, too

Architecture & Design Sieve

Customer AccountCredit Security

Page 82: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Frustrate your coworkers Irritate motivated colleagues

If you are older than 30…play the “This is _real_ enterprise, kid” card Ivory towers are beautiful

Assume people are dumb, and you are smart

Page 83: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

2 The monolithic

business

Page 84: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

MS is for Devs only

Credit Account Payment

… … …

Branch Office Toolset Something

Page 85: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Let’s force the user to always enter a valid address

Page 86: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

No, the customer should be able to enter partial

addresses

Page 87: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Requirements Ping Pong

Credit Account Payment

Branch Office Toolset Something

?????

Page 88: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Change Management

Page 89: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Requirements Management

Page 90: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Waterfall!!!11!!!

Page 91: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Slow means more time for Twitter! The servant of many kings is a free man

Change / Requirement Mgmt. are your allies Business people don’t know Eric Evans

Conway’s law works both ways

Page 92: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 93: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

1 - Use a HR driven Architecture

Page 94: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

It is easier to search for React developers than for general

craftswomen

Page 95: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Frontend Development

Service Development

DevOps Team

Test

Business

Page 96: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Magic Specification Success Template

Page 97: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Frontend Microservice

Service Microservice

Persistence Microservice

Page 98: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Frontend Microservice

Service Microservice

Persistence Microservice

Shared stability

Shared release

Convoluted domains

Page 99: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 100: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Programmers do not like other people

Avoid spread of knowledge

Business knows the domain. Devs know tech

Nobody should have a big picture, keep them in the dark

Meetings mean coffee and biscuits

Page 101: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And: In case of bugs… It’s always the other team’s fault!

And: In case of bugs… It’s always the other team’s fault!

Page 102: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Wrapping up….

Page 103: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The key to failure is the hidden monolith

Page 104: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

The hidden monolith

Data

Frontend

Framework

Deployment and Release

Process

Page 105: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

And ignore Ops!

Page 106: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

SummaryMS mean Work - Fight them

Greenfield != Brownfield - The perfect excuse

Think of the organisational impact. You do not want to change!

Embrace the monolith

Microservices are a fad. Wait for SOAP 4.0

Dont’t underestimate the power of broken windows

Page 107: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

Thank you! Questions?

Thank you!

Page 108: 10 Tips for failing at microservices

#VoxxedVienna #10TipsMicroservices @koenighotze

BACKUP