Trasformare un'applicazione monolitica in microservices (versione #daje)

86
HOW TO DISASSEMBLE A MONOLITHIC APPS IN (NOT-SO) MICRO-SERVICES ROME 18 - 19 MARCH 2016

Transcript of Trasformare un'applicazione monolitica in microservices (versione #daje)

Page 1: Trasformare un'applicazione monolitica in microservices (versione #daje)

HOW TO DISASSEMBLE A MONOLITHIC APPS IN (NOT-SO) MICRO-SERVICES

ROME 18 - 19 MARCH 2016

Page 2: Trasformare un'applicazione monolitica in microservices (versione #daje)

MICHELE FRANZIN

@REALFUZZY

Page 3: Trasformare un'applicazione monolitica in microservices (versione #daje)

INTEREST IN#MICROSERVICES

Page 4: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 5: Trasformare un'applicazione monolitica in microservices (versione #daje)

PARTNERS

Page 6: Trasformare un'applicazione monolitica in microservices (versione #daje)

12.000TRANSACTIONS/MONTH

in just an hour

Page 7: Trasformare un'applicazione monolitica in microservices (versione #daje)

DISCLAIMER

my personal opinion

people have different experiences

ideas, comment, etc contact me @realfuzzy

subject is wide, so I’d love to hear your thoughts :-)

It’s not a code talk (but you can see some sources)

Page 8: Trasformare un'applicazione monolitica in microservices (versione #daje)

AGENDA: THERE’S NO AGENDA

I’ve got a tale instead

Page 9: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 10: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 11: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 12: Trasformare un'applicazione monolitica in microservices (versione #daje)

BUAHAHAHAHA! I AM THE

MONOLITH! COME TO THE

WORLD TO BRING IMMOBILISM AND

COMPLEXITY!

Page 13: Trasformare un'applicazione monolitica in microservices (versione #daje)

THE MONOLITH

Page 14: Trasformare un'applicazione monolitica in microservices (versione #daje)

easy to develop

Page 15: Trasformare un'applicazione monolitica in microservices (versione #daje)

IDEs & development tools support

Page 16: Trasformare un'applicazione monolitica in microservices (versione #daje)

easy to test

Page 17: Trasformare un'applicazione monolitica in microservices (versione #daje)

simple to deploy

Page 18: Trasformare un'applicazione monolitica in microservices (versione #daje)

works well for

relatively small apps

Page 19: Trasformare un'applicazione monolitica in microservices (versione #daje)

AFTER A WHILE…

http

://w

ww.

qcod

emag

.it/w

p-co

nten

t/upl

oads

/201

4/09

/fave

la.jp

g

Page 20: Trasformare un'applicazione monolitica in microservices (versione #daje)

growth overloads everything

Page 21: Trasformare un'applicazione monolitica in microservices (versione #daje)

difficult to adopt new technologies

Page 22: Trasformare un'applicazione monolitica in microservices (versione #daje)

often stuck with the starting choices

Page 23: Trasformare un'applicazione monolitica in microservices (versione #daje)

doesn’t scale to

long-lived application

Page 24: Trasformare un'applicazione monolitica in microservices (versione #daje)

MONOLITHARCHITECTURE ARCHITECTURE

MICROSERVICEIC

Page 25: Trasformare un'applicazione monolitica in microservices (versione #daje)

ARCHITECTUREis the keyword

Page 26: Trasformare un'applicazione monolitica in microservices (versione #daje)

WHY MICROSERVICES

• suite of small services• running in its own process• communicating with lightweight mechanisms• built around business capabilities • independently automated deployable • technology agnostic

Page 27: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 28: Trasformare un'applicazione monolitica in microservices (versione #daje)

EXPECTATIONS

http

://w

ww.

wall

pape

raw

esom

e.com

/wall

pape

rs-a

wes

ome/

Page 29: Trasformare un'applicazione monolitica in microservices (versione #daje)

relatively small

Page 30: Trasformare un'applicazione monolitica in microservices (versione #daje)

easier to understand

Page 31: Trasformare un'applicazione monolitica in microservices (versione #daje)

easier to scale development

Page 32: Trasformare un'applicazione monolitica in microservices (versione #daje)

improve fault isolation

Page 33: Trasformare un'applicazione monolitica in microservices (versione #daje)

develop & deploy independently

Page 34: Trasformare un'applicazione monolitica in microservices (versione #daje)

no vendor lock

Page 35: Trasformare un'applicazione monolitica in microservices (versione #daje)

improves

tuning & scaling

Page 36: Trasformare un'applicazione monolitica in microservices (versione #daje)

- additional complexity of a distributed system

- tools/IDEs are monolithic applications oriented

- testing is more difficult

- must implement the inter-service communication

- increase memory consumption

Page 37: Trasformare un'applicazione monolitica in microservices (versione #daje)

AGENDA*

✓what’s a microservice?

✓why have I to jump in ?

• where I can start from ?

• how I should be aware of ?

* I know, I know, I lied about the agenda

Page 38: Trasformare un'applicazione monolitica in microservices (versione #daje)

– Martin Fowler, Chief Scientist - ThoughtWorks

“…don’t even consider microservices unless you have a system that's too complex to manage as a monolith”

Page 39: Trasformare un'applicazione monolitica in microservices (versione #daje)

YAGNIdo monolith first

monolith

microservice

complexity

prod

uctiv

ity

http

://m

artin

fow

ler.co

m/b

liki/M

icros

ervic

ePre

mium

.htm

l

Page 40: Trasformare un'applicazione monolitica in microservices (versione #daje)

– Sam Newman, author of Building Microservices

“I remain convinced that it is much easier to partition an existing […] system than

to do so up front… You have more to work with.”

Page 41: Trasformare un'applicazione monolitica in microservices (versione #daje)

HOPE vs REALITY

http

://m

artin

fow

ler.co

m/a

rticl

es/d

ont-s

tart

-mon

olith

.htm

l

Page 42: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 43: Trasformare un'applicazione monolitica in microservices (versione #daje)

THE NEWBEGINNING

http

s://u

ploa

d.wiki

med

ia.or

g/w

ikipe

dia/

com

mon

s/6/6

7/Ch

ange

_In_

Han

d.jpg

Page 44: Trasformare un'applicazione monolitica in microservices (versione #daje)

Q0: HOW TO DECOMPOSE A MONOLITH?

1. Identify business boundaries

2. start decomposing each into own microservice

3. follow the Single Responsibility Principle

4. goto :2

Page 45: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 46: Trasformare un'applicazione monolitica in microservices (versione #daje)

Sir. Tools

A warrior that can use every kind of tool as a weapon

Strateky Sensei

Master renowned for its strategic and

tactical ability

Workodoo Master

The work-force is strong with this one

Page 47: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 48: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 49: Trasformare un'applicazione monolitica in microservices (versione #daje)

HAHAHAHA!YOUR EFFORTS

ARE NOT ENOUGH TO DEFEAT ME!

Page 50: Trasformare un'applicazione monolitica in microservices (versione #daje)

Your efforts have little effect! an orthogonal approach might

help you ...

Page 51: Trasformare un'applicazione monolitica in microservices (versione #daje)

…MANY SERVICES THAT COMMUNICATE ?

http

://w

ww.

rapt

orsre

publi

c.com

/

Page 52: Trasformare un'applicazione monolitica in microservices (versione #daje)

MESSAGING

XP

S2

S1

Page 53: Trasformare un'applicazione monolitica in microservices (versione #daje)

MESSAGE BUS

XP1

S2

S1

P2

S3

Page 54: Trasformare un'applicazione monolitica in microservices (versione #daje)

CHOOSE WISELY

• Reliability

• Routing algorithms

• Highly Availability

• Supported protocols

Page 55: Trasformare un'applicazione monolitica in microservices (versione #daje)

OUR CHOICE ☛ RABBITMQ

