APM - Begriffe

APM - Begriffe zum Lernen

APM - Begriffe zum Lernen


S. F.
Diese Lernkarten bieten einen umfassenden Überblick über die Grundlagen von Application Performance Management (APM) auf Universitätsniveau. Sie behandeln zentrale Konzepte wie Server, Caches, Zugriffsmechanismen und verschiedene Algorithmen zur Optimierung von Systemleistung. Besonders nützlich sind sie für Studierende und IT-Professionals, die sich mit der Verbesserung der Leistung von IT-Systemen befassen, indem sie Caching-Strategien, Lasttests und Failover-Mechanismen verstehen und anwenden.
Flashcards
43
Students
4
Language
German
Category
Computer Science
Level
University
Created / Updated
18.06.2020 / 27.02.2023

Lernkarten

Scale-Out

 Mehr Rechner, Relativ günstig, flexibel, Muss App an verteiltes Setting anpassen, Prinzipiell immer machbar, aber nicht jede App ist parallelisier bar

Load-Balancing

Last muss auf mehrere Server verteilt werden! Eigentliche Server-Requests werden auf mehrere Server verteilt -> Load Balancer, Separate Maschine, Einstiegspunkt des Dienstes, Verteilt eingehende Requests dynamisch, Hardware- oder Software basiert

LB-Methode: Direct Routing:

 LB ändert Frame, schickt Request an Server weiter, Server antwortet direkt an Client, Vorteil: Auf IP-Level (Layer 3+) muss nichts am Request geändert werden

LB-Methode: NAT

LB trenn Client von Server, welche in privatem Subnet sind, wenn LB Request erhält, übersetzt er einfach Ziel-IP. Vorteil: Einfachere Konfiguration, Möglichkeit für Traffic Inspection, Nachteil: Server hat andere IP als Client sieht, App muss evt. Angepasst weden

LB-Methode: Reverse Proxy:

 Trennung wie bei NAT, aber Requests werden auf Application Layer dekodiert, Beispiel: Client baut HTTP-Verbindung mit LB auf, LB mit Server, Vorteile: Balancing-Entscheidung basierend auf App- Informationen (z.B. Cookies) möglich, LB kann TLS und Caching übernehmen, Nachteil: RessourenVerbrauch

Monitoring:

 Damit LB weiss welche Server verfügbar sind, führt er regelmässige Health Checks durch, Pings, TCP Verbindungsaufbau, http Requests

Persistenz

 LB sollte sicherstellen, dass Client immer auf gleichm Server landet. LB muss client-server Verhältnis lernen IP-Level: LB erstellt Tabelle mit Zuordnung Client-IP -> Server,Einfach, aber keine Lösung für Clients mit wechselnder IP! Cookie Learning (HTTP-Level): LB inspiziert HTTP-Request (Session-Cookie), erstellt Tabelle mit Zuordnung Session-ID -> Server, Probleme: 1) Endlicher Speicher, 2) Ausfall von Master-LB Cookie Insertion (HTTP-Level): LB fügt eigenes Cookie in HTTP-Messages ein, Löst beide Probleme, aber ist rechenintensiver
 

Cluster:

Mehrere vernetze Rechner, die zusammenarbeiten, und die man als ein System ansehen kann. Normalerweise nahe beieinander, Über privates Netz verbunden (interconnect), zentralisiert verwaltet

Compute Clusters

 Rechenpower für High-Performance Computing, Applikationen werden explizit parallelisiert

Load-balancing Clusters

Verteilen von “gleichartigen” Requests, Wie unsere Tomcats

High-availability (HA) Clusters:

Wenn ein Knoten ausfällt, übernimmt ein anderer (“failover”), Wie unsere Load Balancers

