Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the...

Preview:

Citation preview

Killingmesoftly

RefaktorierenvonMonolithen

HristiyanPehlivanovMathemaSoftwareGmbH

1

Agenda

SchlechteIdeenfürRefactoring

EinebessereIdeefürRefactoring

CI/CD

ExtrahierenvonServices

VerteilteSysteme

BeispielfüreingroßesRefactoring

4 . 1

LegacySystem

ErfülltnichrmehrdieGeschäftsanforderungen

Mussweiterentwickeltwerden

WartungundÄnderungensindextremaufwändig

Microservices

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

anHTTPresourceAPI.Theseservicesare

byfullyautomateddeploymentmachinery.Thereisabareminimumofcentralizedmanagementofthese

services,whichmaybewrittenindifferentprogramminglanguagesandusedifferentdatastorage

technologies.”

MartinFowler

builtaroundbusinesscapabilitiesandindependentlydeployable

6

7 . 1

8 . 1

SchlechteDiäten

Modul≠SelbstständigerService

NeuerServiceerzeugen,DatendesMonolithenverwenden

FrontendundBackendineigenenServicesaufteilen

ZuersteinModulisolieren,danachdasModulalsneuenServiceextrahieren

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

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

Wikipedia

10

Monolithrefaktorieren

1. SchnelleFeedback-Loopsvorbereiten(CI/CD)

2. Kerngeschäftextrahieren

3. DasverteilteSystemaufbauen

Endziel

SelbstständigeServicesUnabhängigredeploybar

11

NotwendigesVorwissen

DomanDrivenDesign

BoundedContext

Self-ContainedSystems

StranglerPattern

Phase1:Training

Miteinem„einfacheren“Serviceanfangen

NichtkritischfürsGeschäft

KannvomMonolithleichterentkoppeltwerden

AmbestenohnepersistierteDaten

CI/CD-VorlagefürneueServicesvorbereiten

FokusaufCI/CD,nichtaufMicroservices

Phase1:ContinuousIntegration

ChecktjederEntwicklertäglichaufdemMain-Trunkein?

KönnenSiesichaufIhreautomatisiertenTestsverlassen?

IsteinroterBuilddiehöchstePrioritätdesTeams?

Phase1:ContinuousDelivery

IstDeploymentundRollbackautomatisiert?

FallsichjetzteineIF-Abfrageändere,wielangedauertesbiszumDeploymentaufdemProduktionssystem?

IstjederCommitreleasefähig?

TestenvonverteiltenSystemen

Mocks Integrationstests Consumer-DrivenContracts

Billig Teuer Billig

Schnell Langsam Schnell

Stabil Fragil Stabil

Nichtglaubwürdig Glaubwürdig Glaubwürdig

16

Consumer-DrivenContracts

ConsumerundProducereinigensichaufeinenContract

ContractwirdvonConsumerimplementiert

undbeiProducerausgeführt

Phase2:Kerngeschäft

WasistderwichtigsteTeilunsererSoftware

denwirweiterentwickelnwollen?

ExtremkritischeAufgabe,RisikoüberCI/CDminimieren

Vertikalarbeiten–einenBereichvondenDatenbiszumFrontendextrahieren

Ifyouaregoingtofail,failfast!

FokusaufselbstständigeServices,immernochnichtaufMicroservices

Refactoring

19

Refactoring

Testsvorbereiten

KleineÄnderungvornehmenundüberTestsverifizieren

FallsTestsgrün-OKFallsTestsrot-Revert&Repeat

EntwederRefaktorierenODERneuesFeatureimplementieren

Codenichteinfachwegwerfen,schlechterCode≠wertloserCode

Abhängigkeiten

DerMonolithruftunserenneuenServiceaufZuerstsolcheServicesextrahieren

UmgekehrtmachenwirunsvomMonolithabhängig

Fallsdochnichtmöglich,AntiCorruptionLayerverwenden

VersteckteAbhängigkeitenimglobalenKontext(Session,usw.)beachten

Datenbank

EinServiceistnurdannselbstständig,wennerseineDatenbeherrscht

ServicesstellenFunktionenzurVerfügung,keineDaten

OO-PrinzipienaufSystemebene

Stripe

Online-Bezahldienst

WegenGeschäftsausweitungmusstedasDB-Schemageändertwerden

Produktionssystemdarfnichtgestörtwerden(Bezahldienst)

EventuelleFehlerkönntenauchrechtlicheKonsequenzenhaben

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

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

Phase3:VerteiltesSystem

JetztstehenselbstständigeServiceszurVerfügung

FeedbackzumSystemzustandüberCI/CDgesichert

FallsnotwendigkannmanjetzteinverteiltesSystemaufbauenMonitoringLoadBalancingCircuitBreakersusw.

MicrovsMacroArchitektur

Fazit

EingroßesRefactoringbestehtausvielenkleinenSchritten

FunktionenschrittweiseextrahierenundnebendemMonolithbetreiben

CI/CDistdienotwendigeGrundlagefürkomplexeSysteme

NurCodeinProduktionist“done”

DasverteilteSystemistderletzteSchritt,nichtdererste

DankefürdieAufmerksamkeit!

HristiyanPehlivanov

MathemaSoftwareGmbH

hristiyan.pehlivanov@mathema.de

28

Recommended