12-faktor App-metoden forklaret

skrivning af applikationskode forud for de fleste cloud—løsninger-løsninger, som de fleste applikationsprogrammører skriver specifikt til disse dage.

for at håndtere denne dissonans er 12-faktor App-metoden opstået. De 12 faktorer er en tilgang, der hjælper programmører med at skrive moderne apps på en deklarativ måde ved hjælp af klare kontrakter implementeret via cloud.

i denne artikel introducerer jeg 12-faktor app-metoden og tilbyder en oversigt på højt niveau over dens principper.

hvad er 12-faktor app-metoden?

i 2012 debuterede programmører hos Heroku 12-faktor app-metoden. Disse programmører har udviklet og implementeret hundredvis af apps skrev denne metode, trækker på deres erfaring med at se SaaS apps “i naturen”.

denne gruppe betragter metoden som en triangulering af:

  • ideel praksis til støtte for appudvikling
  • dynamikken, der opstår, når en app vokser organisk
  • forholdet og samarbejdet mellem codebase-udviklere

deres mål er dobbelt:

  • for at hjælpe med at undgå erosionsomkostninger
  • for at øge bevidstheden om systemiske problemer, de har observeret i moderne appudvikling

gruppen peger på to inspirerende kilder, mønstre af Virksomhedsapplikationsarkitektur og Refactoring, begge af den professionelle Udvikler Martin.

og nu vil jeg introducere hver af de 12 faktorer.

princip I. Codebase

“en kodebase spores i revisionskontrol, mange deploys”

din kodebase skal have et logisk versionsstyringssystem, der er let at forstå.

hver implementering skal have sit eget kodelager, der kan implementeres i flere miljøer. Undgå at huse flere applikationer i samme lager. Dette gør versionskontrol næsten umulig at forstå, og versioner vil blive sammenflettet, hvilket resulterer i ikke-merværdiarbejde.

princip II. afhængigheder

“eksplicit erklære og isolere afhængigheder”

dette princip fastholder, at du aldrig bør stole på den implicitte eksistens af systemdækkende pakker. I stedet”

  • sørg for, at app-specifikke biblioteker er tilgængelige
  • Bekræft beskydning til OS
  • Kontroller, at nødvendige systembiblioteker, som curl eller ImageMagick, er tilgængelige. (Der er ingen garanti for, at disse findes på hvert system, hvor appen kan køre i fremtiden.)

samlet set skal en 12-faktor app være selvstændig. Applikationen skal isoleres tilstrækkeligt til at undgå interaktioner med modstridende biblioteker, der er installeret på værtsmaskinen.

lad os se på et eksempel. I Python kan du opnå deklaration og isolation ved hjælp af henholdsvis Pip og Virtualenv. For at opfylde dette princip skal du altid bruge både Erklæring om afhængighed og isolation. Administrer afhængigheder i applikationen, ikke fra en ekstern kilde. Afhængigheder skal hostes i et lager i appen

princip III. Config

“Store config i miljøet”

en applikation og dens konfiguration skal være helt uafhængig. Desuden bør lagring af configs konstant i kode undgås helt.

dine konfigurationer skal have en separat fil og bør ikke være vært i kodelageret. En separat konfigurationsfil gør det nemt at opdatere konfigurationsværdierne uden at berøre den faktiske kodebase, hvilket eliminerer behovet for geninstallation af dine applikationer, når du ændrer visse konfigurationsværdier.

når konfigurationer er i miljøet, ikke appen, som variabler, kan du nemt flytte den til et andet miljø uden at røre ved kildekoden. Tolv-faktor apps gemmer configs som variabler, så de er “usandsynligt at blive tjekket ind i depotet” ved et uheld. En anden bonus: så er dine configs uafhængige af sprog og OS.

princip IV. Backing services

“behandl backing services som vedhæftede ressourcer”

i en 12-faktor app skal alle tjenester, der ikke understøtter core-appen, tilgås som en tjeneste. Disse ikke-kerne væsentlige tjenester kan omfatte:

  • databaser
  • ekstern lagring
  • Meddelelseskøer
  • osv.

disse kan behandles som en ressource. Disse skal tilgås som en tjeneste via HTTP eller lignende anmodning, derefter specificeret i config. På denne måde kan tjenestens kilde ændres uden at påvirke appens kernekode.

for eksempel er en app, der bruger et meddelelseskøsystem, bedst, hvis den let kan skifte fra Kanink til nul til aktiv ved kun at ændre konfigurationsoplysninger.

princip V. Build, release, run

“Strictly separate build and run stages”

en 12-faktor app er streng om at adskille de tre faser af bygning, frigivelse og kørsel.

