Systeemarchitectuur
Inleiding
Systeemarchitectuur gaat over de manier waarop computersystemen (hardware, software, toepassingen) opgebouwd zijn: wat zijn de componenten, wat zijn de interfaces, en wat zijn de regels die hierbij van belang zijn.
Interfaces spelen hierbij een belangrijke rol: zie /Interfaces en Separation of Concerns
Een ander belangrijk begrip is /Redundantie.
Over systeemarchitectuur
De huidige computersystemen zijn op een bepaalde manier opgebouwd en samengesteld uit onderdelen. Deze opbouw, de interfaces die gebruikt worden, en de regels en principes die daarbij gebruikt worden noemen we de architectuur.
- We onderscheiden de architectuur van de implementatie: de manier waarop de verschillende onderdelen gemaakt en opgebouwd zijn. Als je te maken hebt met een groot onderdeel, zou je daarbinnen ook weer een architectuur en een implementatie kunnen onderscheiden.
Bij de huidige computersystemen zien we een opbouw in drie lagen:
- de fysieke laag (hardware);
- de logische laag (systeemsoftware);
- de toepassingenlaag (toepassingen)
Deze lagen zijn van elkaar gescheiden en verbonden door interfaces:
- de interface tussen de hardware van de processor, en de software die daarop draait, heet de instructieset-architectuur.
- de interface tussen de logische laag en de toepassingen bestaat uit een verzameling APIs (application program interface).
De hardware bestaat onder meer uit de processor (inclusief werkgeheugen); randapparaten voor achtergrondgeheugen en voor interactie met de gebruiker; en randapparaten voor communicatie, bijvoorbeeld in lokale en mobiele netwerken. De meeste hardware is universeel, en niet gekoppeld aan een toepassing.
De systeemsoftware bestaat onder meer uit het Operating System, programmeertalen (met compilers, interpreters, en libraries), netwerksoftware (bijvoorbeeld TCP/IP, als basis van het internet), en database management systemen. Deze systeemsoftware is universeel, en niet gekoppeld aan een toepassing.
Voorbeelden van toepassingen zijn legio: van tekstverwerking tot spelletjes en van de aansturing van een enkele lamp tot die van een auto, vliegtuig of grote fabriek.
Bij de interface tussen de hardware (fysieke laag) en de systeemsoftware (logische laag) gaat het vooral om variatie en evolutie. Bij de interface tussen de logische laag en toepassingen gaat het vooral om de logische laag als gemeenschappelijke infrastructuur: de generieke en gemeenschappelijke delen komen in de logische laag, de toepassingen bevatten vooral die delen die specifiek zijn voor die toepassing. Dit vermindert de redundantie van het systeem.
Verschillende soorten toepassingsdomeinen
Hoewel we deze lagen bij de meeste computers kunnen onderscheiden, zijn er toch grote verschillen tussen computers. De opbouw van een computersysteem wordt vaak bepaald door het toepassingsdomein: een personal computer stelt andere eisen dan een smartphone, een server, of een embedded system in een lamp.
- in het geval van embedded systemen: computers die ingebouwd zijn in een apparaat, voor de besturing van dat apparaat (bijvoorbeeld een printer of een magnetron), hebben we meestal een eenvoudige logische laag - zonder grafisch gebruikersinterface, zonder database management systeem; aan het Operating System (voor zover dat er is) stellen we wel de eis dat dit real-time toepassingen mogelijk maakt.
- in het geval van een smartphone speelt de gebruikersinterface een belangrijke rol, het eenvoudige beheer van toepassingen, de communicatie in het internet, en het stroomverbruik.
Interface hardware-software: variatie en evolutie in beide domeinen
De scheiding tussen de hardware en de software heeft de volgende (bedoelde) eigenschappen:
- de variatie en evolutie van de hardware is onafhankelijk van de variatie en evolutie van de software
- je kunt je computer vervangen door een nieuwe versie, of je kunt andere randapparaten toevoegen, zonder dat dit gevolgen heeft voor de software: je kunt dezelfde toepassingen blijven gebruiken, en vaak ook dezelfde systeemsoftware;
- anders gezegd: zonder dat je iets hoeft te veranderen in de software, kun je direct profiteren van de vooruitgang in de hardware (Moore's Law).
- de variatie en evolutie van de software is onafhankelijk van de variatie en evolutie van de hardware
- je kunt de software vervangen door een nieuwe versie, of een nieuwe software-component toevoegen, zonder dat je in de hardware iets hoeft te veranderen.
- De IBM/360 was het eerste computersysteem waarbij deze hardware/software-interface gedefinieerd werd, in de vorm van een instructieset-architectuur, met als doel om grote variaties in de hardware mogelijk te maken. Je kon bij introductie kiezen tussen een eenvoudige versie, gebaseerd op een seriële 8-bits implementatie, of voor een van de uitgebreidere versies, met als uiterste een parallelle 64-bits implementatie. In beide gevallen kon je dezelfde software gebruiken - met ongeveer een factor 50 verschil in prestaties.
Evolutie van de hardware: Moore's Law
De snelheid van de evolutie van de hardware is erg groot: meestal geven we dit aan met Moore's Law. We hebben niet alleen te maken met een exponentiële ontwikkeling op het gebied van de halfgeleidertechnologie, maar ook op de gebieden van achtergrondgeheugen (harde schijf), communicatie (zowel bedraad, optisch, als draadloos), en gebruikersinterface (resolutie van display). Niet voor al deze gebieden hebben we te maken met een verdubbeling van de prestaties in elke twee jaar; voor bijvoorbeeld accu's ligt dit tempo veel lager.
De hardware is universeel, binnen bepaalde grote toepassingsgebieden. Dit betekent dat deze in zeer grote aantallen gemaakt kan worden. Dit is één van de drijvende krachten achter Moore's Law, en van de andere exponentiële ontwikkelingen.
- Je moet niet alleen meer transistoren op een chip kunnen plaatsen, je moet deze ook kunnen verkopen. In het geval van een universeel apparaat als een computer kan dat; voor een geluidsversterker of een radio is het zinloos om daar steeds meer transistoren in onder te brengen.
- Als je een CD-speler gebruikt als universeel opslagapparaat voor een computer, dan heeft het zin om deze steeds sneller te maken (speed race); als je er alleen muziek mee afspeelt, dan bepaalt deze toepassing de maximaal benodigde snelheid.
Niet alleen de productie is exponentieel, ook de markt voor deze universele computerhardware is exponentieel.
Logische laag: gedeelde infrastructuur voor toepassingen
Naast de scheiding tussen de hardware en de software, is er ook een scheiding tussen de universele systeemsoftware (logische laag) en de toepassingen. Naast het aspect van variatie en evolutie hebben we hier vooral te maken met de logische laag als gemeenschappelijke infrastructuur voor de toepassingen:
- de logische laag herbergt de universele aspecten van informatieprocessen - zoals het opbergen en terugzoeken van gegevens. Deze worden aangeboden op een hoog niveau van functionaliteit, om het gebruik ervan te vereenvoudigen, en de kans op fouten in het gebruik kleiner te maken.
- de logische laag herbergt de functionaliteit die voor veel verschillende toepassingen van belang is. Door deze buiten de toepassingen te halen, vermindert de redundantie van het totale systeem. Dit verhoogt de betrouwbaarheid, verlaagt de kosten van toepassingen, en vereenvoudigt de samenwerking tussen toepassingen (en tussen gebruikers).
- de logische laag zorgt voor het beheer van de gemeenschappelijke resources - zoals de hardware. De toegang hiertoe wordt geregeld op zo'n manier dat verschillende toepassingen en gebruikers elkaar niet in de weg kunnen zitten, en dat ze -indien nodig- soepel kunnen samenwerken.
De logische laag en de toepassingen
De logische laag adresseert de volgende aspecten:
- de resources van de fysieke laag worden gedeeld door meerdere toepassingen en meerdere gebruikers. De logische laag zorgt ervoor dat deze elkaar niet in de weg zitten.
- de gemeenschappelijke functionaliteit van de verschillende toepassingen worden ondergebracht in onderdelen in de logische laag, die gedeeld worden door deze toepassingen.
- de gemeenschappelijke infrastructuur vormt de basis voor de samenwerking tussen de toepassingen en de gebruikers.
Delen van fysieke resources
De toepassingen en gebruikers delen de fysieke resources: ze moeten elkaar daarbij niet in de weg kunnen zitten. Het Operating System, ondersteund door de hardware, zorgt voor het toewijzen van resources aan de verschillende processen (toepassingen in uitvoering). Door middel van virtueel geheugen worden deze processen van elkaar geïsoleerd. Een proces heeft, bijvoorbeeld door het gebruik van speciale modes (kernel vs. user mode), een gecontroleerde toegang tot de hardware en tot de delen van de logische laag.
Er zijn nog meer mogelijkheden voor het isoleren van processen, toepassingen en gebruikers:
- in een browser kun je een deelvenster (iframe) in een sandbox laten uitvoeren;
- een volgende stap is een Container: hiermee kun je de toegang tot de hardware- en software-delen beperken, terwijl er toch sprake is van het delen van onderdelen van de logische laag
- door een proces in een Virtuele Machine uit te voeren, kun je de toegang tot de hardware-resources precies regelen. Een proces heeft hierin een eigen Operating System, en andere delen van de logische laag;
- een laatste stap is om een proces op een eigen fysieke machine uit te voeren.
Delen van software-componenten (code)
Omdat het bij software-componenten om onveranderlijke code gaat, heb je geen problemen met processen of gebruikers die elkaar in de weg kunnen zitten. "Delen" is onbeperkt en zonder kosten mogelijk.
Een voordeel van het delen van software-componenten is dat het aantal gebruikers toeneemt, evenals de variatie in het gebruik. Dit betekent:
- eventuele problemen in een component (fouten) worden eerder ontdekt;
- de druk om deze problemen op te lossen is groter;
- de eventuele eenmalige kosten worden door een grotere groep gebruikers gedeeld;
- er is een grotere groep gebruikers met ervaring met deze software - je kunt gemakkelijker iemand vinden die je verder kan helpen;
- als het om Open Source Software gaat, is er waarschijnlijk een grotere groep die deze software kan ondersteunen en onderhouden.
(Dit is een belangrijke regel bij software: de reproductiekosten zijn 0 of minimaal - hoe meer gebruikers er zijn, des te groter de groep waarover de eenmalige kosten verdeeld kunnen worden.)
Delen van data
Soms heb je te maken met data die voor meerdere toepassingen van belang is:
- de verschillende toepassingen op een smartphone maken vaak gebruik van de lokatie-data, telefoon- en contactdata, agenda-data, en andere data die aan de eigenaar van de smartphone gekoppeld is;
- in het geval van een project heb je te maken met project-data die niet aan een specifieke toepassing gekoppeld is;
- in het geval van een organisatie heb je te maken met organisatie-data die niet aan een specifieke toepassing gekoppeld is;
- deze data breng je onder in een gemeenschappelijke database, die vanuit verschillende toepassingen benaderd kan worden.
Door het gebruik van een gemeenschappelijke database voor een organisatie kun je ervoor zorgen dat alle toepassingen de meest recente gegevens van de klanten hebben. Een adreswijziging hoeft dan ook niet op meerdere plaatsen doorgevoerd te worden.
Open Data
Steeds meer data die door bijvoorbeeld overheden verzameld worden, komen beschikbaar als open data. Deze kunnen dan door andere organisaties gebruikt worden in hun eigen toepassingen. Hierbij is het vooral interessant om data vanuit verschillende bronnen te combineren.
Samenwerken via een gedeelde infrastructuur
De gemeenschappelijke infrastructuur - van gedeelde computer tot gedeeld intranet en gedeeld internet - vormt een basis voor samenwerking - tussen gebruikers en tussen toepassingen.
- bij een dergelijke samenwerking heb je aan de ene kant te maken het de toegang tot gemeenschappelijke programma's en gegevens; aan de andere kant moet je deze toegang ook kunnen afschermen, eventueel afhankelijk van de rol die een gebruiker of een toepassing in de samenwerking heeft.
- autorisatie en identificatie.
- zoals we in /Redundantie beschrijven, heeft het vaak voordelen om te werken met gedeelde data - bijvoorbeeld een gedeeld document, in plaats van afzonderlijke kopieën voor elke gebruiker of toepassing.
Gebruik van diensten via het web
In het geval van samenwerken via het internet, speelt het gebruik van diensten over het internet ook een belangrijke rol. Een toepassing kan dan naast de lokale componenten (logische laag) die gedeeld kunnen worden, ook gebruik maken van diensten van elders. Een voorbeeld hiervan is Google Maps - maar inmiddels zijn er veel meer diensten beschikbaar. Ook toepassingen die zelfstandig gebruikt kunnen worden, zoals Trello of Slack, zijn tegenwoordig veelal van een API voorzien zodat deze in andere toepassingen geïntegreerd kunnen worden.
Diensten in het web kunnen ook gebruikt worden als gedeeltelijke vervanging van een lokale infrastructuur (cloud computing). Hierbij kun je profiteren van de professionele ondersteuning van dergelijke diensten.
Een voordeel van diensten in het web is dat deze samenwerking over de grenzen van de eigen organisatie vaak veel eenvoudiger maken. Je kunt per project een groep "in de wolken" aanmaken die voor dat doel kan samenwerken - terwijl iedereen daarnaast de eigen infrastructuur van de eigen organisatie heeft.
Platform voor toepassingen: trends
Je kunt de logische laag zien als een platform voor toepassingen. Enkele trends vallen hierbij op:
- De drempel voor het ontwikkelen en exploiteren van nieuwe toepassingen wordt steeds lager.
- Elke scholier die zich erop toelegt kan eigen apps maken en via het web of via een app-store aanbieden.
- Voor de aanbieders van de app-stores is het model: probeer het anderen gemakkelijk te maken geld te verdienen, en hef daar via je eigen infrastructuur een "belasting" over.
- Het is steeds eenvoudiger om een toepassing op een schaalbare manier aan te bieden - bijvoorbeeld door gebruik te maken van de cloud-infrastructuur.
- Ook als scholier kun je eenvoudig gebruik maken van de cloud-infrastructuur van bijvoorbeeld Amazon, Google, IBM, Microsoft
- Je hebt geen grote investeringen nodig, anders dan je eigen tijd: de kosten hangen af van het daadwerkelijke gebruik.
- Het gebruik van deze infrastructuur voor het ontwikkelen van een toepassing, en het uitproberen daarvan met een kleine groep gebruikers, is meestal gratis of erg goedkoop.
- Voor de functionaliteit van een toepassing kun je gebruik maken van veel gespecialiseerde diensten die via het web aangeboden worden: van database-diensten tot Google Maps.
- De browser ontwikkelt zich steeds meer tot een "Operating System", met JavaScript als machinetaal; andere talen worden eventueel vertaald naar JavaScript.
De logische laag in meer detail
Operating Systems
Taken van het Operating System:
- uitvoeren van programma's (toepassingen): processen
- toewijzen van resources aan proces; scheduling
- beheer van toepassingen
- installeren; update; verwijderen
- beheer van gebruikers
- toevoegen, verwijderen
- toewijzen van resources (bijv. achtergrondgeheugen)
- regelen van toegangsrechten; autorisatie, identificatie
- beheer van data
- backup en archivering
- beveiliging (security)
- tegen fouten in toepassingen en van gebruikers
- tegen indringers
Middelen die hiervoor gebruikt worden zijn o.a.:
- isoleren van processen, door middel van
- virtueel geheugen;
- user space (vs. kernel space)
- sandbox; container
- virtuele machines
Programmeertalen
Netwerken, internet en het web
- Internet architectuur: end-to-end principe
- Web architectuur: REST principes
Database management systemen
Opmerkingen
/Gevolgen voor leerlingen en scholen