Wie man die Verfügbarkeit von Azure Cosmos DB maximiert

Die meisten E-Commerce-Anwendungen haben eine Nulltoleranz gegenüber Ausfallzeiten. Jede Auswirkung auf die Anwendungsressourcen kann die Gesamtverfügbarkeit der Website beeinträchtigen. Die Azure Cosmos-Datenbank ist eine der wichtigsten NoSQL-Datenbanken, die in der Branche verwendet wird. Obwohl die Azure Cosmos selbst eine minimale Verfügbarkeit von 99,99 % für eine einzelne Region ohne Verfügbarkeitszone bietet, wie können wir die Datenbankverfügbarkeit mit den in Azure Cosmos verfügbaren Optionen weiter verbessern?

Multi-Region Lesen und Schreiben

Lesen in einer einzelnen Region wird die Verfügbarkeit beeinträchtigen und zu einem einzelnen Ausfallpunkt führen. Daher sollten leseintensive Anwendungen mindestens Multi-Region-Lesen aktiviert haben, obwohl Multi-Region-Schreiben für eine Anwendung keine Option ist. Aber Multi-Region-Schreiben bietet eine höhere Verfügbarkeit sowohl für lese- als auch für schreibeintensive Anwendungen.

Mit der Multi-Region-Schreibfähigkeit können Sie eine Multi-Master-Replikation aktivieren, bei der alle konfigurierten Regionen als Schreibendpunkte dienen können.

Best Practices

  • Wählen Sie Regionen, die näher an der Region liegen, in der die Anwendung bereitgestellt wird.
  • Konfigurieren Sie mehrere bevorzugte Regionen basierend auf den Anforderungen der Anwendung, um die Verfügbarkeit zu erhöhen.
  • Setzen Sie mehr als eine bevorzugte Region in der Anwendung für Lese- und Schreibvorgänge, um die Verfügbarkeit zu verbessern und die Latenz zu reduzieren.
  • Setzen Sie die bevorzugten Regionen in der Reihenfolge der aktuellen oder nächstgelegenen Regionen der Anwendung zuerst in die Liste.

Anwendung in West US 2 bereitgestellt

Java

 

//Konfigurieren Sie die in West US 2 bereitgestellte Anwendung wie folgt

import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList("West US 2", "East US"));

CosmosClient client = clientBuilder.buildClient();

// 

Anwendung in East US

Java

 

//Konfigurieren Sie die Anwendung, die in Ost-USA bereitgestellt wird, wie folgt
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList( "East US","West US 2"));

CosmosClient client = clientBuilder.buildClient();

// 

Schlussfolgerung

Obwohl das Aktivieren von Multi-Region-Lese- und Schreibvorgängen eine höhere Verfügbarkeit bieten kann, hilft es der Anwendung, die Lese- und Schreibvorgänge näher an der Region zu konfigurieren, in der sie bereitgestellt wird, und mehr als eine bevorzugte Region anzugeben, um sofort auf die verfügbare Region zurückzufallen, ohne manuelle Eingriffe.

Konsistenzstufen

Wählen Sie Konsistenzstufen basierend auf den Anforderungen der Anwendung aus. Höhere Anforderungen an die Konsistenz führen in der Regel zu einer geringeren Verfügbarkeit. Wenn die Anwendung eine starke Datenkonsistenz erfordert, stellen Sie sicher, dass sie potenziell höhere Latenzen tolerieren kann. Wenn eine schwächere Konsistenz akzeptabel ist, kann die Anwendung von einer verbesserten Durchsatzrate und Verfügbarkeit profitieren.

Schlussfolgerung

Die richtige Wahl der Konsistenzstufe hängt rein von den Anforderungen der Anwendung ab, und obwohl dies Auswirkungen auf die Verfügbarkeit einer stärkeren Konsistenz haben kann, wird die Gesamtverfügbarkeit einer Anwendung nicht beeinträchtigt, wenn die stärkeren Konsistenzstufen gewählt werden.

Ausfallsicherung

Manuelle Ausfallsicherung

Entwickler oder Mitarbeiter können sich über das Portal anmelden und manuell auf die nächste verfügbare Region umschalten, wenn in der Region, mit der die Anwendung derzeit verbunden ist, ein Ausfall auftritt. Obwohl diese Option in gewissem Maße Verfügbarkeit bietet, erfordert sie einen manuellen Eingriff, um eine Ausfallsicherung durchzuführen, was sich auf die Gesamtverfügbarkeitsmetriken der Website auswirken kann.

Vom Dienst verwaltete Ausfallsicherung

Durch die Aktivierung des servicegesteuerten Failovers kann Cosmos automatisch auf die nächste verfügbare Region umschalten, basierend auf der in der Konsole konfigurierten Priorität. Diese Option beseitigt die Notwendigkeit für Änderungen an der Anwendung während des Failover-Prozesses.

Fazit

Obwohl beide die Verfügbarkeit erhöhen, bietet der servicegesteuerte Failover-Durchsatz die Flexibilität, auf die nächste verfügbare Region umzuschalten, ohne sich um die Anwendungsbereitstellung kümmern zu müssen.

Partitionsschlüssel und Indizes

  • Die Definition eines Partitionsschlüssels in Azure Cosmos DB ist entscheidend, bevor eine Anwendung darauf ausgeführt wird. Cosmos DB ist sehr effizient für leseintensive Anwendungen, daher ist es wichtig, die Suchkriterien zu berücksichtigen und die Abfragen zur Lesung von Datensätzen aus der Datenbank zu definieren, bevor Cosmos DB in die Anwendung integriert wird.
  • Standardmäßig wird jedes Element in einem Cosmos DB-Container automatisch indexiert. Das Ausschließen bestimmter Elemente oder Felder aus der Indizierung kann jedoch dazu beitragen, den Verbrauch von Request Units (RUs) zu reduzieren. Es ist genauso wichtig, Felder für die Indizierung hinzuzufügen wie Indizes auf Feldern zu entfernen, die nicht indiziert werden müssen.
  • Vermeiden Sie das Speichern übermäßig großer Elemente in Azure Cosmos DB.  
  • Minimieren Sie die Abfragen zwischen Partitionen, wann immer möglich.  
  • Stellen Sie sicher, dass Abfragen Filter enthalten, um die Effizienz zu verbessern.  
  • Vermeiden Sie es, wiederholt denselben Partitionsschlüssel abzufragen; implementieren Sie stattdessen eine Zwischenspeicherungsschicht für solche Anwendungsfälle.

Durchsatz-Autoscale

Azure Cosmos DB unterstützt sowohl standardmäßigen (manuellen) als auch automatischen Durchsatz auf Container-Ebene.

Manueller Durchsatz

Die Anwendung entscheidet über die erlaubten RU/s, und das Überschreiten der maximalen RU/s-Anfragen führt zur Drosselung für die konfigurierte Zeit. Es ist manueller Eingriff erforderlich, um die Durchsatzrate zu erhöhen.

Automatische Skalierung der Durchsatzrate

Die Anwendung kann die maximale Durchsatzrate konfigurieren, und Cosmos skaliert sich automatisch basierend auf dem empfangenen Datenverkehr. Wenn die automatische Skalierungsgrenze überschritten wird, werden Anfragen für die konfigurierte Zeit gedrosselt.

Fazit

Obwohl beide eine erhöhte Verfügbarkeit bieten, bietet die automatische Skalierung der Durchsatzrate die Flexibilität, mit variierendem Datenverkehr umzugehen, ohne Drosselung oder Beeinträchtigung der Verfügbarkeit.

Backup und Wiederherstellung

Azure Cosmos DB ermöglicht standardmäßig periodische Backups für alle Konten.

Periodisches Backup

Backups werden periodisch für jede konfigurierte Minute mit einem Mindestwert von 1 Stunde und einem Maximum von 24 Stunden durchgeführt. Es bietet auch Optionen, um die Redundanz des Backup-Speichers auf Geo-, Zone- oder lokaler Ebene aufrechtzuerhalten. Das Anwendungsteam muss sich an den Support wenden, um das Backup abzurufen.

Fortlaufendes Backup

Die Option für fortlaufendes Backup hält den Backup-Speicher in der konfigurierten Cosmos-Datenbank der Region aufrecht und ermöglicht die Aufbewahrung von Daten aus den letzten 7 Tagen oder aus den letzten 30 Tagen. Es bietet auch eine Wiederherstellung zu einem bestimmten Zeitpunkt.

Fazit

Die Wahl des fortlaufenden Backups gewährleistet eine schnellere Wiederherstellung der Datenbank. Dies beseitigt die Notwendigkeit von Hin und Her mit dem Support, um die Datenbank wiederherzustellen, und ermöglicht Anwendungen, sie zu einem bestimmten Zeitpunkt in jedem verfügbaren Bereich (wo Backups vorhanden sind) wiederherzustellen.

Abschließend sind Verfügbarkeitsmetriken für jede Anwendung entscheidend, jedoch nicht kostenfrei. Optionen, die eine höhere Verfügbarkeit als die Standardkonfiguration bieten, verursachen zusätzliche Kosten. Zudem sind die oben genannten Optionen möglicherweise nicht für alle Cosmos-Anwendungen notwendig oder geeignet. Es ist jedoch wichtig, bewährte Praktiken in Azure Cosmos zu übernehmen und umzusetzen, um die Verfügbarkeit effektiv zu optimieren.

Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability