Udostępnij przez


Automatyczne skalowanie wydajności w usłudze Cosmos DB w ramach Microsoft Fabric

Usługa Cosmos DB w Microsoft Fabric obsługuje autoskalowaną aprowizowaną przepustowość. Autoskalowanie aprowizowanej przepustowości jest odpowiednie dla obciążeń o krytycznym znaczeniu, które mają zmienne lub nieprzewidywalne szablony ruchu. Skalowanie automatyczne w usłudze Cosmos DB w usłudze Microsoft Fabric skaluje obciążenia na podstawie najbardziej aktywnej partycji. W przypadku obciążeń, które charakteryzują się różnymi wzorcami pracy, skalowanie może spowodować niepotrzebne zwiększenie zasobów. Dynamiczne autoskalowanie to ulepszenie wprowadzane w całym systemie, które umożliwia niezależne skalowanie takich niejednorodnych obciążeń na podstawie użycia na poziomie partycji. Dynamiczne skalowanie pozwala oszczędzać koszty, gdy często napotykasz problem gorących partycji.

Korzyści

Kontenery usługi Cosmos DB w usłudze Microsoft Fabric skonfigurowane z aprowizowaną przepływnością automatycznego skalowania mają następujące korzyści:

  • Prosty: Skalowanie automatyczne eliminuje złożoność zarządzania przepływnością lub ręcznego skalowania pojemności.

  • Skalowalne: Kontenery automatycznie skaluje aprowizowaną przepustowość w razie potrzeby. Nie ma żadnych zakłóceń w aplikacjach klienckich.

  • Momentalny: Kontenery są skalowane w górę natychmiast w razie potrzeby. Nie ma okresu rozgrzewki, gdy wymagana jest dodatkowa przepływność w przypadku nagłych wzrostów.

  • Optymalne kosztowo: autoskalowanie pomaga zoptymalizować użycie jednostek RU/s i kosztów przez skalowanie w dół, gdy zasoby nie są używane. Płacisz tylko za zasoby, których potrzebują obciążenia w rozliczeniu godzinowym.

  • Wysoka dostępność: Kontenery korzystające z automatycznego skalowania używają tego samego zaplecza odpornego na uszkodzenia, wysokiej dostępności usługi Azure Cosmos DB, aby zapewnić trwałość danych i wysoką dostępność.

Przypadki użycia

Skalowanie automatyczne w usłudze Cosmos DB może być korzystne dla różnych obciążeń, zwłaszcza zmiennych lub nieprzewidywalnych obciążeń. Gdy obciążenia charakteryzują się zmiennymi lub nieprzewidywalnymi wzrostami użycia, automatyczne skalowanie pomaga przez automatyczne zwiększanie lub zmniejszanie zasobów na podstawie użycia. Oto kilka przykładów:

  • Raporty lub notesy usługi Power BI wykonywane przez użytkowników z nieprzewidywalnymi wzorcami użycia.
  • Obciążenia programistyczne i testowe używane głównie w godzinach pracy.
  • Zaplanowane zadania platformy Spark z operacjami lub zapytaniami, które mają być uruchamiane w okresach bezczynności.
  • Aplikacje biznesowe, które widzą szczytowe użycie kilka razy w miesiącu lub roku, i nie tylko.

Tworzenie niestandardowego rozwiązania tych problemów nie tylko wymaga ogromnego czasu, ale także wprowadza złożoność konfiguracji lub kodu aplikacji. Autoskalowanie umożliwia korzystanie z powyższych scenariuszy i eliminuje potrzebę niestandardowego lub ręcznego skalowania pojemności.

Konfigurowanie autoskalowanej wydajności w Cosmos DB w Microsoft Fabric

Kontenery utworzone w usłudze Cosmos DB w Fabric są automatycznie przydzielane z autoskalowaną przepustowością 5000 RU/s w momencie tworzenia w portalu Fabric. Przepływność autoskalowania można odczytywać i aktualizować przy użyciu zestawu SDK usługi Cosmos DB. Minimalna wydajność autoskalowalna może być ustawiona na 1000 RU/s, a maksymalna na 50000 RU/s. Tę maksymalną wartość można zwiększyć za pośrednictwem zgłoszenia do pomocy technicznej.

Konfigurowanie automatycznego skalowania przy użyciu zestawu Azure SDK

Użyj zestawu SDK usługi Cosmos DB, aby ustawić odczyt i zaktualizować przepływność automatycznego skalowania w kontenerze w usłudze Cosmos DB w usłudze Microsoft Fabric.

Pełny przykład ustawiania przepływności usługi Cosmos DB w notesie Fabric można znaleźć w temacie Operacje zarządzania dla usługi Cosmos DB w 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}");