Sunday, September 16th, 2012
Skriv en kommentar

Jeg har lekt meg litt med noen forsøk på å visuelt illustrere noen typiske software-arkitekturer. Er det noen av disse du kjenner deg igjen i? Jeg begynner med den aller mest gjenkjennelige arkitekturen av dem alle:

bbom

De fleste vet at Big Ball of Mud ikke er særlig bra. For å fikse problemet lærer man at man bør splitte arkitekturen sin opp i lag. Tre lag skal være bra har jeg hørt. Men det kan være lett å missforstå hva det egentlig betyr. Her har dere den vanligste oppdelingen for webprosjekter:

3tier

Hvis tre lag er bra må jo fem, eller kanskje åtte, være enda bedre:

layeres

Den typiske, lagdelte arkitekturen – en stabel med mudballs som balanserer på toppen av en database. Nice! Men hva skjer når vi har behov for flere systemer som må kommunisere sammen? Jo, da trenger vi et integrasjonspunkt:

databaseAPI

Databasen utgjør jo et fint API, ikke sant? Ikke det? Ok, hva med denne da:

inverted_pyramid

Her har vi flyttet integrasjonspunktet ut, og gjenbruker lagene der vi kan. Dette minner faktisk om ganske mange av systemene jeg har vært med å jobbe på. Ser du at det nesten ser ut som en kaktus? Ofte føles det sånn ut også…

soa1

Nå har vi blitt moderne; med Service Oriented Architecture har vi byttet ut den enorme databasen med mindre tjenester som har mindre ansvarsområder og tar vare på sine egne data. Det ser ganske løsrevet og fint ut, men komponentene henger fortsatt for tett på hverandre. For å løse dette introduserer vi en ny, swær mudball:

biztalk

Tjenestene er nå løsrevet fra hverandre, men vi har fått et dyrt monsternav i midten med høy kompleksitet. Utviklere må sitte time etter time for å konfigurere informasjonsstrømmer.

soa2

Wild messaging er state of the art SOA. En generisk meldingsbuss sørger for at tjenester kan snappe opp hendelser de er interesserte i.

pipeline

En meldings-pipeline er én ting man kan få ut av SOA 2.0, og er en typisk arkitektur man kan benytte seg av for å begrense størrelsen på hver enkelt mudball. Tjenestene vet ideelt sett ikke om hverandre, men i praksis flyter meldingene i en fast strøm mellom dem.

p2p

I et P2P-nettverk har man droppet det sentrale navet, og tjenestene må selv sørge for at alle meldinger distribueres der de skal. Det finnes et hav av varianter her…

Til slutt tar jeg med CQRS-arkitekturen, nok en måte å redusere størrelsen på mudballs ved at man skiller behoved på å lese data fra behovet for å gjøre endringer. Denne modellen kan benyttes i hver av tjenestene i de øvrige arkitekturene.

cqrs

Og det var det – 11 illustrasjoner av hvordan vi utviklere setter sammen baller av kompleksitet.

Kategorier: Softwareutvikling.
RSS feed for kommentarene. Tilbaketråkk.

4 kommentarer til “11 arkitektur-illustrasjoner”

  1. Bjørn Einar Bjartnes Says:

    Hvilken lisens er det med tanke på gjenbruk av disse tegningene? Jeg har sykt lyst til å bruke dem i en presentasjon en gang i fremtiden. Det ville vært helt magisk…

  2. Torbjørn Says:

    I utgangspunktet navngivelse, ikke kommersielt, del på samme vilkår: http://creativecommons.org/licenses/by-nc-sa/3.0/no/ Ser lisensinfoen har falt ut av blogmalen min… Får gjøre noe med det :)

    Bare kjekt om du bruker dem. Har du andre behov enn det lisensen tillater er det bare å ta kontakt.

  3. Einar W. Høst Says:

    “Tre lag skal være bra har jeg hørt”. Hilarious!

    Og jeg ble inspirert til å kjøpe kjøttboller til middag, til min sønns store glede.

  4. Trond Aarø Says:

    Fantastisk morsomt ! :-)

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Siste kommentarer

best seo services company
I'm not sure where you are getting your information, but good topic. I needs to spend some time learning more or understanding more. Thanks for wonder...
Louis Vuitton Outlet
30 years old Kalamazoo-born Vitalia totally likes it barbecuing bicycling. Last but not least she is intrigued by charters and flights as an example, ...
Børge Hansen
Denne likte jeg veldig godt. Du skriver godt og har gode betraktninger  Keep it up – flere trenger å tørre å lære mer om ledelse – du l...
Tormod
Er egentlig ikke overrasket. F# sin fortè er programmererens produktivitet/kvalitet og anledning til parallell kjøring. Men kjøremotoren har ...
Stian
Ville også prøvd med et større problem (x100 eller x1000 f.eks). Når man snakker så små brøkdeler av et sekund som her så kan tiden for en ell...
Torbjørn
Har ikke sjekket - tar en titt i morgen hvis tid :)...
Einar W. Høst
Mhp tco: hva sier ILSpy?...
Torbjørn
Har ikke sett noe på PSeq før, men kjenner til den typen funksjoner fra blant annet Clojure. Og problemet med slike funksjoner i sammenhenger som de...
Håvard
Veldig bra sammenligning! Har du sett på ytelsen av PSeq.* fra powerpakken? Tipper den vil gi performancehit på små mengder, men kan kanskje resul...
Torbjørn
Jeg kom på en demonstrasjon-variant til jeg burde inkludere, nemlig bruk av list comprehension (en type computation expression (også kalt monads)). ...
Creative Commons-lisens
Innholdet på denne bloggen er tilgjengelig under Creative Commons Navngivelse-Ikkekommersiell-DelPåSammeVilkår 3.0 Norge lisens.

Programmeringsbloggen
Kjempekjekt.com

© 2006-2013 Torbjørn Marø

Jeg har vært en profesjonell programmerer siden 1999, og dette er min blogg. Målet med bloggen er å stimulere meg selv og alle andre til kontinuerlig eksperimentering og læring.

Jeg forsøker å være allsidig, og programmerer blant annet i C#, Ruby, Erlang og Clojure.

Jeg praktiserer TDD og andre smidige utviklingspraksiser. Jeg er opptatt av kvalitet og ren kode.

Dette og ganske mye mer kan du lese om på denne bloggen!