Elastisches Skalieren eines Azure Cosmos DB for Apache Cassandra-Kontos

GILT FÜR: Cassandra

Es gibt verschiedene Möglichkeiten, den elastischen Charakter von Azure Cosmos DB for Apache Cassandra zu erkunden. Um herauszufinden, wie eine effektive Skalierung in Azure Cosmos DB funktioniert, müssen Sie wissen, wie Sie die richtige Menge an Anforderungseinheiten (Request Units, RUs) bereitstellen, um die Leistungsanforderungen in Ihrem System zu erfüllen. Weitere Informationen zu Anforderungseinheiten finden Sie im Artikel Anforderungseinheiten.

Für die API für Cassandra können Sie die Gebühren für Anforderungseinheiten für einzelne Abfragen mit dem .NET SDK und Java SDK abrufen. Dies ist hilfreich, wenn Sie die Anzahl der Anforderungseinheiten ermitteln möchten, die Sie im Dienst bereitstellen müssen.

Von Datenbankvorgängen genutzte Anforderungseinheiten

Verarbeiten der Ratenbegrenzung (Fehler 429)

Azure Cosmos DB gibt Fehler zur Ratenbegrenzung (429) zurück, wenn Clients mehr Ressourcen (Anforderungseinheiten) verbrauchen als die von Ihnen bereitgestellte Menge. Diese Ausnahmen werden von der API für Cassandra in Azure Cosmos DB in Überladungsfehler im nativen Cassandra-Protokoll übersetzt.

Wenn die Latenz in Ihrem System keine Rolle spielt, kann es ausreichen, die Begrenzung der Durchsatzrate mithilfe von Wiederholungsversuchen zu verarbeiten. In den Java-Codebeispielen für Version 3 und Version 4 der Java-Treiber von Apache Cassandra finden Sie Informationen zur transparenten Handhabung der Ratenbegrenzung. In diesen Beispielen wird eine benutzerdefinierte Version der standardmäßigen Cassandra-Wiederholungsrichtlinie in Java implementiert. Sie können auch die Spark-Erweiterung verwenden, um die Ratenbegrenzung zu verarbeiten. Wenn Sie Spark verwenden, stellen Sie sicher, dass Sie unsere Anleitung zum Optimieren der Durchsatzkonfiguration für den Spark-Connector befolgen.

Verwalten der Skalierung

Wenn Sie die Latenz minimieren müssen, gibt es in der API für Cassandra eine ganze Reihe von Optionen zum Verwalten der Skalierung und Bereitstellen des Durchsatzes (RUs):

In den folgenden Abschnitten werden die Vor- und Nachteile der einzelnen Ansätze beschrieben. So können Sie die beste Strategie auswählen, um die Skalierungsanforderungen Ihres Systems, die Gesamtkosten und die Effizienzanforderungen Ihrer Lösung gegeneinander abzuwägen.

Verwenden des Azure-Portals

Sie können die Ressourcen im Azure Cosmos DB for Apache Cassandra-Konto im Azure-Portal skalieren. Weitere Informationen finden Sie unter Bereitstellen des Durchsatzes für Container und Datenbanken. In diesem Artikel werden die relativen Vorteile erläutert, von denen Sie profitieren, wenn Sie den Durchsatz im Azure-Portal auf der Ebene Datenbank oder auf der Ebene Container festlegen. Die in diesen Artikeln verwendeten Begriffe „Datenbank“ und „Container“ entsprechen den Begriffen „Keyspace“ und „Tabelle“ für die API für Cassandra.

Der Vorteil dieser Methode besteht darin, dass sie eine unkomplizierte, „schlüsselfertige“ Möglichkeit zur Verwaltung der Durchsatzkapazität in der Datenbank darstellt. Sie birgt allerdings den Nachteil, dass in vielen Fällen bestimmte Automatisierungsebenen sowohl kostengünstig als auch hochleistungsfähig sein müssen, damit Ihr Skalierungsansatz funktioniert. In den nächsten Abschnitten werden die relevanten Szenarien und Methoden erläutert.

Verwenden der Steuerungsebene

