Valg av arkitekturstil (del 1)

Hei, Habr. Akkurat nÄ er OTUS Äpnet for pÄmelding til et nytt kull av kurset «Software Architect». I forkant av kursstart vil jeg dele min egen artikkel med dere.

Innledning

Valg av arkitektonisk stil er en av de grunnleggende tekniske avgjÞrelsene nÄr man bygger et informasjonssystem. I denne artikkelserien Þnsker jeg Ä gÄ gjennom de mest populÊre arkitektoniske stilene for applikasjonsbygging og svare pÄ spÞrsmÄlet om nÄr en arkitektonisk stil er mest foretrukket. I lÞpet av forklaringen vil jeg prÞve Ä trekke en logisk fÞlge som forklarer utviklingen av arkitektoniske stiler fra monolitter til mikrotjenester.

Litt historie

Hvis du prÞver Ä stille utviklere spÞrsmÄlet: «Hvorfor trenger vi mikrotjenester?», vil du fÄ de mest varierte svarene. Du vil hÞre at mikrotjenester forbedrer skalerbarheten, forenkler forstÄelsen av koden, Þker feilfriheten, og noen ganger kan det hÞres ut som om de lar deg «rydde opp i koden». La oss se pÄ historien for Ä forstÄ hva som var mÄlet med fremveksten av mikrotjenester.

Kort sagt, mikrotjenester i vÄr nÄvÊrende forstÄelse oppstod slik: I 2011 la James Lewis, i analyse av ulike selskapers arbeid, merke til fremveksten av et nytt mÞnster kalt «micro-app», som optimaliserte SOA med tanke pÄ Ä fremskynde distribusjonen av tjenester. Senere, i 2012, ble mÞnsteret omdÞpt til mikrotjeneste pÄ en arkitektursummit. Dermed var det opprinnelige mÄlet med innfÞringen av mikrotjenester Ä forbedre det velkjente time to market.

PĂ„ bĂžlgen av hype var mikrotjenester i 2015. IfĂžlge noen undersĂžkelser, var det ingen konferanse uten en presentasjon om mikrotjenester. Dessuten var noen konferanser utelukkende dedikert til mikrotjenester. I dag starter mange prosjekter med bruk av denne arkitektoniske stilen, og hvis prosjektet inneholder store mengder legacy-kode, skjer det sannsynligvis aktiv migrering til mikrotjenester.

Til tross for alt dette, er det fortsatt et relativt lite antall utviklere som kan definere begrepet «mikrotjeneste». Men om dette skal vi snakke litt senere...

Monolit

Den arkitekturtype der stÄr i kontrast til mikrotjenester er monolitten (eller «alt-i-ett»). Det gir sannsynligvis ikke mening Ä forklarer hva en monolitt er, sÄ jeg vil umiddelbart liste opp ulempene ved denne arkitekturtypen som har initiert videre utvikling av arkitekturstiler: stÞrrelse, sammenkobling, distribusjon, skalerbarhet, pÄlitelighet og stivhet. Nedenfor tilbyr jeg Ä bli kjent med hver av ulempene hver for seg.

StĂžrrelse

Monolitten er veldig stor. Og den snakker vanligvis med en veldig stor database. Applikasjonen blir for omfattende til at en enkelt utvikler i utgangspunktet kan forstÄ den. Bare de som har brukt mye tid med denne koden, kan jobbe godt med monolitten, mens nykommere vil bruke mye tid pÄ Ä prÞve Ä forstÄ monolitten, med usikker utgang. Vanligvis finnes det alltid en slags «betinget» senior nÄr man arbeider med monolitten, som kjenner den mer eller mindre godt og som gir pekefinger til andre nye utviklere i lÞpet av et Är eller halvannet. SelvfÞlgelig er en slik betinget senior et enkelt feilpunkt, og hans avgang kan fÞre til monolittens dÞd.

Sammenkobling

Monolitten representerer et «stort klump av sÞle» (big ball of mud), der endringer kan fÞre til uforutsigbare konsekvenser. Hvis man gjÞr endringer ett sted, kan man skade monolitten et annet sted (det som heter «klÞdd i Þret, *@ falt av»). Dette henger sammen med at komponentene i monolitten har veldig komplekse og, viktigst av alt, ikke-opplagte forhold til hverandre.

Distribusjon

Distribusjonen av monolitten pĂ„ grunn av de komplekse forholdene mellom dens komponenter — er en langvarig prosess med sine egne ritualer. Et slikt ritual er vanligvis ikke endelig standardisert og overleveres «mellom folk».

Skalerbarhet

Modulene til monolitten kan ha motstridende behov for ressurser, noe som gjÞr at man mÄ finne en kompromiss nÄr det gjelder maskinvare. Tenk deg at monolitten din bestÄr av tjenestene A og B. Tjeneste A er kresen pÄ harddiskstÞrrelse, mens tjeneste B er pÄ minne. I sÄ fall mÄ enten maskinen der monolitten installeres, oppfylle kravene til begge tjenester, eller man mÄ manuelt og kunstig slÄ av en av tjenestene.

Et annet eksempel (mer klassisk): Tjeneste A er mye mer populÊr enn tjeneste B, sÄ du Þnsker at det skal vÊre 100 av tjeneste A og 10 av tjeneste B. Igjen har vi to alternativer: enten setter vi opp 100 komplette monolitter, eller vi mÄ manuelt deaktivere tjeneste B pÄ noen av dem.

PÄlitelighet

Siden alle tjenestene er samlet, hvis monolitten feiler, svikter alle tjenestene samtidig. Faktisk kan dette kanskje ikke vÊre sÄ ille, i det minste vil det ikke vÊre delvise feil i et distribuert system, men pÄ den annen side, pÄ grunn av en feil i funksjonaliteten som kun 0,001% av brukerne benytter, kan du miste alle brukerne av systemet ditt.

Stivhet

PÄ grunn av stÞrrelsen pÄ monolitten er det vanskelig Ä overfÞre til nye teknologier. Som et resultat fremstÄr opprettholdelse av den hypotetiske senioren som en separat oppgave. Teknologistakken som ble valgt i starten av prosjektet kan bli en hindring for produktutviklingen.

Konklusjon

Neste gang skal vi snakke om hvordan folk har forsÞkt Ä lÞse de nevnte problemene ved Ä gÄ over til komponenter og SOA.

Valg av arkitekturstil (del 1)

Les mer:

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster