IT-arkitektur er noe som stadig nevnes; at man trenger en tjenesteorientert arkitektur, en brukerorientert arkirektur, en modulbasert arkitektur, eller kanskje en dataorientert arkitektur. Eller kanskje alt på en gang. Navnelista er lang.
Om å skape orden
Arkitektur er teknikker som skal hjelpe mennesker til å forstå kompliserte systemer, som igjen skal få kompliserte systemer til å virke bedre sammen, være raske, mer feiltolerante og enkle å bruke. Resultatet skal bli et enklere system. Det strømlinjeformer enkelte prosesser av systemene og skal hjelpe til med å gjøre systemene mer vedlikeholdbare.
Det er flere måter å komme fram til en arkitektur. Jeg har selv gått i fella, flere ganger – man velger en arkitektur for tidlig i prosjektet. Det er lett å gå seg blind i arkitektur når man hører at man trenger ting som Scrum, MVC, Cloud Computing, skyen, SaaS, SOA og ESB, buzzwords brukt av selgere for å selge inn produkter og tjenester. Løsningen er å ikke låse seg til en arkitektur til å begynne med, før man egentlig vet hva man skal lage.
En arkitektur utvikler seg over tid mens man arbeider målrettet med prosjektet og målrettet jobbet mot målet med prosjektet er. Det er alltid en smartere måte å løse et problem på, man bare vet ikke om det ennå.
Innfallsvinkler
Arkitektur finnes på flere nivåer. Man ser på arkitektur fra forskjellige innfallsvinkler. Som utvikler tenker jeg gjerne på hvordan koden er strukturert, gjerne i moduler strukturert i hver sine kataloger, på objekter med arv av abstrakte klasser og grensesnitt og hvordan kommunikasjonen mellom to systemer på nettverket skal foregå. En driftsperson tenker mer i retning av hvilke servere tjenestene skal kjøre på, i hvilke nettverkssoner, regelsett i lastbalanserer, feilhåndtering og backup. Ledelsen ønsker gjerne at utviklingsteamet skal være agile og kunne snu seg raskt ved endringer, men man ønsker også stabilitet og forutsigbarhet. En optimal arkitektur koster mye, ofte mer enn man er villig til å investere i prosjektet.
Wikipedia nevner følgende innfallsvinkler til arkitektur:
- Funksjonell og logisk
- Programkode og modulbasert
- Utvikling og strukturelt
- Kjøremiljø, samtidighet, prosesser og tråder
- Komponenter, fysisk utplassering, utrulling og installering
- Brukerinteraksjon og tilbakemeldinger
- Data og datamodell
Jeg vil igjennom en serie med innlegg berøre disse arkitekturtemaene nærmere.
Dersom du bare er interessert i å lese om arkitektur kan du følge arkitekturfeeden.