Die Azure Cosmos DB-API für Cassandra bietet die Möglichkeit, den Durchsatz mithilfe unserer verschiedenen Features auf Steuerungsebene programmgesteuert anzupassen. Anleitungen und Beispiele finden Sie in den entsprechenden Artikeln zu Azure Resource Manager, PowerShell und der Azure CLI.

Diese Methode bietet den Vorteil, dass Sie das Hoch- oder Herunterskalieren von Ressourcen timerbasiert automatisieren können, um sowohl Lastspitzen als auch Zeiträume mit niedriger Aktivität zu berücksichtigen. Sehen Sie sich das Beispiel hier an, um zu erfahren, wie Sie dies mit Azure Functions und PowerShell erreichen.

Ein Nachteil dieses Ansatzes ist, dass Sie nicht in Echtzeit auf unvorhersehbare Änderungen bei den Skalierungsanforderungen reagieren können. Stattdessen müssen Sie möglicherweise den Anwendungskontext in Ihrem System auf Client-/SDK-Ebene in Betracht ziehen oder die Autoskalierung nutzen.

Verwenden von CQL-Abfragen mit einem bestimmten SDK

Sie können das System dynamisch per Code skalieren, indem Sie CQL ALTER-Befehle für die betreffende Datenbank oder den betreffenden Container ausführen.

Dieser Ansatz bietet den Vorteil, dass Sie dynamisch und auf eine Weise, die sich für die jeweilige Anwendung optimal eignet, auf Skalierungsanforderungen reagieren können. Bei diesem Ansatz können Sie weiterhin von den Standardgebühren und -preisen für Anforderungseinheiten profitieren. Wenn die Skalierungsanforderungen Ihres Systems größtenteils vorhersehbar sind (etwa 70 % oder mehr), ist das SDK mit CQL möglicherweise eine kostengünstigere Methode als die Autoskalierung. Der Nachteil hierbei ist, dass die Implementierung von Wiederholungsversuchen sehr komplex sein und die Ratenbegrenzung zu höheren Latenzen führen kann.

Verwenden von per Autoskalierung bereitgestelltem Durchsatz

Zusätzlich zur manuellen (Standard) oder programmgesteuerten Bereitstellung des Durchsatzes können Sie Azure Cosmos DB-Container auch mit per Autoskalierung bereitgestelltem Durchsatz konfigurieren. Die Autoskalierung führt eine automatische und sofortige Skalierung auf die Nutzungsanforderungen innerhalb der angegebenen RU-Bereiche durch, ohne dass dabei SLAs gefährdet werden. Weitere Informationen finden Sie im Artikel Erstellen von Azure Cosmos DB-Containern und -Datenbanken im Autoskalierungsmodus.

Der Vorteil dieses Ansatzes: Er ist die einfachste Methode zum Verwalten der Skalierungsanforderungen in Ihrem System. Er wendet innerhalb der konfigurierten RU-Bereiche keine Ratenbegrenzung an. Der Nachteil: Wenn die Skalierungsanforderungen in Ihrem System vorhersagbar sind, ist die Autoskalierung möglicherweise weniger kosteneffektiv als die Verwendung der oben beschriebenen Methoden mit der Steuerungsebene oder der Verwendung des SDK.

Wenn Sie mithilfe von CQL den maximalen Durchsatz (RUs) für die automatische Skalierung festlegen oder ändern möchten, verwenden Sie Folgendes, und ersetzen Sie dabei Keyspace/Tabellenname entsprechend:

# to set max throughput (RUs) for autoscale at keyspace level:
create keyspace <keyspace name> WITH cosmosdb_autoscale_max_throughput=5000;

# to alter max throughput (RUs) for autoscale at keyspace level:
alter keyspace <keyspace name> WITH cosmosdb_autoscale_max_throughput=4000;

# to set max throughput (RUs) for autoscale at table level:
create table <keyspace name>.<table name> (pk int PRIMARY KEY, ck int) WITH cosmosdb_autoscale_max_throughput=5000;

# to alter max throughput (RUs) for autoscale at table level:
alter table <keyspace name>.<table name> WITH cosmosdb_autoscale_max_throughput=4000;

Nächste Schritte