Start byggeprocessen ved at gemme appen i kildekontrol, og opbyg derefter dens afhængigheder. Adskillelse af konfigurationsoplysningerne betyder, at du kan kombinere den med build til frigivelsesfasen—og så er den klar til run-scenen. Det er også vigtigt, at hver udgivelse har et unikt ID.

princip vi. processer

“Udfør appen som en eller flere statsløse processer”

Gem alle data, der kræves for at fortsætte i en stateful backing service, såsom databaser. Ideen er, at processen er statsløs og deler absolut ingenting.

mens mange udviklere er vant til at “sticky sessions”, er lagring af oplysninger i sessionen, der forventer, at den næste anmodning kommer fra den samme tjeneste, i modstrid med denne metode.

princip VII. Portbindende princip

“eksporttjenester via portbinding”

12-faktor apps skal altid være uafhængige af yderligere applikationer. Hver funktion skal være sin egen proces-i fuld isolation.

i et traditionelt miljø antager vi, at forskellige processer håndterer forskellige funktionaliteter. Som sådan er det let at antage, at disse funktioner er tilgængelige via en internetprotokol, såsom HTTP, hvilket gør det sandsynligt, at apps kører bag internetservere, som Apache eller Tomcat. Men dette er i modstrid med 12-faktor-metoden.

Tilføj i stedet et internetserverbibliotek eller lignende til core-appen. Dette betyder, at appen kan vente anmodninger på en defineret port, hvad enten det er HTTP eller en anden protokol.

princip VIII. samtidighed

“skalere ud via procesmodellen”

en ægte 12-faktor app er designet til skalering. Byg dine applikationer, så skalering i skyen er problemfri. Når du udvikler appen til at være samtidig, kan du nemt spinde nye forekomster til skyen.

for at tilføje mere kapacitet (start yderligere processer på yderligere maskiner), skal din app være i stand til at tilføje flere forekomster i stedet for mere hukommelse eller CPU på den lokale maskine.

princip i. Disposability

“Maksimer robusthed med hurtig opstart og yndefuld nedlukning”

begrebet engangsprocesser betyder, at en applikation kan dø når som helst, men det påvirker ikke brugeren—appen kan erstattes af andre apps, eller den kan starte helt op igen. Opbygning af bortskaffelse i din app sikrer, at appen lukker yndefuldt: den skal rydde op i alle udnyttede ressourcer og lukke glat.

når den er designet på denne måde, kommer appen hurtigt op igen. Ligeledes, når processer afsluttes, skal de afslutte deres nuværende anmodning, afvise enhver indgående anmodning og afslutte.

princip Dev / prod paritet

“hold udvikling, iscenesættelse og produktion så ens som muligt”

applikationer implementeret til udvikling og produktion skal have paritet. I det væsentlige bør der kun være den mindste forskel mellem begge implementeringer.

en stor forskel kan føre til utilsigtede kompatibilitetsproblemer mellem dev og produktionskode. Når du bygger en 12-faktor app, skal backing-tjenester mellem dev og prod være de samme; en forskel her kan forårsage betydelige problemer ned linjen.

logfiler

“behandl logfiler som hændelsesstrømme”

I modsætning til monolitiske og traditionelle apps, der gemmer logoplysninger i en fil, fastholder dette princip, at du skal streame logfiler til et valgt sted—ikke blot dumpe dem i en logfil.

logfiler findes typisk ikke det samme sted i skybaserede miljøer efter hver forbrænding. Når nye processer starter, eller din app går ned, distribueres logfilerne på tværs af flere skymaskiner; de sidder ikke på en enkelt maskine eller vært.

Løs dette problem ved at navngive et fælles sted, hvor logfilerne kan streame. I nogle tilfælde kan du blot omdirigere Stdout til en fil. Mere sandsynligt vil du dog installere en logrouter som Fluentd og gemme logfilerne til Hadoop eller en bestemt tjeneste, som Splunk.

Admin processer

“Kør admin/management opgaver som engangsprocesser”

det endelige 12-faktor app princip foreslår at adskille administrative opgaver fra resten af din ansøgning. Disse opgaver kan omfatte migrering af en database eller inspektion af poster.

selvom admin-processerne er separate, skal du fortsætte med at køre dem i det samme miljø og mod basiskoden og konfigurationen af selve appen. Forsendelse af admin tasks-koden sammen med applikationen forhindrer drift.

relateret læsning

  • BMC DevOps Blog
  • Agile vs vandfald SDLCs: Hvad er forskellen?
  • Installationsledninger (CI/CD) i Programmelteknik
  • hvad er ekstrem programmering?
  • hvordan & Hvorfor blive en Programfabrik
  • Topkonferencer til programmering & udvikling af programmer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.