Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the...
Transcript of Refaktorieren von Monolithen - Entwicklertag · 2018-06-25 · Microservices “ In short, the...
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-
records-at-stripe/23 . 1
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
28