Direct-Attached Storage (DAS

 Festplatten, die direkt an Host angeschlossen sind, Schnittstellen: SCSI, SATA, eSATA, USB, Block-basierte Schnittstelle, Supereinfach, Direkter Zugriff nur von einem Host möglich, Zugriff von anderen Hosts: Protokolle wie FTP, Netzwerk-Dateisysteme wie NFS oder SMB

Network-Attached Storage (NAS)

Dedizierter File-Server in LAN, Zugriff von allen anderen Hosts möglich, Zugriff normalerweise über NFS oder SMB (d.h. über TCP/IP), Einfache Lösung, aber: Limitierte Bandbreite, belastet LAN

Storage Area Network (SAN):

 Dediziertes Netzwerk für Speicher, Extra-Features: Automatisches Backup, Monitoring, Spezielle Protokolle: Fibre Channel, iSCSI, Infiniband, Darunter: Kupfer oder Glasfaser, für bis 10km-Leitungen, Höhere Bandbreite: z.Z. 50Gbit/s pro Link, mit 4x, 8x, 12x..., Zugriff ist block-basiert! (Wie bei direct-attached storage) D.h. Dateisystem wird von Host implementiert, Braucht spezielles “shared disk file system”, Zugreifende Hosts müssen Zugriff koordinieren! Nodes müssen genau wissen, welche anderen Nodes “alive” sind und ebenfalls auf Speicher zugreifen.

Probleme mit Shared Storage:

 SAN: Block-basierter Zugriff!, Auch ohne SAN ein Problem: Datenkonsistenz, “Split Brain”, Links zwischen zwei Knoten sind down, aber Anbindung an öffentliches Netz und an Speicher steht noch, Jeder Knoten meint, er sei der einzige und koordiniert nicht mehr!

Was ist Performance

Entwickler: Algorithmen, Ressourcenverbrauch, Administratoren: Skalierbarkeit, Auftraggeber: Hohe Zuverlässigkeit und Verfügbarkeit, Endbenutzer: Flüssige Bedienung, kurze Wartezeit Welche Metriken? Subjektivität mit objektiven Metriken entschärfen • Ressourcenverbrauch • Durchsatz (throughput) • Verfügbarkeit • Endbenutzer-Antwortzeit (response time) - Achtung: Jeweils nicht eine Zahl, sondern Verteilung, oder möglicherweise variabel im Verlauf der Zeit

Ressourcenverbrauch:

 Auf System-Ebene: • CPU-Auslastung (in %) • CPU load (run queue length) siehe “load average” von top oder ähnlichen Tools • Speicherverbrauch: Virt. vs realer Speicher (Swap!) • Input/Output Speichermedien, Netzwerk Auf | Applikations-Ebene: • Thread-Pools • Datenbank-Verbindungen (JDBC connection pool) • Caches Optim. Grösse, Invalidierung • Messaging-Queues Synchron und asynchron, z.B. RMI und JMS

Durchsatz

Definition: Anzahl durchgeführte Operationen/verarbeitete Requests pro Zeit (Einheit z.B. s–1)

Verfügbarkeit

 Wie lange muss eine Applikation während eines bestimmten Zeitintervalls zur Verfügung stehen? • Z.B. innerhalb eines Jahres während 99.9% der Zeit, Wird in Service Level Agreement (SLA) festgehalten, Zusätzliche Bedingungen können bestimmt werden: • Welcher Durchsatz muss während der Zeit garantiert sein? • Wie hoch darf die E.U.-Antwortzeit sein?

Testplan: Introduction

Zielsetzung, Umfang, konkrete Ziele, evtl. Einschränkungen, Budget

Test Items: Auflistung der Komponenten, die getestet werden

Features to be tested: Auflistung aller Eigenschaften und Funktionalität, die getestet werden, inkl. Referenzen zu Spezifikationen o.ä.

Approach: Wie werden die Features getestet? Detailierte Informationen über Test-Szenarios, Testfälle, Testdaten, Techniken, Prioritäten

Environmental needs: Voraussetzungen an Testumgebung, z.B. Hardware, Software, andere Voraussetzungen.

Für Performance-Tests zwei Seiten: Zu testende Infrastruktur und Testing-Seite

Lasttest (Load test):

 Analysieren der Leistung unter einer konstanten, definierten Last

• Antwortzeiten, Durchsatz, Ressourcenverbrauch,

Ziel: Sicherstellen, dass Leistung unter erwarteten Last “ausreichend” ist, Wird z.B. vor dem Live-Schalten einer Applikation oder  vor erwarteter Zunahme der Last gemacht

Dauerlasttest (Soak test):

Untersuchen der Leistung über einen grösseren Zeitraum hinweg

• 12 Stunden bis zu mehreren Tagen,

Ziel: Identifizieren von Memory Leaks oder anderen Anomalitäten

Failover-Test

Failover: Automatisches Umschalten auf Reserve-System wenn es zu Ausfall des Primär-Systems kommt, Lasttest bei (manuell verursachtem) Ausfall von Systemkomponenten,

Ziel: Sicherstellen, dass Failover zuverlässig funktioniert (und evtl. Analyse von benötigten Ressourcen)

Stresstest

Schrittweises Erhöhen der Last, bis System instabil wird oder ganz ausfällt,

Ziel: Verstehen des Systems unter extrem hoher Last Fragen:

• Wie ändert sich Antwortzeit-Verhalten?

• Wie gross ist maximale Last, ohne dass System unzuverlässig wird?

• Zeigt System unerwartetes Verhalten?

• Kommt es zu Dateninkonsistenzen?

Stressverhalten einer Applikation:

 Welche Effekte können auftreten?

• Einzelne Aussetzer

• Totalausfall

• Datenverlust/-Inkonsistenz

• Failover Wie kann man Verhalten analysieren? 

• Visualisieren von Messresultaten

Memoization

 Spezielle Form von Caching, d.h. Zwischenspeichern von berechneten Resultate

Paper: Automatische Analyse findet Orte in Java-Code, wo Caches sinnvoll sein könnten

Was ist ein Cache?

Schneller Puffer-Speicher, der wiederholte Zugriffe auf ein langsames Hintergrundmedium oder aufwändige Neuberechnungen zu vermeiden hilft. Bereits geladene/generierte Daten bleiben in Cache, damit sie bei Bedarf schneller abrufbar sind.

Wichtig: Werte in Cache müssen schnell abgelegt und gefunden werden

“Cache” vs. “Buffer”

• ... eine limitierte Grösse hat

• ... Datenobjekte desselben Typs speichert

• ... die Leistung eines Systems optimiert

Buffer: Reduziert Transfers zu Medium durch Zusammenfassung (“Schreib-Cache”), Zwischenspeicher für Komponenten, die nicht direkt kommunizieren können

Cache: Speichert Daten, die in Zukunft wertvoll sein können (“Lese-Cache”)

Cache Access:

Lese-Zugriff auf Cache-Speicher

Cache Hit (Cache Miss): Element wurde (nicht) gefunden

Hit Ratio (Miss Ratio): Anteil der Zugriffe, die zu einem Cache Hit (Miss) führten

• Hohe Hit Ratio: Cache ist “hot”, sonst “cold”

Füllstand: Anteil des verwendeten Platz gegenüber Gesamtplatz im Cache

• Hotness und Füllstand grundsätzlich unabhängig!

Principle of Locality

• Locality by time: wenn ein Objekt verwendet wird, wird es mit grosser Wahrsch. bald wieder verwendet

• Locality by space: ebenso “benachbarte” Objekte

Bélády-Algorithmus

 Entfernt immer das Element, welches in der Zukunft am längsten nicht benötigt wird.

 FIFO-Algorithmus

Entfernt Element, das sich am längsten im Cache befindet

• Einfache Heuristik für Locality by time

• Effiziente Implementation mit Ringbuffer: Braucht nur einen Zeiger auf ältestes Element

 LRU Algorithmus

 Entfernt Element, das am längsten nicht gelesen wurde, Echte Locality by time (was aber selbst auch nur Heuristik ist!) Muss aber für jedes CacheElement Zusatz-Info speichern (was Cache-Grösse reduziert)

MRU-Algorithmus

Entfernt Element, das als letztes gelesen wurde

• In gewissen Situation gilt temporal locality nicht! (Dafür vielleicht spatial locality)

• Beispiel: Mehrmaliges Iterieren über Datensatz, der knapp nicht in Cache passt

• LRU würde keinen einzigen Cache Hit landen, MRU viele!

 LFU-Algorithmus:

Least Frequently Used Entfernt Element, das am wenigsten oft gelesen wurde

Allgemeine Heuristik: Vergangenheit ist aussagekräftig für Zukunft, Braucht Zusatz-Info pro Element, wie LRU und MRU

 RR-Algorithmus

 Random Replacement: Entfernt ein zufälliges Element • Super-effizient und einfache Implementation ohne jeglichen Zusatz-Speicher

• Wahrscheinlichkeit, dass “wichtigstes” Element entfernt wird ist klein, unabhängig von ZugriffMuster! Wurde wegen Einfachheit in ARM-Prozessoren verwendet Verteilte Caches: Mehrere, durch hohe Latenz getrennte Caches optimieren Zugriff auf das selbe Medium -> CPU-Caches Cache-Koheränz: Ein System von Caches liefert konsistente Daten an alle verarbeitenden Einheiten

• Temporäre Inkonsistenz ok, solange nicht gelesen wird

Write-back

Daten werden vorerst im Cache gehalten und erst später (...) auf Medium geschrieben

• Inkonsistenz wird mit zusätzlichen Mechanismen behandelt

• Z.B. MESI-Protokoll in Intel CPUs

Autoscaling

Monitoring von Performance-Metriken -> Berechnen von Performance- Indikatoren (PI/KPI) -> Vergleich mit Policies (Schwellwerte, u.a.) -> Massnahmen: (De-) Provisionierung

Performance-Indikatoren

Können einfache Metriken sein

• Speicherverbrauch, CPU-Load, Antwortzeit (In-Server), ... Oder higher-level Indikatoren

• Kombinination mehrerer Metriken oder externe Metrike

• Aggregierung über definierten Zeitraum (Ø, Median, ...)

• Beispiele: EUAntwortzeit, aktive Users, Kosten, ...

 Kriterien für gute PI

 Periodische, automatische Erfassung möglich | Kleine Verzögerungszeit | Kleine Volatilität | Aussagekraft für Massnahmen Verständlichkeit (für Policy-Definitionen)

Lernen