Architecture Characteristics Flashcards
Performance
Wat is het?
- Hoe snel en efficiënt reageert een systeem op acties van gebruikers en andere systemen.
Voorbeeld van realisatie in de architectuur
- Caching: Gebruik een cache-laag (bijv. Redis of Memcached) om vaak gebruikte data snel op te halen. Dit voorkomt dat je steeds dezelfde berekening of database-query moet uitvoeren.
- Load balancing: Spreid verzoeken (requests) over meerdere servers zodat geen enkele server overbelast raakt.
Scalability
Wat is het?
- In hoeverre kan een systeem meegroeien (of -krimpen) met toenemende of afnemende belasting, zonder dat performance of stabiliteit daaronder lijdt.
Voorbeeld van realisatie in de architectuur
- Microservices: Knip de applicatie op in kleinere services die onafhankelijk van elkaar kunnen schalen.
- Containerization: Gebruik Docker/Kubernetes zodat je automatisch extra containers kunt opstarten bij hoge belasting (horizontal scaling).
Availability / Reliability
Wat is het?
- Availability: Hoe vaak en hoe lang is het systeem beschikbaar?
- Reliability: De mate waarin het systeem correct blijft functioneren zonder fouten of verstoringen.
Voorbeeld van realisatie in de architectuur
- Redundancy / Failover: Zet meerdere instanties van een service in verschillende zones of datacenters. Als één instantie uitvalt, neemt een andere het over.
- Circuit Breaker-pattern: In microservices-omgevingen gebruik je een circuit breaker die voorkomt dat een falende service alle aanroepen blokkeert.
Security
Wat is het?
- Hoe goed is het systeem beschermd tegen ongeautoriseerde toegang, aanvallen en datalekken?
Voorbeeld van realisatie in de architectuur
- OAuth/Single Sign-On (SSO): Implementeer een gecentraliseerde authenticatieserver voor alle microservices.
- Encryption at rest & in transit: Sla gevoelige data versleuteld op (bijv. in een database) en dwing HTTPS/TLS af voor alle netwerkverkeer.
Maintainability
Wat is het?
- Hoe eenvoudig is het om de software te wijzigen of uit te breiden zonder ongewenste bijeffecten?
Voorbeeld van realisatie in de architectuur
- Layered Architecture (N-tier): Scheid presentatielaag, logicalaag en datalaag zodat wijzigingen in één laag niet direct doorwerken in andere lagen.
- Code Conventions & Documentatie: Hanteer duidelijke richtlijnen voor naming, structuur en documenteer de architectuur, zodat nieuwe ontwikkelaars snel begrijpen hoe alles werkt.
Testability
Wat is het?
- Hoe gemakkelijk kun je de software (geautomatiseerd) testen, en hoe snel krijg je feedback over de kwaliteit van wijzigingen?
Voorbeeld van realisatie in de architectuur
- Dependency Injection: Maak gebruik van DI-containers zodat je services of componenten makkelijk kunt mocken of stubben in unittests.
- Automated Test Pipeline: Integreer continuous integration (CI) met automatische unittests, integratietests en end-to-end-tests.
Usability
Wat is het?
- De gebruiksvriendelijkheid en efficiëntie voor eindgebruikers, zowel functioneel als qua interface.
Voorbeeld van realisatie in de architectuur
- UX/UI Component Library: Ontwerp een herbruikbare set UI-componenten (bijv. in React, Angular of Vue) met consistente look & feel.
- User-centered design: Betrek eindgebruikers vroeg in het designproces en maak prototypes/tests om feedback te verzamelen.
Interoperability
Wat is het?
- Hoe goed kan het systeem samenwerken of communiceren met andere systemen (standaarden, protocollen, dataformaten)?
Voorbeeld van realisatie in de architectuur
- RESTful APIs / GraphQL: Stel uniforme, gedocumenteerde endpoints beschikbaar aan externe partijen.
- Open standaarden: Gebruik JSON, XML, of andere industrienormen voor data-uitwisseling.
Portability
Wat is het?
- De mate waarin het systeem overdraagbaar is naar andere platformen of omgevingen (bijv. besturingssystemen, cloudproviders).
Voorbeeld van realisatie in de architectuur
- Containers (Docker): Verpak je applicaties in containers, zodat ze draaien op elke omgeving die Docker ondersteunt.
- Platform-onafhankelijke technologieën: Programmeertalen of frameworks die niet afhankelijk zijn van één specifiek OS (bijv. Java, .NET Core, Go).
Modularity / Modifiability
Wat is het?
- De mate waarin het systeem is opgesplitst in losse, onderling zo min mogelijk afhankelijke modules (loose coupling), waardoor je gemakkelijk wijzigingen kunt doorvoeren.
Voorbeeld van realisatie in de architectuur
- Microservices: Elk (micro)service heeft zijn eigen domeinmodel en database. Wijzigingen binnen één service raken andere services nauwelijks.
- Plug-in Architecture: Bied een duidelijk gedefinieerde plugin-API. Nieuwe features worden als plug-ins toegevoegd zonder de kern te hoeven wijzigen.
Extensibility
Wat is het?
- Hoe gemakkelijk je het systeem kunt uitbreiden met nieuwe functionaliteiten of componenten, zonder de bestaande structuur te doorbreken.
Voorbeeld van realisatie in de architectuur
- Event-Driven Architecture: Maak gebruik van berichtgebaseerde communicatie (bijv. via Kafka of RabbitMQ). Nieuwe componenten kunnen dan meeluisteren op events, zonder dat bestaande systemen aangepast moeten worden.
- Configuratiegedreven oplossingen: Stel veel zaken in via configuratiebestanden in plaats van code, zodat nieuwe opties eenvoudig toegevoegd of geactiveerd kunnen worden.
Recoverability
Wat is het?
- De mate waarin het systeem kan herstellen van storingen of onverwachte fouten (bijv. door middel van back-ups, redundantie of automatische failover).
Voorbeeld van realisatie in de architectuur
- Back-up & Restore Strategie: Automatiseer (dagelijks) back-ups van databases en bestanden en test regelmatig of terugzetten (restore) echt werkt.
- Event Sourcing: Sla alle gebeurtenissen (events) op in een log. Als de database corrupt raakt, kun je de state van het systeem herleiden door alle events opnieuw af te spelen.