APPE
HSLU - Modul
HSLU - Modul
Set of flashcards Details
Flashcards | 141 |
---|---|
Language | Deutsch |
Category | Computer Science |
Level | University |
Created / Updated | 06.06.2020 / 21.10.2024 |
Weblink |
https://card2brain.ch/box/20200606_appe
|
Embed |
<iframe src="https://card2brain.ch/box/20200606_appe/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
1.1.1 Was ist Architektur und was wird darin beschrieben?
Architektur ist eine Abstraktion --> Etwas wird vereinfacht dargestellt
Ein System wird in der Architektur beschrieben durch:
- Dessen Struktur und Aufbau
- Enthaltene Softwarteile (Komponenten)
- Beziehungen
1.1.2 Wie ist die Definition einer Softwarearchitektur?
Softwarearchitektur definiert sich durch die Kernelemente eines Systems, welches als Basis für alle weiteren Teile nur schwer und aufwendig verändert werden können.
Martin Fowler
Die Architektur repräsentiert die signifikanten Designentscheidungen die ein System festhalten, wobei die Signifikanz an den Kosten von Änderungen bemessen wird.
Grady Booch
1.1.3 Zwischen welchen Aspekten unterscheidet man bei der Software Architektur?
Man unterscheidet übersichtshalber zwischen folgenden Aspekten der Software-Architektur:
- Grundlegende Struktur
- Kommunikation und Verarbeitung
- Eingesetzte Technologien
1.1.4 Welche Arten von Applikationen gibt es?
Arten von Applikationen:
- Einzelbenutzerapplikation
- Mehrbenutzerapplikation
- Internetanwendungen
1.1.5 Was sind Vorteile hierarchischer Strukturierung?
- Präzisere Schätz- und Planbarkeit
- Unabhängige Entwicklung möglich
- Einfache Testbarkeit
- Unabhängiges Deployment
- Potential für Wiederverwendung höher
1.1.7 Was ist der Unterschied zwischen monolithischem Design und monolytischem Deployment?
Monolithisches Design → nicht modularisiert = erodierter Code
Monolithisches Deployment → saubere modularisierte Applikation
Bsp: Eine Mobile-App, welche intern aus zehn verschiedenen, sauberen Komponenten (oder Libraries) besteht, kann problemlos als "monolithisches" Packet (am Stück) verteilt werden.
Die Grösse → Es ist ein KlumpenrisikoBei kleinen Änderungen muss die ganze Anwendung neu deployed werden.
1.1.9 Was sind verteilte Applikationen und was ist die Konsequenz davon wenn man die Applikation verteilt?
Bei verteilten Applikationen werden einzelne Teile, Teilsysteme, Komponenten, Module, Schichten etc. auf mehrere verschiedenen Rechner (Hosts, Tiers) verteilt. Konsequenzen:
- Die Teile laufen in einzelnen unabhängigen Prozessen
- Die Teile laufen in echter Parallelität (TIERS -> verteilt auf auf verschiedenen Systemen)
1.1.11 Was ist Modularisierung und zu was führt diese?
Mit der Modularisierung möchte man sinnvolle funktionale Module und möglichst abgeschlossenen Einheiten bilden. Dabei verfügen sie über wohldefinierte Schnittstellen. Dies führt zur…
- einer besseren Verständlichkeit
- paralleler Entwicklungsmöglichkeit
- Wiederverwendbarkeit
1.1.12 Was sind Kriterien zur Modularisierung?
- Kopplung → Ausmass der Kommunikation und Abhängigkeit zwischen den Modulen
- Kohäsion → Ausmass der Kommunikation und interner Zusammenhalt innerhalb eines Moduls
Kopplung und Kohäsion werden auf allen Abstraktionsebenen immer wieder neu beurteilt. Anforderungen werde jedoch zunehmend strenger.
1.1.13 Zu was führt eine Modularisierung?
Übergeordnete Struktur in der Architektur
- Gruppierung → Eine Menge von Modulen mit gemeinsamen Eigenschaften wird als Gruppe gehandhabt.
- Hierarchie → Ein Modul fasst eine Gruppe von (Sub-)Modulen zu einem einzigen zusammen.
- Geschichtet → Modul(-gruppen) können eine logische Kette bilden, die vertikal meist als Schichten betrachtetet werden.
1.1.14 Was sind Eigenschaften eines Moduls?
- Explizite Schnittstelle
- Starke Kohäsion
- Daraus ergibt sich → Information Hidding & Lose Kopplung
1.1.15 Was sind Kriterien zum Entwurf eines Moduls?
Kriterien für den Entwurf eines Modules. Die vier fundamentalen Kriterien sind:
- Zerlegbarkeit → Module sind möglichst unabhängig voneinander
- Kombinierbarkeit → Flexibel und kombinierbar
- Verständlichkeit → Einzeln und ohne (wenig) Kontext verständlich
- Stetigkeit / Kontinuität → Module haben Beständigkeit
1.1.17 Was sind Prinzipien und Regeln für Modulkopplung?
- ADP → Acyclic Dependencies Prinzip (zyklische Abhängigkeiten sind nicht erlaubt)
- SDP → Stable Dependencies Prinzip (Abhängigkeit in Richtung der stabilen Komponente)
- SAP → Stable Abstractions Prinzip (Damit Ihre Stabilität nicht verhindert, damit sie erweitert werden können.)
Granularität der Wiederverwendung ist eine Granularität des Releases.→ Man fügt das zusammen was auch gemeinsam (mit einer Version) veröffentlicht wird. → REP ist ein inkludierendes Prinzip.
Klassen die aus denselben Gründen und zur selben Zeit modifiziert werden, fasst man in den selben Komponenten zusammen. Das ist nichts anderes als SRP (Single Responsibility Prinzip) und OCP (Open Closed Prinzip) auf Architekturebene angewendet.CCP ist ein inkludierendes Prinzip.
Zwinge den Nutzer einer Komponente nicht in eine Abhängigkeit von Elementen die er nicht benötigt.→ Ein Modul sollte nur als Ganzes sinnvoll nutzbar sein und nicht nur Teile oder Bruchstücke davon.
Die Abhängigkeit der Komponenten sollte in Richtung der Stabilern Komponente verlaufen.Stabil = schwer veränderbar
Stabile Komponenten sollten im gleichen Masse auch abstrakt sein. Damit Ihre Stabilität nicht verhindert, damit sie erweitert werden können.
1.2.1 Was sind Architekturmuster und Entwurfsmuster?
- Architekturmuster → Beschreiben als Konzept den Grundaufbau eines ganzen Systems
- Entwurfsmuster → objektorientierte Konzepte für Teilprobleme
1.2.2 Für was und für welche Systeme werden Architekturmuster benötigt?
Architekturmuster werden für verschiedene zentrale Aspekte benötigt.Um grosse, komplexe System zu strukturieren. Beispielsweise
- für stark verteilte Systeme
- für inter(re)aktive Systeme
- für hochverfügbare Systeme
1.2.3 Wie wird ein Architekturmuster mit Schichten umgesetzt?
Gliederung eines Systems in aufeinander aufbauende, funktionale Schichten.
- Kommunikation über wohldefinierte Schnittstellen.
- Abhängigkeit nur in Richtung der tieferen Schicht.
Wird benötigt zur Strukturierung sowohl innerhalb eines Systems als auch Systemübergreifend. Bei möglicher physischer Verteilung der einzelnen Schichten spricht man von Tiers.
1.2.4 Nach welchen Kriterien werden Schichten gebildet?
Kann nach verschiedenen Kriterien erfolgen:
- Logisch/ funktional
- Technik
- Abstraktionsebenen
Kann hierarchisch verfeinert werden:
- Funktionale Schichtung
- Nach Abstraktionslevel
- Nach Technologie / Sprache / Framework
Bei einer Implementation mit Java manifestieren sich die verschiedenen Schichten häufig als Packagestruktur:
- ch.domain.system.client.*
- ch.domain.system.server.*
Es empfiehlt sich feingranularer zu arbeiten.
1.2.8 Welche Vorteile haben mehr Schichten?
- Bessere Strukturierung
- Grössere Chance auf Wiederverwendung
- Hohe Flexibilität
- Bessere Skalierbarkeit
- Einfachere und präzisere Planung
- Parallele und getrennte Entwicklung möglich
1.2.9 Welche Nachteile haben mehr Schichten?
- Komplexität des ganzen Systems grösser
- Mehr Schnittstellen, mehr Aufwand, mehr Planung
Nicht die Anzahl (oder Höhe) der Schichten ist die Herausforderung, sondern zu erkennen, wann eine Schicht bzw. ein ganzer Stack zu breit wird.D.h Die Domäne einer Applikation wird schlicht zu gross - Als Konsequenz werden die Schichten zu breit. Daher braucht es eine weitere Partitionierung → Services
1.2.11 Was sind Services (SOA)?
1. Services sind fachlich orientiert und technologieneutral.
2. Services kapseln sauber abgegrenzte Sub-Domänen in eigenständige, verteilte Dienste (Services).
3. Die Services sind in einem Verzeichnisdienst eingebunden und werden dynamisch gesucht und gebunden.
4. Die Dienste können von einer übergeordneten Applikationen zur Realisierung eines Businessprozesses genutzt (orchestriert) werden.
5. Ein Service verfügt über eine wohl definierte Schnittstelle.
Bsp:Mausklick auf einen Button löst Event aus, auf welchen sich beliebige Klassen/Komponenten registrieren und somit darauf reagieren können. (Lose Kopplung - Empfänger und Sender müssen sich nicht kennen)
1.2.14 Was manifestiert sich bei SOA?
Bei SOA manifestieren sich die Abhängigkeiten (Kommunikation) zwischen den Services meistens in einer synchronen Kommunikation.
Bsp:
Die Lager-Applikation braucht bestimmte Artikeldaten in einer funktionalen Abhängigkeit → Ohne diese Info kann das Lager nicht arbeiten. Bei diesen Ereignissen sind Aktionen denkbar, die zwar erfolgen sollen aber auch asynchron zu einem späteren Zeitpunkt erledigt werden können. →Messages/ Events in Queues/Topics
1.3.1 Was ist ein Microservice?
Der Service wird noch kleiner geschnitten - Man unterteilt eine Domain(-model) in kleinere möglichst unabhängige Teildomänen) → bounded context
1. Eine Applikation wird aufgeteilt in mehrere, kleine Services.
- Die Applikation wird primär vertikal in mehrere, möglichst eigenständige Teile aufgeteilt.
- Sie sollten möglichst autark arbeiten können und auf eigenen Daten(-modelle) zurückgreifen.
- Die Teile sollten möglichst nicht direkt miteinander kommunizieren müssen, sondern werden über das GUI oder über den vorgelagerten Gateway orchestriert.
2. Jeder Service läuft in eigenem Prozess auf einer eigenen Plattform
- typisch in virtualisiertem Container
- Laufen in echter Parallelität als verteiltes System
3. Leichtgewichtige Kommunikation (meist Restfull/http/JSON)
- Sehr populär sind JSON basierend auf Rest Schnittstellen aufgrund ihrer Einfachheit sehr populär.
- Gute Akzeptanz im Operating
- bestehend Protokolle
4. Voneinander unabhängig deploybar (somit auch Realeasbar)
- MS sind eigenständige Projekte und Release-Einheiten
- Unabhängig Deploybar (Applikation muss mit Ausfällen umgehen können)
5. Automatisiertes Deployment(DevOps, PaaS, IaaS)
- Weitgehende Automatisierung ist ein MUSS-Feature
1.3.2 Was sind Vorteile von Microservices?
- Schneller
- kleiner
- unabhängig deploybar
- austauschbarer
- flexiblere Entwicklung ist möglich
- eigene Datenhaltung
- unterschiedliche Technologien
- unterschiedliche Plattformen
- unterschiedliche Sprachen
- Resilienz
- Releasing.
1.3.3 Was sind Nachteile von Microservices?
- Hohe Anforderungen an das Operating (DevOps ist ein Muss)!
- Höhere Gesamtkomplexität durch Asynchronität und Resilienz.
- Neue Herausforderung durch cross-cutting-concerns wie Sicherheit, Überwachung, Monitoring und Logging.