Gibt es eine gute Architektur?
Jedes System hat eien Software-Architektur
(welche dokumentiert oder verbreitet sein kann)
Nein gute oder schlechte Architektur, entweder mehr oder weniger funktional für Ziel
Architekturen können anhand spezifisch gestetzter Ziele evaluiert werden
Komponentisierung und Abstraktion
Komponentiesierung versteckt Komplexität
Wert ist vertikal abgeleitet
Layers eines Information System
Client: jeder Benutzer oder Programm welches eine Operation über das System ausführen will
Presentation Layer: Clients interagieren mit System über PL
application logic layer: bestimmt was das System eigentlich macht
ressource management layer: kümmert sich um die Organisation der Daten um die application layer zu unterstützen (typischerweise Datenbank)
Pfeile und Boxen
Box als Teil des Systems
Pfeil als Verbindung
je mehr Boxen desto modularer -> mehr Möglichkeiten für Verteilung und Parallelisierung
je mehr Pfeile desto mehr sessions (Verbindungen) -> müssen gewartet, koordiniert werden. -> System komplexer
-> schlechtere Permormance
System Designer versuchen die flexibilität von modularem Design mit dem performance Ansprüchen von realen applications zu balancieren
Kein Problem kann nicht durch hinzufügen einer weiteren Stufe gelöst werden
Kein Performance Problem kann nicht gelöst werden indem eine Stufe entfernt wird
Software Components
Von Software Components zu Services
über:
Service als virtuelle Komponente
Impact of Software Architecture
hindert oder ermöglicht quality attributes eines systems
- Performance, Modifiability, security, Scalability, Reusability
Konsequenzen für change management
ermöglicht Kommunikation unter stakeholders
- verständlichkeit für alle (auch nicht IT-Menschen)
Trägt fundamentale Design Entscheidungen und Einschränkungen
Bottom-Up Design
Hauptkosten bei wrappers und interfaces zu alten anwendungen
Top-Down Desing
Wrapper
adapter design pattern erlaubt inkompatible Klassen (Client und Adaptee) mitenander zu arbeiten indem das interface des Adaptee in ein vom Client erwartetes Interface konvertiert wird
One-tier
Vollzenetralisierte Architektur
User/Programs greifen auf das System durch display terminals zu, was gezeigt wird ist vom Server kontrolliert(“dumb terminals”).
höchst optimierbar
Two-tier
presentation layer bei Client
3-tier
komplett separierte Tiers
layers in der Regel verteilt
middleware als umweg zwischen client und anderen layers des system, zusätzliche layer die alle unterliegendenlayers umfasst
N-tier
verbundene 3-tier systeme
web-server als zusätzliche layer für den zugriff von clients
web layer als presentation layer auf server seite
client greift durch web browser auf presentation layer zu
services
ein oder mehrere deployed, runnig (“always-on”) software programme, geräten und netzwerken die zusammenarbeiten um eine für den end-user zusammenhängende applikation zu liefern
Service oriented Computing (SOC)
deployed software einheiten die über ein netzwerk verteilt sind, welche benutzt werden können um business prozesse und - applikationen zu erstellen
Service oriented Architecture (SOA)
Reliability
Wahrscheinlichkeit R(t) das ein System in einem Intervall [0:t] zufriedenstellend funktionioniert. Wenn es in t=0 funktioniert hat.
R(t) = 1 - F(t)
R(t) = [f(tau) d tau]t-inf.
= 1 - [f(tau) d tau]0-t
Availability
A(t) Wahrscheinlichkeit das das System zu einem Zeitpunkt t zufreidenstellend funktioniert.
steady-state Availability:
As = MTTF/MTBF
Fault Intolerance vs Fault Tolerance
Intolerance -> Fehler vermeiden
Tolerance -> Fehler tolerieren
Redundancy
Duplizierung kritischer Komponenten
static -> alle Komponenten laufen kontinuierlich
dynamic -> Komponenten werden nach Bedarf dazu geschaltet
Triple Modular Redundancy
Structural vs. Time Redundancy
Structural -> Mehrere Ressourcen um redundancy
herzustellen
Time -> Eine Ressource wird länger benutzt um redundancy herzustellen
Performance
Ziel der performance hängt von spezifischen System Anforderungen ab
kann durch Benchmark bestimmt werde: