Delen via


Een Azure Cosmos DB voor Apache Cassandra-account elastisch schalen

VAN TOEPASSING OP: Cassandra

Er zijn verschillende opties om de elastische aard van de Azure Cosmos DB voor Apache Cassandra te verkennen. Als u wilt weten hoe u effectief kunt schalen in Azure Cosmos DB, is het belangrijk om te begrijpen hoe u de juiste hoeveelheid aanvraageenheden (RU/s) inricht om rekening te houden met de prestatievereisten in uw systeem. Zie het artikel aanvraageenheden voor meer informatie over aanvraageenheden .

Voor de API voor Cassandra kunt u de kosten voor de aanvraageenheid voor afzonderlijke query's ophalen met behulp van de .NET- en Java SDK's. Dit is handig bij het bepalen van de hoeveelheid RU/s die u in de service moet inrichten.

Databasebewerkingen verbruiken aanvraageenheden

Snelheidsbeperking verwerken (429-fouten)

Azure Cosmos DB retourneert frequentiebeperkingen (429) als clients meer resources (RU/s) verbruiken dan het bedrag dat u hebt ingericht. De API voor Cassandra in Azure Cosmos DB vertaalt deze uitzonderingen op overbelaste fouten in het systeemeigen Cassandra-protocol.

Als uw systeem niet gevoelig is voor latentie, is het mogelijk voldoende om de doorvoersnelheid te beperken met behulp van nieuwe pogingen. Zie Java-codevoorbeelden voor versie 3 en versie 4 van de Apache Cassandra Java-stuurprogramma's voor het afhandelen van snelheidsbeperking op transparante wijze. Deze voorbeelden implementeren een aangepaste versie van het standaardbeleid voor Opnieuw proberen van Cassandra in Java. U kunt de Spark-extensie ook gebruiken om snelheidsbeperking te verwerken. Wanneer u Spark gebruikt, moet u onze richtlijnen volgen voor het optimaliseren van de doorvoerconfiguratie van de Spark-connector.

Schalen beheren

Als u latentie wilt minimaliseren, is er een scala aan opties voor het beheren van schaal- en inrichtingsdoorvoer (RU's) in de API voor Cassandra:

In de volgende secties worden de voor- en nadelen van elke benadering uitgelegd. Vervolgens kunt u beslissen over de beste strategie om de schaalbehoeften van uw systeem, de totale kosten en efficiƫntiebehoeften voor uw oplossing te verdelen.

De Azure-portal gebruiken

U kunt de resources in Azure Cosmos DB voor Een Apache Cassandra-account schalen met behulp van Azure Portal. Zie het artikel over doorvoer inrichten voor containers en databases voor meer informatie. In dit artikel worden de relatieve voordelen uitgelegd van het instellen van doorvoer op database - of containerniveau in Azure Portal. De termen 'database' en 'container' die in deze artikelen worden genoemd, worden toegewezen aan respectievelijk 'keyspace' en 'table' voor de API voor Cassandra.

Het voordeel van deze methode is dat het een eenvoudige kant-en-klare manier is om de doorvoercapaciteit op de database te beheren. Het nadeel is echter dat in veel gevallen het schalen van bepaalde niveaus van automatisering zowel rendabel als hoog presterend kan zijn. In de volgende secties worden de relevante scenario's en methoden uitgelegd.

Het besturingsvlak gebruiken

De API van Azure Cosmos DB voor Cassandra biedt de mogelijkheid om doorvoer programmatisch aan te passen met behulp van onze verschillende besturingsvlakfuncties. Zie de Artikelen over Azure Resource Manager, PowerShell en Azure CLI voor richtlijnen en voorbeelden.

Het voordeel van deze methode is dat u het omhoog of omlaag schalen van resources kunt automatiseren op basis van een timer om rekening te houden met piekactiviteit of perioden met een lage activiteit. Bekijk ons voorbeeld hier voor meer informatie over hoe u dit kunt doen met behulp van Azure Functions en PowerShell.

Een nadeel van deze aanpak kan zijn dat u niet in realtime kunt reageren op onvoorspelbare veranderende schaalbehoeften. In plaats daarvan moet u mogelijk gebruikmaken van de toepassingscontext in uw systeem, op client-/SDK-niveau of met behulp van automatische schaalaanpassing.

CQL-query's gebruiken met een specifieke SDK

U kunt het systeem dynamisch schalen met code door de CQL ALTER-opdrachten voor de opgegeven database of container uit te voeren.

Het voordeel van deze aanpak is dat u kunt reageren op schaalbehoeften dynamisch en op een aangepaste manier die past bij uw toepassing. Met deze benadering kunt u nog steeds gebruikmaken van de standaard RU/s-kosten en -tarieven. Als de schaalbehoeften van uw systeem meestal voorspelbaar zijn (ongeveer 70% of meer), is het gebruik van SDK met CQL mogelijk een rendabelere methode voor automatisch schalen dan het gebruik van automatische schaalaanpassing. Het nadeel van deze benadering is dat het vrij complex kan zijn om nieuwe pogingen te implementeren terwijl snelheidsbeperking de latentie kan verhogen.

Ingerichte doorvoer automatisch schalen

Naast de standaard (handmatige) of programmatische manier van inrichten van doorvoer, kunt u ook Azure Cosmos DB-containers configureren in ingerichte doorvoer met automatische schaalaanpassing. Automatisch schalen wordt automatisch en onmiddellijk geschaald naar uw verbruiksbehoeften binnen opgegeven RU-bereiken zonder sla's in gevaar te brengen. Zie het artikel Azure Cosmos DB-containers en -databases maken in het artikel over automatisch schalen voor meer informatie.

Het voordeel van deze aanpak is dat het de eenvoudigste manier is om de schaalbehoeften in uw systeem te beheren. Er wordt geen frequentiebeperking toegepast binnen de geconfigureerde RU-bereiken. Het nadeel is dat als de schaalbehoeften in uw systeem voorspelbaar zijn, automatisch schalen een goedkopere manier is om uw schaalbehoeften af te handelen dan het gebruik van de op maat gemaakte besturingsvlak- of SDK-niveaubenaderingen die hierboven worden genoemd.

Als u de maximale doorvoer (RU's) wilt instellen of wijzigen voor automatische schaalaanpassing met behulp van CQL, gebruikt u het volgende (waarbij de naam van de keyspace/tabel dienovereenkomstig wordt vervangen):

# 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;

Volgende stappen