Hvad er en monolitisk ansøgning?

det første skridt i rejsen til at flytte monolitiske apps til Kubernetes

Kris Nova
Feb 2, 2018 * 4 min læst

et af de mest værdifulde spørgsmål, jeg har lært at stille en kollega, er ” hvad betyder $noget for dig?”. Det tvinger den anden ingeniør til at evaluere deres implikationer af at bruge et bestemt ord. Opfølgning på de første bevægelige monolitiske applikationer til Kubernetes-opkald, jeg ville bruge et par minutter på at tale om, hvad en monolitisk applikation er. Eller i hvert fald hvad det betyder for mig.

dette er et interessant rum, der kræver en vis opmærksomhed. Mens det er relativt let at betjene en statsløs mikroservice på Kubernetes, har det stadig en lang vej at betjene en stor stateful applikation. At forstå, hvad en monolitisk applikation er, vil være det første skridt i at gøre migrationsprocessen lettere.

for at definere en monolitisk applikation skal vi først forstå komponenterne i en applikation, som vi holder af. De tre komponenter, vi er interesseret i, vil være brugergrænsefladen, dataadgangslaget og datalageret.

brugergrænsefladen er programmets indgangspunkt og er også det punkt i programmet, som en bruger vil interagere med. Dette kunne være en vigtigste() funktion, hjemmeside, internet service, eller forskellige andre indgangspunkter.

dataadgangslaget er det lag af programmet, der vil pakke en datalager. Typisk vil dataadgangslaget håndtere bekymringer som godkendelse med en datalager og desinficering af data, før de vedvarer i datalageret.

datalageret er den mest grundlæggende del af systemet og er ansvarlig for lagring af vilkårlig information (data) og hentning af den. Denne komponent er normalt kun en database.

disse tre komponenter udgør en meget almindelig type applikation kaldet en stateful applikation. Hvilket betyder, at applikationen gemmer og manipulerer data over tid. Derfor siger vi, at ansøgningen har tilstand. Endnu vigtigere, at ansøgningens tilstand kan ændre sig over tid.

i tilfælde af en monolitisk applikation observerer vi almindeligvis flere lag af applikationen tæt koblet sammen. I eksemplet nedenfor kan vi se, at brugergrænsefladen og dataadgangslaget er grupperet sammen. Dette gøres normalt via et stort kodelager, og begge disse lag vil sandsynligvis afhænge af, at den anden er på plads for at kunne køre. Desuden er brugergrænsefladen og dataadgangslagene typisk samlet i den samme proces ved kørsel. Det betyder, at de kommunikerer på det samme system ved hjælp af systemressourcer (hukommelse og beregningscyklusser) til at interagere med andre dele af systemet.

tværtimod ville en mikroservicebaseret applikation være sammensat af små modulære komponenter, der let kan slukkes. Dette tilbyder et koncept om kompositbarhed for en operatør og er et tegn på, at du arbejder med mikroservices i stedet for en monolitisk applikation. Eksemplet nedenfor viser en fleksibel og modulopbygget anvendelse. Bemærk, at vi i denne model kan køre de mindre komponenter uafhængigt og bruge et netværk til at forbinde vores system sammen. Denne tilgang er meget mere skalerbar.

så hvad er en monolitisk applikation? Det er et enkelt-differentieret program, hvor brugergrænsefladen og dataadgangskoden kombineres til et enkelt program på en enkelt platform. Det er også et program, der kører flere komponenter i samme proces, på det samme system.

fremadrettet søger vi at forstå nuancerne ved at migrere monolitiske applikationer til Kubernetes, og håber, at dette er et værdifuldt første skridt i vores rejse. Da processen er relativt udokumenteret, vi planlægger at dele de erfaringer, så alle kan drage fordel.



+