API Performance und Caching
API Performance und Caching reduzieren Latenz, erhöhen den Durchsatz und schonen Backend-Ressourcen, indem sie Antworten und Berechnungen wiederverwenden.
Kompakte Beschreibung
API Performance beschreibt, wie schnell und effizient eine API Anfragen verarbeitet. Wichtige Kennzahlen sind Latenz, Durchsatz und Fehlerrate. Caching ist eine der effektivsten Methoden, um Performance zu verbessern, indem bereits berechnete oder abgerufene Daten zwischengespeichert werden. Caching kann auf verschiedenen Ebenen stattfinden: im Browser, im CDN, im API Gateway, im Anwendungsserver oder in der Datenbank. HTTP bietet standardisierte Cache-Header wie Cache-Control, ETag, Last-Modified und Expires. Serverseitige Caches wie Redis oder Memcached speichern häufig genutzte Daten im Arbeitsspeicher. Eine durchdachte Caching-Strategie berücksichtigt Cache-Dauer, Invalidierung, Konsistenz und die richtige Wahl der Cache-Ebene. Performance-Optimierung umfasst darüber hinaus Datenbankindizes, Pagination, Asynchronität, Kompression, Load Balancing und effiziente Serialisierung.
Wichtige Komponenten
Latenz und Durchsatz
Latenz ist die Zeit, die eine Anfrage von der Sendung bis zur Antwort benötigt. Durchsatz ist die Anzahl der Anfragen, die eine API pro Zeiteinheit verarbeiten kann. Gute API Performance bedeutet niedrige Latenz und hohen Durchsatz bei stabiler Fehlerrate.
HTTP Cache Header
Cache-Control ist der wichtigste HTTP-Header für Caching. Er legt Regeln wie max-age, no-cache, no-store, private oder public fest. ETag und Last-Modified ermöglichen bedingte Anfragen mit If-None-Match und If-Modified-Since. Der Server kann bei unveränderten Daten mit 304 Not Modified antworten, ohne den Body erneut zu senden.
Browser Cache
Browser cachen Antworten basierend auf den HTTP-Cache-Headern. Das reduziert Netzwerktraffic und verbessert die Ladezeit für wiederkehrende Anfragen. Für sensible Daten sollte private oder no-store verwendet werden, damit der Browser nichts speichert.
CDN Caching
Content Delivery Networks cachen API-Antworten oder statische Inhalte an geografisch verteilten Standorten. Das reduziert Latenz für Nutzer weltweit und entlastet die Backend-Server. CDNs eignen sich besonders für öffentliche, häufig angefragte Daten.
API Gateway Cache
API Gateways können Antworten vor dem Weiterleiten an Backend-Services cachen. Das reduziert Backend-Last und Antwortzeiten. Gateways prüfen Cache-Header, Rate Limits und Authentifizierung, bevor sie eine Anfrage an den Cache oder das Backend weitergeben.
Serverseitiger Cache
Serverseitige Caches wie Redis oder Memcached speichern Daten im Arbeitsspeicher. Sie werden genutzt, um Datenbankabfragen, teure Berechnungen oder externe API-Aufrufe zu vermeiden. Caches können mit TTL, Invalidierung oder Cache-Aside Pattern verwaltet werden.
Cache-Aside Pattern
Beim Cache-Aside Pattern prüft die Anwendung zuerst den Cache. Ist die Daten nicht vorhanden, wird sie aus der Datenbank geladen und im Cache gespeichert. Bei Updates wird der Cache invalidiert oder aktualisiert. Dieses Pattern ist flexibel und weit verbreitet.
ETag und bedingte Anfragen
ETag ist ein Wert, der die Version einer Ressource repräsentiert. Der Client sendet bei einer erneuten Anfrage den ETag im If-None-Match Header. Hat sich die Ressource nicht geändert, antwortet der Server mit 304 Not Modified. Das spart Bandbreite und Verarbeitungszeit.
Cache Invalidierung
Cache Invalidierung ist die Herausforderung, Caches aktuell zu halten. Strategien sind TTL-basiertes Ablaufen, explizite Invalidierung beim Schreiben, Write-Through Caching und Event-basierte Invalidierung. Falsche Invalidierung führt zu veralteten Daten.
Pagination und Datenmenge
Große Antworten erhöhen Latenz und Speicherverbrauch. Pagination, Filter und Sortierung begrenzen die zurückgegebene Datenmenge. Clients sollten nur die Daten abrufen, die sie tatsächlich benötigen.
Datenbankoptimierung
Langsame Datenbankabfragen sind häufig ein Engpass für API Performance. Indizes, optimierte Queries, Denormalisierung, Caching und Connection Pooling verbessern die Antwortzeiten. Langlaufende Anfragen sollten asynchron oder paginiert verarbeitet werden.
Kompression
Kompression mit gzip oder Brotli reduziert die Größe von Response-Bodys, besonders bei JSON. Moderne Server und Clients unterstützen Kompression standardmäßig. Der Accept-Encoding Header signalisiert unterstützte Verfahren.
Praxisbeispiel
Eine Produktdaten-API nutzt mehrere Caching-Ebenen, um Performance zu verbessern.
Cache-Konfiguration für öffentliche Produktdaten:
GET /api/v1/products/42
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: public, max-age=3600
ETag: "abc123"
{
"id": 42,
"name": "Laptop",
"price": 999
}
Bei einer erneuten Anfrage sendet der Client:
GET /api/v1/products/42
If-None-Match: "abc123"
Hat sich das Produkt nicht geändert, antwortet der Server mit:
HTTP/1.1 304 Not Modified
Serverseitig wird das Produkt zusätzlich in Redis mit einer TTL von einer Stunde gespeichert. Bei einer Preisänderung wird der Redis-Cache und der CDN-Cache invalidiert, sodass Clients die aktuellen Daten erhalten.
FAQ: API Performance und Caching
1. Was ist API Performance?
2. Was ist Caching?
3. Was ist Cache-Control?
4. Was ist ein ETag?
5. Was ist ein CDN?
6. Was ist Redis?
7. Was ist das Cache-Aside Pattern?
8. Was ist 304 Not Modified?
9. Was ist Cache Invalidierung?
10. Was ist Write-Through Caching?
11. Was ist ein TTL?
12. Was ist private vs public Caching?
13. Was ist no-store?
14. Was ist Kompression bei APIs?
15. Was sind Best Practices für API Caching?
Quellen
- https://www.rfc-editor.org/rfc/rfc9111
- https://redis.io/docs/manual/keyspace-notifications/
- https://developer.mozilla.org/docs/Web/HTTP/Caching
Buchempfehlungen zur API-Performance und Architektur
Wenn Du Dich weiter mit API Performance, Caching und Systemdesign beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:
Keine Bücher für Kategorie "software-engineering" gefunden.