Hierarchische Architektur
Die hierarchische Architektur betrachtet das gesamte System als eine Hierarchiestruktur, in der das Softwaresystem auf verschiedenen Hierarchieebenen in logische Module oder Subsysteme zerlegt wird. Dieser Ansatz wird normalerweise beim Entwerfen von Systemsoftware wie Netzwerkprotokollen und Betriebssystemen verwendet.
Beim Entwurf von Systemsoftware-Hierarchien stellt ein Subsystem auf niedriger Ebene Dienste für seine benachbarten Subsysteme auf höherer Ebene bereit, die die Methoden auf der unteren Ebene aufrufen. Die untere Schicht bietet spezifischere Funktionen wie E / A-Dienste, Transaktionen, Zeitplanung, Sicherheitsdienste usw. Die mittlere Schicht bietet domänenabhängigere Funktionen wie Geschäftslogik und Kernverarbeitungsdienste. Die obere Schicht bietet abstraktere Funktionen in Form von Benutzeroberflächen wie GUIs, Shell-Programmierfunktionen usw.
Es wird auch bei der Organisation von Klassenbibliotheken wie der .NET-Klassenbibliothek in der Namespace-Hierarchie verwendet. Alle Designtypen können diese hierarchische Architektur implementieren und häufig mit anderen Architekturstilen kombinieren.
Hierarchische Architekturstile sind unterteilt in -
- Main-subroutine
- Master-slave
- Virtuelle Maschine
Hauptunterprogramm
Ziel dieses Stils ist es, die Module wiederzuverwenden und einzelne Module oder Unterprogramme frei zu entwickeln. In diesem Stil wird ein Softwaresystem durch Verwendung einer Top-Down-Verfeinerung gemäß der gewünschten Funktionalität des Systems in Unterprogramme unterteilt.
Diese Verfeinerungen führen vertikal, bis die zerlegten Module einfach genug sind, um ihre ausschließliche unabhängige Verantwortung zu übernehmen. Die Funktionalität kann von mehreren Anrufern in den oberen Schichten wiederverwendet und gemeinsam genutzt werden.
Es gibt zwei Möglichkeiten, wie Daten als Parameter an Unterprogramme übergeben werden, nämlich:
Pass by Value - Unterprogramme verwenden nur die vergangenen Daten, können diese jedoch nicht ändern.
Pass by Reference - Unterprogramme verwenden und ändern den Wert der Daten, auf die der Parameter verweist.
Vorteile
Das System lässt sich leicht anhand der Verfeinerung der Hierarchie zerlegen.
Kann in einem Subsystem für objektorientiertes Design verwendet werden.
Nachteile
Anfällig, da es global freigegebene Daten enthält.
Eine enge Kopplung kann zu stärkeren Welligkeitseffekten von Änderungen führen.
Master-Slave
Dieser Ansatz wendet das Prinzip „Teilen und Erobern“ an und unterstützt die Fehlerberechnung und Rechengenauigkeit. Es ist eine Modifikation der Haupt-Subroutinen-Architektur, die Zuverlässigkeit des Systems und Fehlertoleranz bietet.
In dieser Architektur stellen Slaves dem Master doppelte Dienste zur Verfügung, und der Master wählt durch eine bestimmte Auswahlstrategie ein bestimmtes Ergebnis unter den Slaves aus. Die Slaves können dieselbe Funktionsaufgabe durch unterschiedliche Algorithmen und Methoden oder durch völlig unterschiedliche Funktionen ausführen. Es enthält paralleles Rechnen, bei dem alle Slaves parallel ausgeführt werden können.
Die Implementierung des Master-Slave-Musters erfolgt in fünf Schritten:
Geben Sie an, wie die Berechnung der Aufgabe in eine Reihe gleicher Unteraufgaben unterteilt werden kann, und identifizieren Sie die Unterdienste, die zur Verarbeitung einer Unteraufgabe erforderlich sind.
Geben Sie an, wie das Endergebnis des gesamten Dienstes mithilfe der Ergebnisse aus der Verarbeitung einzelner Unteraufgaben berechnet werden kann.
Definieren Sie eine Schnittstelle für den in Schritt 1 identifizierten Unterdienst. Sie wird vom Slave implementiert und vom Master verwendet, um die Verarbeitung einzelner Unteraufgaben zu delegieren.
Implementieren Sie die Slave-Komponenten gemäß den im vorherigen Schritt entwickelten Spezifikationen.
Implementieren Sie den Master gemäß den in den Schritten 1 bis 3 entwickelten Spezifikationen.
Anwendungen
Geeignet für Anwendungen, bei denen die Zuverlässigkeit der Software von entscheidender Bedeutung ist.
Weit verbreitet in den Bereichen paralleles und verteiltes Rechnen.
Vorteile
Schnellere Berechnung und einfache Skalierbarkeit.
Bietet Robustheit, da Slaves dupliziert werden können.
Slave kann unterschiedlich implementiert werden, um semantische Fehler zu minimieren.
Nachteile
Kommunikationsaufwand.
Nicht alle Probleme können geteilt werden.
Schwer zu implementieren und Portabilitätsproblem.
Architektur der virtuellen Maschine
Die Architektur der virtuellen Maschine gibt einige Funktionen vor, die nicht der Hardware und / oder Software eigen sind, auf der sie implementiert ist. Eine virtuelle Maschine baut auf einem vorhandenen System auf und bietet eine virtuelle Abstraktion, eine Reihe von Attributen und Operationen.
In der Architektur virtueller Maschinen verwendet der Master den gleichen Unterdienst vom Slave und führt Funktionen wie Split-Arbeit, Aufruf von Slaves und Kombinieren von Ergebnissen aus. Entwickler können damit noch nicht erstellte Plattformen simulieren und testen sowie "Katastrophen" -Modi simulieren, die zu komplex, kostspielig oder gefährlich wären, um sie mit dem realen System zu testen.
In den meisten Fällen trennt eine virtuelle Maschine eine Programmiersprache oder Anwendungsumgebung von einer Ausführungsplattform. Das Hauptziel ist die Bereitstellungportability. Die Interpretation eines bestimmten Moduls über eine virtuelle Maschine kann wie folgt wahrgenommen werden:
Die Interpretationsmaschine wählt eine Anweisung aus dem zu interpretierenden Modul aus.
Basierend auf der Anweisung aktualisiert die Engine den internen Status der virtuellen Maschine und der obige Vorgang wird wiederholt.
Die folgende Abbildung zeigt die Architektur einer Standard-VM-Infrastruktur auf einer einzelnen physischen Maschine.
Das hypervisor, auch die genannt virtual machine monitor, läuft auf dem Host-Betriebssystem und weist jedem Gast-Betriebssystem übereinstimmende Ressourcen zu. Wenn der Gast einen Systemaufruf tätigt, fängt der Hypervisor ihn ab und übersetzt ihn in den entsprechenden Systemaufruf, der vom Host-Betriebssystem unterstützt wird. Der Hypervisor steuert den Zugriff jeder virtuellen Maschine auf die CPU, den Speicher, den dauerhaften Speicher, die E / A-Geräte und das Netzwerk.
Anwendungen
Die Architektur der virtuellen Maschine eignet sich für die folgenden Bereiche:
Geeignet zur Lösung eines Problems durch Simulation oder Übersetzung, wenn es keine direkte Lösung gibt.
Beispielanwendungen umfassen Interpreter für Mikroprogrammierung, XML-Verarbeitung, Ausführung von Skriptbefehlssprachen, regelbasierte Systemausführung, Programmiersprache vom Typ Smalltalk und Java Interpreter.
Häufige Beispiele für virtuelle Maschinen sind Interpreter, regelbasierte Systeme, syntaktische Shells und Befehlssprachenprozessoren.
Vorteile
Portabilität und Unabhängigkeit von Maschinenplattformen.
Einfachheit der Softwareentwicklung.
Bietet Flexibilität durch die Möglichkeit, das Programm zu unterbrechen und abzufragen.
Simulation für ein Katastrophenarbeitsmodell.
Führen Sie zur Laufzeit Änderungen ein.
Nachteile
Langsame Ausführung des Dolmetschers aufgrund der Dolmetschernatur.
Aufgrund der zusätzlichen Berechnung, die mit der Ausführung verbunden ist, entstehen Leistungskosten.
Überlagerter Stil
Bei diesem Ansatz wird das System in einer Reihe von höheren und niedrigeren Schichten in einer Hierarchie zerlegt, und jede Schicht hat ihre eigene alleinige Verantwortung im System.
Jede Ebene besteht aus einer Gruppe verwandter Klassen, die in einem Paket, in einer bereitgestellten Komponente oder als Gruppe von Unterroutinen im Format einer Methodenbibliothek oder einer Headerdatei gekapselt sind.
Jede Schicht stellt einen Dienst für die darüber liegende Schicht bereit und dient als Client für die darunter liegende Schicht, dh die Anforderung an die Schicht i + 1 ruft die von der Schicht i über die Schnittstelle der Schicht i bereitgestellten Dienste auf. Die Antwort kann auf die Ebene i + 1 zurückgehen, wenn die Aufgabe abgeschlossen ist. Andernfalls ruft Schicht I kontinuierlich Dienste von Schicht I -1 unten auf.
Anwendungen
Layered Style eignet sich in folgenden Bereichen -
Anwendungen mit unterschiedlichen Dienstklassen, die hierarchisch organisiert werden können.
Jede Anwendung, die in anwendungsspezifische und plattformspezifische Teile zerlegt werden kann.
Anwendungen, die eine klare Trennung zwischen Kerndiensten, kritischen Diensten und Benutzeroberflächendiensten usw. aufweisen.
Vorteile
Design basierend auf inkrementellen Abstraktionsebenen.
Bietet Verbesserungsunabhängigkeit, da Änderungen an der Funktion einer Ebene höchstens zwei andere Ebenen betreffen.
Trennung der Standardschnittstelle und deren Implementierung.
Implementiert durch die Verwendung komponentenbasierter Technologie, die das Plug-and-Play neuer Komponenten im System erheblich vereinfacht.
Jede Schicht kann eine abstrakte Maschine sein, die unabhängig bereitgestellt wird und die Portabilität unterstützt.
Einfaches Zerlegen des Systems basierend auf der Definition der Aufgaben von oben nach unten
Verschiedene Implementierungen (mit identischen Schnittstellen) derselben Schicht können austauschbar verwendet werden
Nachteile
Viele Anwendungen oder Systeme lassen sich nicht einfach mehrschichtig strukturieren.
Geringere Laufzeitleistung, da die Anforderung eines Clients oder eine Antwort an den Client möglicherweise mehrere Ebenen durchlaufen muss.
Es gibt auch Leistungsprobleme hinsichtlich des Overheads beim Marshalling und Puffern von Daten durch jede Schicht.
Das Öffnen der Zwischenschichtkommunikation kann zu Deadlocks führen, und das „Überbrücken“ kann zu einer engen Kopplung führen.
Ausnahmen und Fehlerbehandlung sind ein Problem in der Schichtarchitektur, da Fehler in einer Schicht auf alle aufrufenden Schichten nach oben verteilt werden müssen