• AMPQ message broker

• Erlang

• Fast, reliable, secure

• Many clients

• Commercial support

Page 56: Trasformare un'applicazione monolitica in microservices (versione #daje)

HERE!

Page 57: Trasformare un'applicazione monolitica in microservices (versione #daje)

SPECIFICATION IS A MUST(no matter what)

Page 58: Trasformare un'applicazione monolitica in microservices (versione #daje)

JSON-LD

JSON-API HAL

DIY

Page 59: Trasformare un'applicazione monolitica in microservices (versione #daje)

DESIGN FOR FAILUREaka: communicate when communication is hard

Page 60: Trasformare un'applicazione monolitica in microservices (versione #daje)

CIRCUIT BREAKER http

s://w

ww.

flickr.

com

/pho

tos/l

eafb

ug/4

0995

0515

/

Page 61: Trasformare un'applicazione monolitica in microservices (versione #daje)

http

://m

artin

fow

ler.co

m/b

liki/C

ircuit

Brea

ker.h

tml

Page 62: Trasformare un'applicazione monolitica in microservices (versione #daje)

STOPLIGHThttps://github.com/orgsync/stoplight

Page 63: Trasformare un'applicazione monolitica in microservices (versione #daje)

HOW IT LOOKS LIKE

Page 64: Trasformare un'applicazione monolitica in microservices (versione #daje)

9XL

Page 65: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 66: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 67: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 68: Trasformare un'applicazione monolitica in microservices (versione #daje)

– Melvin Conway, 1968

“organizations which design systems … are constrained to produce designs

which are copies of the communication structures of these organizations”

Page 69: Trasformare un'applicazione monolitica in microservices (versione #daje)

THE INVERSE CONWAY MANEUVER

Page 70: Trasformare un'applicazione monolitica in microservices (versione #daje)

– Martin Fowler, Chief Scientist - ThoughtWorks

“For many people throwing away a code base is a sign of failure, perhaps

understandable …, but still failure.”

Page 71: Trasformare un'applicazione monolitica in microservices (versione #daje)

SACRIFICIAL ARCHITECTURE

http:/

/www

.card

hub.c

om/ed

u/cre

dit-ca

rds-e

xpira

tion-d

ate

Page 72: Trasformare un'applicazione monolitica in microservices (versione #daje)

POLYGLOT IS NICEbut mother tongue is fair enough

Page 73: Trasformare un'applicazione monolitica in microservices (versione #daje)

DEVOPS!no devops?!? no party.

https://www.flickr.com/photos/91657289@N02/10218392744

Page 74: Trasformare un'applicazione monolitica in microservices (versione #daje)

CONTINUOUS DEPLOYMENT FOR RUBY GEMS

Page 75: Trasformare un'applicazione monolitica in microservices (versione #daje)

The Smith

Master craftsman expert in forging

anything

The Sculptor

An artist able to give shape to

magnificent works

The Painter

Colors and shapes come to life on her

canvas!

Page 76: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 77: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 78: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 79: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 80: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 81: Trasformare un'applicazione monolitica in microservices (versione #daje)
Page 82: Trasformare un'applicazione monolitica in microservices (versione #daje)

NO MONOLITHS WERE HARMED IN THE MAKINGOF THIS PRESENTATION

Page 83: Trasformare un'applicazione monolitica in microservices (versione #daje)

[email protected]

@BriguGraphic

Illustrated by:

Page 84: Trasformare un'applicazione monolitica in microservices (versione #daje)

TAKEAWAYS

go monolith first

communication (all-around) is strategic assets

start simple, then don’t fear the change

take decisions, I-REALLY-MEAN-THAT

Page 85: Trasformare un'applicazione monolitica in microservices (versione #daje)

…WHAT’S NEXT ?• testing

• CQRS + ES

• log analisys & monitoring

• metrics

• …

Page 86: Trasformare un'applicazione monolitica in microservices (versione #daje)

Thank you.@realfuzzy

Michele Franzin