Google PCD: Anwendungsdaten, Zustand und Speichermuster — Lernleitfaden
Teil des Google Professional Cloud Developer — Lernleitfaden. Üben Sie mit verifizierten Antworten im Google-Prüfungscenter, oder absolvieren Sie zeitlich begrenzte Übungstests auf ExamRoll.io.
Überblick
Moderne Anwendungen auf Google Cloud kombinieren routinemäßig mehrere Datenspeicher, um Latenz, Konsistenz, Skalierbarkeit, Kosten und betriebliche Komplexität auszugleichen. Die Auswahl zweckmäßiger Dienste und Muster – und das Verständnis ihrer Ausfallmodi – ist zentral für ein resilientes Design. Dieser Abschnitt fasst praktische Anleitungen für Cloud SQL, Cloud Spanner, Firestore, Bigtable, Memorystore und Cloud Storage zusammen und behandelt Migrationen, Partitionierung und Datenschutz.
Relationale Daten in Cloud SQL
Cloud SQL bietet verwaltetes MySQL, PostgreSQL und SQL Server mit vertrauter RDBMS-Semantik.
Private Konnektivität
- Verwenden Sie eine private IP, um den Datenbankverkehr in Ihrer VPC zu belassen. Dies eliminiert öffentliche Ingress-Regeln und IP-Allowlists und vermeidet die Komplexität von NAT-Egress.
- Stellen Sie sicher, dass Routen und Firewall-Regeln den Verkehr von der VPC zur Instanz zulassen. Die Namensauflösung für private IP wird automatisch gehandhabt, wenn die private IP aktiviert ist.
- Für Serverless (Cloud Run, App Engine, Cloud Functions) bevorzugen Sie Cloud SQL-Konnektoren, die die IAM-Authentifizierung und TLS übernehmen, auch bei privater IP.
Hochverfügbarkeit und Replikate
- Regionale HA platziert Primär- und Standby-Instanzen in verschiedenen Zonen mit synchroner Festplattenreplikation. Rechnen Sie mit einer kurzen Verbindungsunterbrechung bei einem Failover; Anwendungen sollten transiente Fehler erneut versuchen und die Verbindung wiederherstellen.
- Lesereplikate sind asynchron und entlasten den Leseverkehr. Verwenden Sie regionenübergreifende Replikate für DR und Leseproximität, wobei zu beachten ist, dass Replikate „eventually consistent“ sind.
- Stufen Sie ein Lesereplikat für die Wiederherstellung oder geplante Rollenwechsel hoch. Testen Sie die Hochstufungsverfahren regelmäßig.
Backups und Point-in-Time-Recovery
- Aktivieren Sie automatisierte Backups und Transaktions-/PITR-Protokolle. Planen Sie Backups außerhalb der Spitzenzeiten, um IO-Konflikte zu reduzieren.
- Bewahren Sie mehrere Kopien auf und validieren Sie regelmäßig Wiederherstellungen auf einer separaten Instanz. Ein Backup, das Sie nicht wiederherstellen können, ist betrieblich gleichbedeutend mit keinem Backup.
Verbindungspools und -limits
- Cloud SQL erzwingt eine maximale Anzahl von Verbindungen; übermäßig viele kurzlebige Verbindungen verursachen CPU-Thrashing und Latenz. Verwenden Sie anwendungsseitiges Pooling (z. B. HikariCP, PgBouncer, ProxySQL).
- Dimensionieren Sie Pools basierend auf CPU-Kernen und der Gleichzeitigkeit der Arbeitslast, nicht nur auf dem Instanzspeicher. Beginnen Sie klein und skalieren Sie empirisch.
- Bei ephemerem/serverlosem Computing unterhält der sprachspezifische Cloud SQL-Konnektor einen Pool pro Revision; begrenzen Sie dennoch die Gleichzeitigkeit, um Verbindungsstürme nach Kaltstarts zu vermeiden.
Datenpartitionierung und Leistung
- Sharden Sie große mandantenfähige Schemata nach Kunde oder Region, um Konflikte zu reduzieren. Halten Sie „heiße“ Mandanten nach Möglichkeit isoliert.
- Erstellen Sie abdeckende Indizes sorgfältig; Über-Indizierung verlangsamt Schreibvorgänge und erhöht den Speicherbedarf. Überprüfen Sie Kardinalität und Prädikatsselektivität.
- Verwenden Sie optimistisches Sperren oder SELECT FOR UPDATE für „heiße“ Zeilen; passen Sie Autovacuum (PostgreSQL) oder InnoDB-Einstellungen (MySQL) für anhaltende Schreiblasten an.
Häufige Ausfallmodi und Gegenmaßnahmen:
- Thundering-Herd-Effekte nach VM-/Knoten-Neustarts: Begrenzen Sie die Poolgrößen und verwenden Sie exponentielles Backoff.
- Replikationsverzögerung bei Read-Your-Writes: Heften Sie Lesevorgänge an die Primärinstanz, wenn Sitzungskonsistenz erforderlich ist.
- HA-Failover-Flaps aufgrund von „Noisy Neighbors“ oder Wartungsarbeiten: Implementieren Sie Verbindungs- und Transaktionswiederholungen mit Idempotenz.
Planet-Scale Relational auf Cloud Spanner
Cloud Spanner bietet horizontale Skalierbarkeit mit globalen Konsistenzoptionen.
Konsistenz und Transaktionen
- Starke Lesezugriffe und Lese-Schreib-Transaktionen bieten strikte externe Konsistenz mithilfe von TrueTime; Commits warten kurz, um die Linearisierbarkeit sicherzustellen.
- Veraltete und zeitlich begrenzt veraltete Lesezugriffe („stale reads“) senken die Latenz und verbessern die Verfügbarkeit für leselastige Workloads, wenn die Aktualität leicht gelockert werden kann.
- Schreibgeschützte Transaktionen umfassen mehrere Lesezugriffe zu einem Zeitstempel ohne Sperren; verwenden Sie sie für konsistente Analyse-Snapshots.
Regionalität, Verfügbarkeit und Latenz
- Regionale Instanzen bieten hohe Verfügbarkeit innerhalb einer Region. Multi-regionale Konfigurationen (zum Beispiel nam-asia-eur1) bieten sehr hohe Verfügbarkeit und lokale Lesezugriffe mit geringer Latenz über Kontinente hinweg mit global konsistenten Schreibvorgängen.
- Wählen Sie Instanzkonfigurationen, die auf die Geografie Ihrer Benutzer abgestimmt sind; Schreiblatenzen steigen mit der Größe des interkontinentalen Quorums.
Skalierbarkeit und Schema-Design
- Spanner sharded Daten in „Splits“ nach Primärschlüsselbereichen, die auf Knoten verteilt sind. Hotspotting tritt auf, wenn Schlüssel monoton ansteigen. Vermeiden Sie Schlüssel wie Auto-Inkrement-IDs oder ständig ansteigende Zeitstempel an der führenden Position.
- Verwenden Sie zusammengesetzte Primärschlüssel, die Schreibvorgänge verteilen (zum Beispiel customer_hash, customer_id, reverse_timestamp).
- Verschachtelte Tabellen („interleaved tables“) platzieren untergeordnete Zeilen zusammen mit den übergeordneten für Lokalität und effiziente Joins. Verwenden Sie dies, wenn die Kardinalität und der Zugriff auf die untergeordneten Elemente stark mit dem übergeordneten Element korrelieren. Ergänzen Sie dies mit sekundären Indizes; erwägen Sie STORING-Klauseln, um Tabellenzugriffe zu reduzieren.
- Überwachen Sie CPU, Speicher und Operationen mit hoher Priorität im Vergleich zu „Best-Effort“-Operationen; skalieren Sie Knoten, um einen Spielraum unter P95-Latenzen zu gewährleisten.
Betriebsmuster
- Clients verwenden Sitzungspools; passen Sie min/max-Sitzungen an, um Erstellungsstürme zu vermeiden. Wiederholungsversuche sollten begrenzt und idempotent sein; bei ABORTED, führen Sie Lese-Schreib-Transaktionen mit Backoff erneut aus.
- Backups sind ressourcenschonend und konsistent; validieren Sie Wiederherstellungen auf separaten Instanzen. Änderungsströme und CDC-Integrationen können nachgelagerte Systeme versorgen.
Abwägungen:
- Starke globale Schreibvorgänge fügen eine Commit-Wartezeit hinzu; verwenden Sie „stale reads“ für UX-kritische, hauptsächlich lesende Pfade.
- Verschachtelung verbessert die Lokalität, kann aber den Schreibdruck konzentrieren; testen Sie mit produktionsähnlichem Traffic.
Operative NoSQL-Speicher: Firestore und Bigtable
Wählen Sie das NoSQL-Modell, das zu den Abfragemustern und dem Durchsatzprofil passt.
Firestore (Dokument)
- Datenmodell: Sammlungen (Collections) enthalten Dokumente; Dokumente können Untersammlungen haben. Modellieren Sie um Abfragemuster herum; vermeiden Sie tiefe Fan-Out-Schreibvorgänge auf einzelne „heiße“ Dokumente.
- Zugriff und Transaktionen: Dokumentenlesevorgänge und Abfragen sind im Native-Modus stark konsistent. Verwenden Sie Batch-Schreibvorgänge für eine At-most-once-Atomizität über mehrere Dokumente hinweg und Transaktionen für Read-Modify-Write-Vorgänge mit Konkurrenzprüfungen (Contention Checks).
- Indizes: Einzelfeld-Indizes sind automatisch. Zusammengesetzte Indizes mit mehreren Feldern müssen definiert werden, wenn mehrere Bereichs-/Ungleichheitsfilter oder Sortierreihenfolgen verwendet werden. Denormalisierung ist üblich, um Abfragen zu reinen Indexabfragen (index-only) zu machen.
- Client-Synchronisierung: Echtzeit-Listener streamen Änderungen; Offline-Caches gleichen Daten mit Last-Write-Wins-Semantik ab. Schützen Sie sich vor unbegrenztem Listener-Fan-Out; bevorzugen Sie Abfrage-Cursor und Filter.
- Limits und Fehlermodi: Die Schreibrate auf ein einzelnes Dokument wird serialisiert; anhaltend hohe QPS-Updates auf ein Dokument erzeugen Konkurrenz (Contention). Verwenden Sie Sharded Counters mit N Unterdokumenten und aggregieren Sie beim Lesen.
Cloud Bigtable (Wide-Column)
- Das Row-Key-Design ist von größter Bedeutung. Bigtable partitioniert Zeilen lexikographisch; die führenden Schlüsselsegmente bestimmen das Hotspotting. Vermeiden Sie sequenzielle Schlüssel wie Zeitstempel am Anfang oder nicht geshardete Benutzer-IDs.
- Muster:
- Umgekehrter Zeitstempel im Schlüssel für Zeitreihen-Lesevorgänge: key = device#hash(device_id)#reverse_ts.
- Hashen oder Bucketing der ersten Komponente zur Verteilung von Schreibvorgängen: bucket = crc32(user_id) % 128.
- Speichern Sie kleine Zellen mit vielen Spalten; vermeiden Sie große Zeilen, die sich über Tablets erstrecken. Nutzen Sie mehrere Spaltenfamilien (Column Families) zur Trennung von Zugriffskontrolle und GC-Richtlinien.
- Durchsatz und Bereitstellung:
- Verwenden Sie mehrere Cluster für Replikation und regionale Leseproximität; clusterübergreifende Schreibvorgänge werden eventuell konsistent (eventually consistent).
- Passen Sie App-Profile und Routing an; pflegen Sie großzügige clientseitige Thread-Pools und Channel-Pools.
- GC und TTL: Versions- und zeitbasierte GC entfernt alte Zellen asynchron; Daten bleiben bis zur Komprimierung (Compaction) bestehen, verlassen Sie sich also nicht auf sofortige Löschung für regulatorische Fristen.
Caching- und Objektspeicher-Muster
Memorystore (Redis/Memcached)
- Caching-Strategien:
- Read-through: Die Anwendung ruft Daten aus dem Cache ab; bei einem Miss lädt sie von der Quelle und füllt den Cache.
- Write-through: Schreibvorgänge erfolgen synchron in den Cache und in die Quelle.
- Write-behind: Schreibvorgänge im Cache puffern und asynchron übertragen (flushen); aufgrund des Verlustrisikos mit Vorsicht zu verwenden.
- Ablauf und Invalidierung:
- Wenden Sie TTLs an, die mit der Toleranz für veraltete Daten (Staleness) übereinstimmen. Invalidieren Sie Schlüssel bei Änderungen an der Source of Truth; verwenden Sie für aggregierte Caches versionierte Schlüssel, um Cache Stampedes zu vermeiden.
- Verwenden Sie Mutex oder Single-Flight, um Cache Stampedes bei beliebten Schlüsseln zu verhindern.
- Sitzungen: Speichern Sie ephemere Sitzungsdaten mit TTL; verschlüsseln Sie Werte oder speichern Sie nur intransparente (opaque) Tokens, wenn die Daten sensibel sind.
- Ratenbegrenzung mit Redis:
- Fixed-Window: INCR mit EXPIRE auf einem Schlüssel pro Identität.
- Sliding-Window oder Token-Bucket für gleichmäßigere Limits; ziehen Sie Lua-Skripte für die Atomizität in Betracht.
- Verfügbarkeit: Der Basic-Tier hat kein Failover; der Standard-Tier bietet regionale Hochverfügbarkeit (HA). Behandeln Sie den Cache als flüchtig (volatile); niemals als autoritativen Speicher.
Beispiel: Einfache Ratenbegrenzung mit Fixed-Window
- Befehle:
- INCR rate:login:USER123:20260903T1000
- EXPIRE rate:login:USER123:20260903T1000 60
- Caching-Strategien:
Cloud Storage
- Objekte und Konsistenz: Starke globale Konsistenz für Lese-, Schreib-, Überschreib-, Lösch- und Auflistungsvorgänge. Objekte sind unveränderlich (immutable); Updates erstellen neue Generationen.
- Signed URLs: Lagern Sie große Uploads/Downloads direkt zwischen Clients und Buckets aus, ohne sie durch Ihre Anwendung zu proxen. Legen Sie kurze Ablaufzeiten fest; beschränken Sie Methode, Pfad und Content-Header.
- Wiederaufnehmbare Uploads (Resumable Uploads): Verwenden Sie diese für Dateien >5 MB und bei unzuverlässigen Netzwerken; behandeln Sie 5xx/429-Fehler mit Truncated Exponential Backoff und Resume-Tokens.
- Lifecycle: Definieren Sie Regeln, um Speicherklassen zu wechseln, alte Versionen zu löschen und die Aufbewahrung (Retention) durchzusetzen. Kombinieren Sie dies mit Objektversionierung für Sicherheit bei Rollouts.
- Benachrichtigungen: Integrieren Sie Pub/Sub-Benachrichtigungen, um nachgelagerte Verarbeitungen bei Objektfinalisierung/-löschung auszulösen, und fügen Sie Vorbedingungen (ifGenerationMatch) hinzu, um sich vor Race Conditions zu schützen.
Beispiel: Lokale Dateien hochladen
- gsutil cp ./data/*.parquet gs://my-bucket/ingest/
Migration, Konsistenz, Partitionierung und Datenschutz
Datenbankmigration
- Wahl zwischen Online- und Offline-Migration: Online mit dem Database Migration Service für minimale Ausfallzeiten; offline zur Vereinfachung, wenn Wartungsfenster akzeptabel sind.
- Schema-First: Abgleich von Typen und Constraints; für Spanner Tools in Betracht ziehen, um MySQL/PostgreSQL-Schemata und -Daten abzubilden, dann Schlüssel und Indizes für die Verteilung optimieren.
- Parallelbetrieb und Umstellung: Während der Online-Migration Dual-Write oder Replikation von Changelogs. Überprüfen Sie Zeilenzahlen, Prüfsummen und das Verhalten kritischer Abfragen vor der endgültigen Umstellung.
Schema-Migrationen und Rollback
- Verwenden Sie versionierte, automatisierte Migrationen (z. B. mit einem Migrationstool) als Teil von CI/CD. Entwerfen Sie additive, abwärtskompatible Änderungen: Spalten und Indizes hinzufügen, Backfill durchführen, Code bereitstellen, der beides liest/schreibt, und dann veraltete Artefakte entfernen.
- Planen Sie Rollbacks mit Datentransformationen: Wenn das Code-Deployment fehlschlägt, seien Sie darauf vorbereitet, neue Schreibvorgänge zu deaktivieren und auf Feature-Flags zurückzugreifen; vermeiden Sie destruktive Migrationen, die ein Rollback blockieren.
Transaktionale vs. eventuell konsistente Workflows
- Verwenden Sie ACID-Transaktionen, wenn Invarianten synchron eingehalten werden müssen (Geldtransfers, Bestandsreduzierungen).
- Bevorzugen Sie eventuelle Konsistenz für leselastige, benutzerorientierte Funktionen, bei denen die Latenz dominiert (Feeds, Suche, Zähler). Implementieren Sie Idempotenzschlüssel, Outbox/Saga-Pattern und Wiederholungsversuche mit Backoff.
- Kombinieren: Verbindlichen Zustand in einem transaktionalen Speicher festschreiben; Ereignisse für eventuell konsistente Projektionen veröffentlichen.
Datenpartitionierung und Verbindungsmanagement
- Partitionieren Sie nach Mandant, Geografie oder Workload-Typ, um Hotspots zu isolieren. Für Bigtable und Spanner Partitionierungsschlüssel in Primärschlüsseln kodieren; für Cloud SQL Schema-pro-Mandant oder Tabellen-Sharding mit Routern verwenden.
- Verbindungen verwalten:
- Cloud SQL: Poolen und wiederverwenden; Parallelität begrenzen; Kaltstarts staffeln.
- Spanner: Sitzungen wiederverwenden; Pools beim Start aufwärmen; Wiederholungsversuche begrenzen.
- Memorystore: TCP-Verbindungen wiederverwenden; Verbindungen pro Anfrage vermeiden.
Datenschutz, Archivierung, Überprüfung der Wiederherstellung und Löschverhalten
- Sicherungen und Archivierung:
- Cloud SQL: Automatisierte Sicherungen + PITR; Wiederherstellungen testen.
- Spanner: Verwaltete Sicherungen; Wiederherstellung in Nicht-Produktivumgebung testen.
- Firestore: Geplante Exporte nach Cloud Storage; Importe überprüfen.
- Bigtable: Sicherungen und Snapshots; Klonen-und-Wiederherstellen testen.
- Cloud Storage: Aufbewahrungsrichtlinien, Objektsperren und einheitlicher Zugriff auf Bucket-Ebene für die Governance; Archivierung in kältere Klassen über Lifecycle-Regeln.
- Überprüfung der Wiederherstellung: Periodisch in isolierten Umgebungen wiederherstellen und Validierungsabfragen sowie App-Smoke-Tests durchführen. RTO/RPO mit den Richtlinien abgleichen.
- Löschverhalten:
- Bigtable GC und Lifecycle sind asynchron – versprechen Sie keine sofortige Löschung.
- Die Versionierung von Cloud Storage bewahrt Generationen auf, bis der Lifecycle sie entfernt.
- Firestore TTL und exportbasierte Löschungen sind asynchron.
- Für SLAs für endgültiges Löschen Prozesse entwerfen, die zum Löschen markieren, in eine Warteschlange stellen und die Entfernung mit Audit-Logs überprüfen.
- Sicherungen und Archivierung:
Praktisches Problemszenario
Aurora Outfitters migriert eine monolithische E-Commerce-Plattform zu Google Cloud. Sie müssen: 1) MySQL per Lift-and-Shift migrieren, um das Risiko zu reduzieren, 2) 500-MB-Uploads von Produktmedien bewältigen, ohne die Anwendung zu überlasten, 3) den Lesedurchsatz für Produktkataloge skalieren und 4) benutzerspezifische Ratenbegrenzungen während Verkaufsspitzen durchsetzen.
Ansatz:
Migration von MySQL zu Cloud SQL mit privater IP und regionaler Hochverfügbarkeit (HA)
- Begründung: Eine private IP eliminiert die öffentliche Erreichbarkeit und IP-Allowlists, was die sichere Konnektivität von GKE und Compute Engine vereinfacht. Regionale HA schützt vor zonalen Ausfällen; rechnen Sie mit kurzen Verbindungsabbrüchen beim Failover, daher wird die Anwendung wiederholbare Transaktionen und eine Logik zur Wiederverbindung implementieren.
Automatisierte Sicherungen und PITR aktivieren und die Wiederherstellung validieren
- Begründung: Automatisierte Sicherungen und Transaktionsprotokolle ermöglichen eine Point-in-Time-Recovery nach Benutzer- oder Anwendungsfehlern. Eine wöchentlich geplante Wiederherstellung in einer Nicht-Produktiv-Instanz stellt sicher, dass die Sicherungen verwendbar sind, und misst den RTO.
Ein Lesereplikat für Kataloglesezugriffe hinzufügen
- Begründung: Die Verlagerung von Katalogabfragen auf ein Lesereplikat reduziert Konflikte auf der primären Instanz. Die Anwendung liest von der primären Instanz, wenn Write-after-Read erforderlich ist (Warenkorb/Kasse), und vom Replikat zum Durchsuchen des Katalogs, wobei die Nachteile der Replikationsverzögerung berücksichtigt werden.
Anwendungsseitiges Connection-Pooling einführen und Parallelität begrenzen
- Begründung: PgBouncer/HikariCP begrenzt und wiederverwendet Verbindungen, um Verbindungsstürme während des Autoscalings und bei HA-Failovers zu vermeiden. Die Größe der Pools richtet sich nach den CPU-Kernen, nicht nach der maximalen Anzahl von Pods, um eine Überlastung zu verhindern.
Medien-Uploads mit signierten URLs und wiederaufnehmbaren Uploads nach Cloud Storage auslagern
- Begründung: Die Anwendung stellt kurzlebige signierte URLs aus, damit Clients direkt hochladen können. Wiederaufnehmbare Uploads kommen mit unzuverlässigen Netzwerken zurecht; der Mediendienst lauscht auf Pub/Sub-Finalisierungsbenachrichtigungen, um die Verarbeitung auszulösen. Precondition-Header (ifGenerationMatch) schützen vor Race-Conditions beim Überschreiben.
Memorystore for Redis für Seiten-Caching, Sitzungen und Ratenbegrenzung implementieren
- Begründung: Read-Through-Caches reduzieren die Datenbanklast für Produktseiten mit TTLs, die auf die Aktualisierungshäufigkeit abgestimmt sind. Sitzungsdaten werden flüchtig in Redis mit kurzen TTLs gehalten; der Anwendungszustand verbleibt in Cloud SQL. Eine Fixed-Window-Token-Strategie verwendet INCR/EXPIRE für benutzerspezifische Anfragenbegrenzungen. Der Cache wird als nicht autoritativ behandelt; die Anwendung toleriert Cache-Verluste und füllt ihn bei Misses wieder auf.
Einen schrittweisen Pfad zu Cloud Bigtable für Katalogfunktionen mit hohem Lesedurchsatz vorbereiten
- Begründung: Mit wachsendem Traffic werden denormalisierte, leseoptimierte Katalogansichten nach Bigtable verlagert. Zeilenschlüssel werden als bucket#category#reverse_ts entworfen, um Schreibvorgänge zu verteilen und zeitlich geordnete Listen ohne Hotspotting zu unterstützen.
Verfahren für Schema-Migration und Rollback etablieren
- Begründung: Migrationen sind additiv: Spalten/Indizes hinzufügen, mit idempotenten Jobs auffüllen, Code bereitstellen, der beides liest/schreibt, und alte Felder später entfernen. Feature-Flags sichern neue Pfade ab; ein Rollback deaktiviert Schreibvorgänge in neue Felder ohne destruktives DDL.
Datenlebenszyklus- und Schutzrichtlinien festlegen
- Begründung: Cloud Storage-Buckets verwenden Lifecycle-Regeln, um Thumbnails in kälteren Speicher zu verschieben und veraltete temporäre Uploads zu löschen. Cloud SQL-Sicherungen und Spanner/Bigtable-Sicherungen (sofern eingeführt) werden regelmäßig zur Überprüfung wiederhergestellt. Audit-Logs erfassen Lösch-Workflows; die asynchrone Natur der Bigtable GC wird in den Compliance-Dokumenten anerkannt.
Client- und serverseitige Wiederholungsversuche mit verkürztem exponentiellem Backoff implementieren
- Begründung: Cloud Storage kann bei Lastspitzen 429/5xx zurückgeben; Backoff glättet die Last und reduziert die Fehlerraten. Datenbank- und Cache-Operationen verwenden Idempotenzschlüssel, um sichere Wiederholungsversuche zu gewährleisten, insbesondere bei Failover und Netzwerkstörungen.
Dieser Plan sorgt für eine sofortige Risikominderung durch Cloud SQL mit privater Konnektivität und HA, hält die Anwendung durch Caching und Uploads mit signierten URLs reaktionsschnell und kosteneffizient und schafft einen klaren Pfad zur Skalierung des Lesedurchsatzes und der Datenresilienz bei wachsendem Traffic.
← API-Design · Alle Domänen · Identität →
Diese Fragen üben → · Zeitlich begrenzte Übung auf ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Bestehe deine Prüfung →