Freigeben über


Automatische Skalierung des Durchsatzes in Cosmos DB in Microsoft Fabric

Cosmos DB in Microsoft Fabric unterstützt den automatisch skalierbaren bereitgestellten Durchsatz. Der durch automatische Skalierung bereitgestellte Durchsatz eignet sich gut für unternehmenskritische Workloads mit variablen oder unvorhersehbaren Verkehrsmustern. Die Automatische Skalierung in Cosmos DB in Microsoft Fabric skaliert Workloads basierend auf der aktivsten Partition. Bei nicht uniformen Workloads mit unterschiedlichen Arbeitsauslastungsmustern kann diese Skalierung zu unnötigen Skalierungen führen. Dynamische Autoskalierung ist eine Erweiterung der automatischen Skalierung, die über alle hinweg bereitgestellt wird und die die Skalierung solcher nicht-uniformer Workloads unabhängig auf Partitionsebene basierend auf der Nutzung unterstützt. Mit der dynamischen Skalierung können Sie Kosten sparen, wenn häufig heiße Partitionen auftreten.

Vorteile

Cosmos DB-Container in Microsoft Fabric, die mit automatisch skaliert bereitgestelltem Durchsatz konfiguriert sind, haben die folgenden Vorteile:

  • Einfach: Autoscale entfernt die Komplexität der Verwaltung des Durchsatzes oder der manuellen Skalierung der Kapazität.

  • Skalierbar: Container skalieren den bereitgestellten Durchsatz automatisch nach Bedarf. Es gibt keine Unterbrechung der Clientanwendungen.

  • Augenblicklich: Container werden bei Bedarf sofort nach oben skaliert. Es gibt keine Aufwärmphase, wenn für plötzliche Erhöhungen ein zusätzlicher Durchsatz erforderlich ist.

  • Kosteneffizient: Mit Autoskalierung können Sie den Durchsatz und die Kosten optimieren, indem Sie den Durchsatz situationsabhängig herunterskalieren. Sie zahlen nur für die Ressourcen, die von Ihren Workloads pro Stunde benötigt werden.

  • Hoch verfügbar: Container, die autoscale verwenden, verwenden dasselbe fehlertolerante, hoch verfügbare Azure Cosmos DB-Back-End, um die Datenbeständigkeit und hohe Verfügbarkeit sicherzustellen.

Anwendungsfälle

Autoscale in Cosmos DB kann für verschiedene Workloads von Vorteil sein, insbesondere variable oder unvorhersehbare Workloads. Wenn Ihre Workloads variable oder unvorhersehbare Spitzen in der Nutzung haben, hilft die automatische Skalierung, indem sie basierend auf der Verwendung automatisch nach oben und unten skaliert wird. Beispiele sind:

  • Power BI-Berichte oder Notizbücher, die von Benutzern mit unvorhersehbaren Verwendungsmustern ausgeführt werden.
  • Entwicklungs- und Testarbeitslasten, die hauptsächlich während der Arbeitszeit verwendet werden.
  • Geplante Spark-Aufträge mit Vorgängen oder Abfragen, die während der Leerlaufzeiten ausgeführt werden sollen.
  • Branchenanwendungen, die eine Spitzennutzung einige Male im Monat oder Jahr erleben, und mehr.

Das Entwickeln einer benutzerdefinierten Lösung für diese Probleme erfordert nicht nur sehr viel Zeit, sondern macht auch die Konfiguration oder den Code Ihrer Anwendung kompliziert. Mit der Autoskalierung werden die oben beschriebenen Szenarien vorkonfiguriert bereitgestellt, und die Notwendigkeit einer benutzerdefinierten oder manuellen Skalierung der Kapazität entfällt.

Konfigurieren des Autoscale-Durchsatzes in Cosmos DB in Microsoft Fabric

Container, die in Cosmos DB in Fabric erstellt werden, werden automatisch mit 5000 RU/s Autoscale-Durchsatz bereitgestellt, wenn sie im Fabric-Portal erstellt werden. Der Autoskalendurchsatz kann mit dem Cosmos DB SDK gelesen und aktualisiert werden. Der minimale Autoskalendurchsatz kann auf 1000 RU/s mit maximal 50000 RU/s festgelegt werden. Dieses Maximum kann über das Supportticket erhöht werden.

Konfigurieren der automatischen Skalierung mithilfe des Azure SDK

Verwenden Sie das Cosmos DB SDK, um den Lese- und Aktualisierungs-Autoskala-Durchsatz für einen Container in Cosmos DB in Microsoft Fabric einzustellen.

Ein vollständiges Beispiel zum Festlegen des Cosmos DB-Durchsatzes in einem Fabric-Notizbuch finden Sie unter Management Operations for Cosmos DB in Fabric

database = client.get_database_client("<database-name>")
container = database.get_container_client("<container-name>")

# Get the current throughput on the container and increase it by 1000 RU/s
throughput_properties = await container.get_throughput()
autoscale_throughput = throughput_properties.auto_scale_max_throughput

print(print(f"Autoscale throughput: {autoscale_throughput}"))

new_throughput = autoscale_throughput + 1000

await container.replace_throughput(ThroughputProperties(auto_scale_max_throughput=new_throughput))

# Verify the updated throughput
updated_throughput_properties = await container.get_throughput()
print(f"Verified updated autoscale throughput: {updated_throughput_properties.auto_scale_max_throughput}")
const database = client.database('<database-name>');
const container = database.container('<container-name>');

// Get the current throughput on the container and increase it by 1000 RU/s
const { resource: throughputProperties } = await container.offer.read();
const autoscaleThroughput = throughputProperties?.autoscaleSettings?.maxThroughput;

console.log(`Autoscale throughput: ${autoscaleThroughput}`);

const newThroughput = autoscaleThroughput + 1000;

await container.offer.replace({
    offerThroughput: undefined,
    autoscaleSettings: {
        maxThroughput: newThroughput
    }
});

// Verify the updated throughput
const { resource: updatedThroughputProperties } = await container.offer.read();
console.log(`Verified updated autoscale throughput: ${updatedThroughputProperties?.autoscaleSettings?.maxThroughput}`);
Container container = client
    .GetDatabase("<database-name>")
    .GetContainer("<container-name>");

// Get the current throughput on the container and increase it by 1000 RU/s
ThroughputResponse throughputResponse = await container.ReadThroughputAsync();
int? autoscaleThroughput = throughputResponse.Resource.AutoscaleMaxThroughput;

Console.WriteLine($"Autoscale throughput: {autoscaleThroughput}");

int newThroughput = autoscaleThroughput.Value + 1000;

await container.ReplaceThroughputAsync(ThroughputProperties.CreateAutoscaleThroughput(newThroughput));

// Verify the updated throughput
ThroughputResponse updatedThroughputResponse = await container.ReadThroughputAsync();
Console.WriteLine($"Verified updated autoscale throughput: {updatedThroughputResponse.Resource.AutoscaleMaxThroughput}");