28
Killing me softly Refaktorieren von Monolithen Hristiyan Pehlivanov Mathema Software GmbH 1

Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Killingmesoftly

RefaktorierenvonMonolithen

HristiyanPehlivanovMathemaSoftwareGmbH

1

Page 2: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Agenda

SchlechteIdeenfürRefactoring

EinebessereIdeefürRefactoring

CI/CD

ExtrahierenvonServices

VerteilteSysteme

BeispielfüreingroßesRefactoring

Page 3: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

4 . 1

Page 4: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

LegacySystem

ErfülltnichrmehrdieGeschäftsanforderungen

Mussweiterentwickeltwerden

WartungundÄnderungensindextremaufwändig

Page 5: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Microservices

“Inshort,themicroservicearchitecturalstyle[1]isanapproachtodevelopingasingleapplicationasasuiteofsmallservices,eachrunninginitsownprocessandcommunicatingwithlightweightmechanisms,often

anHTTPresourceAPI.Theseservicesare

byfullyautomateddeploymentmachinery.Thereisabareminimumofcentralizedmanagementofthese

services,whichmaybewrittenindifferentprogramminglanguagesandusedifferentdatastorage

technologies.”

MartinFowler

builtaroundbusinesscapabilitiesandindependentlydeployable

6

Page 6: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

7 . 1

Page 7: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

8 . 1

Page 8: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

SchlechteDiäten

Modul≠SelbstständigerService

NeuerServiceerzeugen,DatendesMonolithenverwenden

FrontendundBackendineigenenServicesaufteilen

ZuersteinModulisolieren,danachdasModulalsneuenServiceextrahieren

Page 9: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

“DieBezeichnungDiätkommtvonaltgriechischδίαιταdíaitaundwurdeursprünglichimSinnevon

“Lebensführung”/“Lebensweise”verwendet.”

Wikipedia

10

Page 10: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Monolithrefaktorieren

1. SchnelleFeedback-Loopsvorbereiten(CI/CD)

2. Kerngeschäftextrahieren

3. DasverteilteSystemaufbauen

Endziel

SelbstständigeServicesUnabhängigredeploybar

11

Page 11: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

NotwendigesVorwissen

DomanDrivenDesign

BoundedContext

Self-ContainedSystems

StranglerPattern

Page 12: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Phase1:Training

Miteinem„einfacheren“Serviceanfangen

NichtkritischfürsGeschäft

KannvomMonolithleichterentkoppeltwerden

AmbestenohnepersistierteDaten

CI/CD-VorlagefürneueServicesvorbereiten

FokusaufCI/CD,nichtaufMicroservices

Page 13: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Phase1:ContinuousIntegration

ChecktjederEntwicklertäglichaufdemMain-Trunkein?

KönnenSiesichaufIhreautomatisiertenTestsverlassen?

IsteinroterBuilddiehöchstePrioritätdesTeams?

Page 14: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Phase1:ContinuousDelivery

IstDeploymentundRollbackautomatisiert?

FallsichjetzteineIF-Abfrageändere,wielangedauertesbiszumDeploymentaufdemProduktionssystem?

IstjederCommitreleasefähig?

Page 15: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

TestenvonverteiltenSystemen

Mocks Integrationstests Consumer-DrivenContracts

Billig Teuer Billig

Schnell Langsam Schnell

Stabil Fragil Stabil

Nichtglaubwürdig Glaubwürdig Glaubwürdig

16

Page 16: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Consumer-DrivenContracts

ConsumerundProducereinigensichaufeinenContract

ContractwirdvonConsumerimplementiert

undbeiProducerausgeführt

Page 17: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Phase2:Kerngeschäft

WasistderwichtigsteTeilunsererSoftware

denwirweiterentwickelnwollen?

ExtremkritischeAufgabe,RisikoüberCI/CDminimieren

Vertikalarbeiten–einenBereichvondenDatenbiszumFrontendextrahieren

Ifyouaregoingtofail,failfast!

FokusaufselbstständigeServices,immernochnichtaufMicroservices

Page 18: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Refactoring

19

Page 19: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Refactoring

Testsvorbereiten

KleineÄnderungvornehmenundüberTestsverifizieren

FallsTestsgrün-OKFallsTestsrot-Revert&Repeat

EntwederRefaktorierenODERneuesFeatureimplementieren

Codenichteinfachwegwerfen,schlechterCode≠wertloserCode

Page 20: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Abhängigkeiten

DerMonolithruftunserenneuenServiceaufZuerstsolcheServicesextrahieren

UmgekehrtmachenwirunsvomMonolithabhängig

Fallsdochnichtmöglich,AntiCorruptionLayerverwenden

VersteckteAbhängigkeitenimglobalenKontext(Session,usw.)beachten

Page 21: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Datenbank

EinServiceistnurdannselbstständig,wennerseineDatenbeherrscht

ServicesstellenFunktionenzurVerfügung,keineDaten

OO-PrinzipienaufSystemebene

Page 22: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Stripe

Online-Bezahldienst

WegenGeschäftsausweitungmusstedasDB-Schemageändertwerden

Produktionssystemdarfnichtgestörtwerden(Bezahldienst)

EventuelleFehlerkönntenauchrechtlicheKonsequenzenhaben

https://robertheaton.com/2015/08/31/migrating-bajillions-of-database-

Page 24: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Stripe4-PhasenDatenmigration

1. Datenmigration

2. Lese-ZugriffeüberProxyumleiten

3. Lese-undSchreib-ZugriffedirektinderneuenTabelle

4. Cleanup

Double-WritingimplementierenDatenmigrieren

VonderneuenTabellelesenSchreibenindenaltenTabelleneinstellen

AlteLese-undSchreib-ZugriffeaufräumenÜberLoggingNachzüglerfindenProxyentfernen

ÜberLoggingAufrufezudenaltenTabellenfinden(Speichern,usw.)ProduktionslogsüberprüfenFinalesCleanup

Page 25: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Phase3:VerteiltesSystem

JetztstehenselbstständigeServiceszurVerfügung

FeedbackzumSystemzustandüberCI/CDgesichert

FallsnotwendigkannmanjetzteinverteiltesSystemaufbauenMonitoringLoadBalancingCircuitBreakersusw.

Page 26: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

MicrovsMacroArchitektur

Page 27: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

Fazit

EingroßesRefactoringbestehtausvielenkleinenSchritten

FunktionenschrittweiseextrahierenundnebendemMonolithbetreiben

CI/CDistdienotwendigeGrundlagefürkomplexeSysteme

NurCodeinProduktionist“done”

DasverteilteSystemistderletzteSchritt,nichtdererste

Page 28: Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the microservice architectural style [1] is an approach to developing a single application

DankefürdieAufmerksamkeit!

HristiyanPehlivanov

MathemaSoftwareGmbH

[email protected]

28