Freigeben über


Bewährte Methoden für Azure Cosmos DB .NET SDK

In diesem Artikel werden die bewährten Methoden für die Verwendung des Azure Cosmos DB .NET SDK beschrieben. Indem Sie diese Methoden ausführen, können Sie ihre Latenz, Verfügbarkeit und die Gesamtleistung verbessern.

Schauen Sie sich das folgende Video an, um mehr über die Verwendung des .NET SDK von einem Azure Cosmos DB-Techniker zu erfahren!

Checklist

Checkbox Betreff Description
SDK-Version Verwenden Sie für eine optimale Leistung stets die aktuelle Version des Azure Cosmos DB SDK.
Singleton-Client Verwenden Sie für eine bessere Leistung eine CosmosClient von für die Lebensdauer Ihrer Anwendung.
Regions Stellen Sie sicher, dass Sie Ihre Anwendung in derselben Azure-Region wie Ihr Azure Cosmos DB-Konto ausführen, um die Latenz zu verringern. Aktivieren Sie 2–4 Regionen, und replizieren Sie Ihre Konten in mehreren Regionen, um die beste Verfügbarkeit zu erzielen. Aktivieren Sie für Produktionsworkloads ein vom Dienst verwaltetes Failover. Wenn diese Konfiguration nicht vorhanden ist, verliert das Konto die Schreibverfügbarkeit während der gesamten Dauer des Ausfalls der Schreibregion, da das manuelle Failover aufgrund fehlender Regionskonnektivität nicht erfolgreich ist. Informationen zum Hinzufügen mehrerer Regionen mithilfe des .NET SDK finden Sie in diesem Lernprogramm.
Verfügbarkeit und Failover Legen Sie ApplicationPreferredRegions oder ApplicationRegion im v3-SDK und PreferredLocations im v2-SDK über die Liste der bevorzugten Regionen fest. Während eines Failovers werden Schreibvorgänge an die aktuelle Schreibregion gesendet, und alle Lesevorgänge werden an die erste Region in der Liste der bevorzugten Regionen gesendet. Weitere Informationen zu regionalen Failovermechanismen finden Sie im Leitfaden zur Problembehandlung bei der Verfügbarkeit.
Prozessor Aufgrund fehlender Ressourcen auf Ihrem Clientcomputer treten möglicherweise Konnektivitäts-/Verfügbarkeitsprobleme auf. Überwachen Sie die CPU-Auslastung auf Knoten, auf denen der Azure Cosmos DB-Client ausgeführt wird, und führen Sie bei einer sehr hohen Auslastung eine Hoch- bzw. Aufskalierung durch.
Hosting Verwenden Sie für eine maximale Leistung nach Möglichkeit die Windows-64-Bit-Hostverarbeitung. Für latenzempfindliche Produktionsworkloads im direkten Modus wird dringend empfohlen, nach Möglichkeit mindestens 4 Kerne und VMs mit 8 GB Arbeitsspeicher zu verwenden.
Konnektivitätsmodi Verwenden Sie den direkten Modus , um die beste Leistung zu erzielen. Anweisungen finden Sie in der V3 SDK-Dokumentation oder in der V2 SDK-Dokumentation.
Vernetzung Wenn Sie einen virtuellen Computer zum Ausführen Ihrer Anwendung verwenden, aktivieren Sie den beschleunigten Netzwerkbetrieb auf Ihrem virtuellen Computer, um Engpässen aufgrund von hohem Datenverkehrsaufkommen entgegenzuwirken und Wartezeiten oder CPU-Jitter zu reduzieren. Sie können auch die Verwendung einer höherwertigen virtuellen Maschine in Betracht ziehen, auf der die maximale CPU-Nutzung unter 70%liegt.
Kurzfristige Portauslastung Für eine geringe Anzahl von Verbindungen oder sporadische Verbindungen legen wir IdleConnectionTimeout und PortReuseMode auf PrivatePortPool fest. Mithilfe der IdleConnectionTimeout-Eigenschaft lässt sich die Zeit steuern, nach der nicht verwendete Verbindungen geschlossen werden. Dadurch wird die Anzahl der nicht verwendeten Verbindungen reduziert. Standardmäßig werden Verbindungen im Leerlauf unbegrenzt geöffnet gehalten. Dieser Wert muss auf 10 Minuten oder mehr festgelegt werden. Empfohlen werden Werte zwischen 20 Minuten und 24 Stunden. Über die Eigenschaft PortReuseMode kann das SDK einen kleinen Pool von kurzlebigen Ports für verschiedene Azure Cosmos DB-Zielendpunkte verwenden.
Verwenden von async/await Vermeiden Sie blockierende Aufrufe: Task.Result, Task.Wait und Task.GetAwaiter().GetResult(). Die gesamte Aufrufliste ist asynchron, um von async/await-Mustern zu profitieren. Viele synchrone blockierende Aufrufe führen zu einem Threadmangel im Pool und zu längeren Antwortzeiten.
End-to-End-Timeouts Für End-to-End-Timeouts müssen Sie sowohl RequestTimeout- als auch CancellationToken-Parameter verwenden. Weitere Informationen finden Sie in unserem Timeout-Handbuch zur Problembehandlung.
Wiederholungslogik Weitere Informationen dazu, bei welchen Fehlern eine Wiederholung auftreten soll und bei welchen die Wiederholung durch die SDKs erfolgt, finden Sie im Entwurfshandbuch. Bei Konten, die mit mehreren Regionen konfiguriert sind, gibt es einige Szenarien , in denen das SDK automatisch in anderen Regionen erneut ausgeführt wird. Für .NET-spezifische Implementierungsdetails siehe das SDK-Quell-Repository.
Zwischenspeichern von Datenbank-/Sammlungsnamen Rufen Sie die Namen Ihrer Datenbanken und Container aus der Konfiguration ab, oder cachen Sie sie direkt beim Start. Aufrufe wie ReadDatabaseAsync oder ReadDocumentCollectionAsync und CreateDatabaseQuery oder CreateDocumentCollectionQuery führen zu Metadatenaufrufen an den Dienst, die aus dem vom System reservierten RU-Grenzwert verbrauchen. CreateIfNotExist sollte ebenfalls nur einmal zum Einrichten der Datenbank verwendet werden. Diese Vorgänge sollten insgesamt selten ausgeführt werden.
Massenunterstützung In Szenarien, in denen Sie möglicherweise nicht für die Latenz optimieren müssen, empfehlen wir, die Massenunterstützung für das Dumping großer Datenmengen zu aktivieren.
Parallele Abfragen Für geringere Wartezeiten und einen höheren Durchsatz bei Ihren Abfragen unterstützt das Azure Cosmos DB SDK das parallele Ausführen von Abfragen. Es wird empfohlen, die MaxConcurrency-Eigenschaft innerhalb von QueryRequestsOptions auf die Anzahl Ihrer Partitionen festzulegen. Wenn Sie die Anzahl der Partitionen nicht kennen, beginnen Sie mit der Verwendung int.MaxValue, die Ihnen die beste Latenz bietet. Verringern Sie dann die Anzahl, bis sie den Ressourceneinschränkungen der Umgebung entspricht, um Probleme aufgrund einer hohen CPU-Auslastung zu vermeiden. Legen Sie außerdem MaxBufferedItemCount auf die erwartete Anzahl von zurückgegebenen Ergebnissen fest, um die Anzahl von vorab abgerufenen Ergebnissen zu begrenzen.
Backoffs für Leistungstests Wenn Sie Leistungstests für Ihre Anwendung durchführen, sollten Sie Backoffs mit RetryAfter-Intervallen implementieren. Durch das Aussetzen wird die geringstmögliche Wartezeit zwischen den Wiederholungsversuchen gewährleistet.
Indizierung Mit der Azure Cosmos DB-Indizierungsrichtlinie können Sie auch angeben, welche Dokumentpfade mithilfe von Indizierungspfaden (IndexingPolicy.IncludedPaths und IndexingPolicy.ExcludedPaths) in die Indizierung einbezogen oder ausgeschlossen werden sollen. Stellen Sie für schnellere Schreibvorgänge sicher, dass nicht verwendete Pfade von der Indizierung ausgeschlossen sind. Weitere Informationen zum Erstellen von Indizes mithilfe des SDK finden Sie unter Indexierungsrichtlinie.
Dokumentgröße Der Anforderungsaufwand eines bestimmten Vorgangs hängt direkt mit der Größe des Dokuments zusammen. Es wird empfohlen, die Größe Ihrer Dokumente zu reduzieren, da Vorgänge für große Dokumente mehr kosten als Vorgänge für kleinere Dokumente.
Erhöhen der Anzahl von Threads/Aufgaben Da Azure Cosmos DB-Aufrufe über das Netzwerk erfolgen, müssen Sie eventuell den Parallelitätsgrad Ihrer Anforderungen variieren, um die Wartezeit für die Clientanwendung zwischen Anforderungen auf ein Minimum zu reduzieren. Erstellen Sie bei Verwendung der .NET Task Parallel Library beispielsweise mehrere Hundert Aufgaben für Lese- und Schreibvorgänge in Azure Cosmos DB.
Aktivieren von Abfragemetriken Für eine zusätzliche Protokollierung Ihrer Back-End-Abfrageausführungen können Sie SQL-Abfragemetriken mit unserem .NET SDK aktivieren. Weitere Informationen zum Sammeln von SQL-Abfragemetriken finden Sie unter Abfragemetriken und Leistung.
SDK-Protokollierung Protokollieren Sie die SDK-Diagnose für außergewöhnliche Szenarien, z. B. Ausnahmen oder die Überschreitung einer erwarteten Latenz durch Anforderungen.
DefaultTraceListener Das DefaultTraceListener verursacht Leistungsprobleme in Produktionsumgebungen und führt zu hohen CPU- und E/A-Engpässen. Stellen Sie sicher, dass Sie die neuesten SDK-Versionen verwenden oder den DefaultTraceListener aus Ihrer Anwendung entfernen.
Vermeiden der Verwendung von Sonderzeichen in Bezeichnern Einige Zeichen sind eingeschränkt und können in einigen Bezeichnern nicht verwendet werden: /, , \, . ?# Generell wird empfohlen, in Bezeichnern wie dem Datenbanknamen, dem Sammlungsnamen, der Objekt-ID oder dem Partitionsschlüssel keine Sonderzeichen zu verwenden, um ein unerwartetes Verhalten zu vermeiden.

Verwaltung von Newtonsoft.Json-Abhängigkeiten

Überblick

Das Azure Cosmos DB .NET SDK hat eine Abhängigkeit von Newtonsoft.Json für JSON-Serialisierungsvorgänge. Diese Abhängigkeit wird nicht automatisch verwaltet – Sie müssen explizit eine direkte Abhängigkeit in Ihrem Projekt hinzufügen Newtonsoft.Json .

Das SDK kompiliert intern mit Newtonsoft.Json 10.x, das über eine bekannte Sicherheitslücke verfügt. Obwohl das SDK technisch mit 10.x kompatibel ist und die Verwendung von Newtonsoft.Json nicht anfällig für das gemeldete Sicherheitsproblem ist, empfehlen wir weiterhin die Verwendung von Version 13.0.3 oder höher , um potenzielle Sicherheitsprobleme oder Konflikte zu vermeiden. Die 13.x-Versionen enthalten wichtige Änderungen. Die SDK-Nutzungsmuster sind jedoch mit diesen Änderungen kompatibel.

Von Bedeutung

Diese Abhängigkeit ist auch erforderlich, wenn System.Text.Json für benutzerdefinierte Typen verwendet wird, da die internen Vorgänge des SDK weiterhin Newtonsoft.Json für Systemtypen verwenden.

Fügen Sie Newtonsoft.Json immer explizit Version 13.0.3 oder höher als direkte Abhängigkeit hinzu, wenn Sie das Azure Cosmos DB .NET SDK v3 verwenden. Verwenden Sie Version 10.x aufgrund bekannter Sicherheitsrisiken nicht.

Für Standard .csproj-Projekte

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.47.0" />
  <PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
</ItemGroup>

Für Projekte mit zentraler Paketverwaltung

Wenn Ihr Projekt Folgendes verwendet Directory.Packages.props:

<Project>
  <ItemGroup>
    <PackageVersion Include="Microsoft.Azure.Cosmos" Version="3.47.0" />
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
  </ItemGroup>
</Project>

Problembehandlung bei Versionskonflikten

Fehlende Newtonsoft.Json-Referenz

Wenn ein Buildfehler auftritt, z. B.:

The Newtonsoft.Json package must be explicitly referenced with version >= 10.0.2. Please add a reference to Newtonsoft.Json or set the 'AzureCosmosDisableNewtonsoftJsonCheck' property to 'true' to bypass this check.

Dieser Fehler wird von den Buildzielen des Cosmos DB SDK absichtlich generiert, um sicherzustellen, dass die Abhängigkeit korrekt konfiguriert ist.

Lösung für Anwendungen:

Fügen Sie einen expliziten Verweis auf Newtonsoft.Json hinzu, wie im Abschnitt "Empfohlene Konfiguration " weiter oben gezeigt.

Lösung für Bibliotheken:

Wenn Sie eine Bibliothek (keine Anwendung) erstellen und die Newtonsoft.Json-Abhängigkeit auf die Verbraucher Ihrer Bibliothek übertragen möchten, können Sie diese Überprüfung umgehen, indem Sie die MSBuild-Eigenschaft in Ihrem .csproj setzen:

<PropertyGroup>
  <AzureCosmosDisableNewtonsoftJsonCheck>true</AzureCosmosDisableNewtonsoftJsonCheck>
</PropertyGroup>

Warnung

Verwenden Sie diese Umgehung nur, wenn Sie Bibliotheken erstellen, in denen Endbenutzer die Newtonsoft.Json-Abhängigkeit bereitstellen. Fügen Sie für Anwendungen immer den expliziten Verweis hinzu.

Paketversionskonflikte

Wenn Buildfehler auftreten, z. B.:

error NU1109: Detected package downgrade: Newtonsoft.Json from 13.0.4 to centrally defined 13.0.3

Solution:

  1. Identifizieren Sie die erforderliche Version , indem Sie überprüfen, welche Pakete neuere Versionen benötigen:

    dotnet list package --include-transitive | Select-String "Newtonsoft.Json"
    
  2. Aktualisieren Sie Die zentrale Paketversion so, dass sie mit der höchsten erforderlichen Version übereinstimmt oder überschreitet:

    <PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
    
  3. Bereinigen und Neuaufbau:

    dotnet clean
    dotnet restore
    dotnet build
    

Versionskompatibilität

Die folgende Tabelle zeigt die mindestens empfohlenen sicheren Versionen von Newtonsoft.Json für jede Cosmos DB SDK-Version. Während das SDK technisch mit 10.x arbeiten kann, sollten diese Versionen aufgrund von Sicherheitsrisiken niemals verwendet werden.

Cosmos DB SDK-Version Minimale sichere Version Recommended
3.47.0+ 13.0.3 13.0.4
3.54.0+ 13.0.4 13.0.4

Tipp

Stellen Sie bei Verwendung von .NET Aspire 13.0.0 oder höher sicher, dass Newtonsoft.Json die Version 13.0.4 hat, um Konflikte mit den Azure-Komponenten von Aspire zu vermeiden.

Bewährte Methoden

  • Immer als direkte Abhängigkeit hinzufügen – Das SDK verwaltet diese Abhängigkeit nicht automatisch für Sie.
  • Verwenden Sie Version 13.0.3 oder höher – Verwenden Sie niemals 10.x trotz technischer Kompatibilität, aufgrund bekannter Sicherheitsrisiken
  • Erforderlich auch bei System.Text.Json – Sie müssen Newtonsoft.Json auch bei Verwendung UseSystemTextJsonSerializerWithOptionseinschließen, da das SDK es intern für Systemtypen verwendet.
  • Version explizit festlegen – Verlassen Sie sich nicht auf die transitive Auflösung von Abhängigkeiten
  • Überwachen von Warnungen – Behandeln von NuGet-Paket-Downgrade-Warnungen (NU1109) als Fehler in CI/CD-Pipelines

Capture-Diagnose

Alle Antworten im SDK, einschließlich CosmosException, haben eine Diagnostics-Eigenschaft. In dieser Eigenschaft werden alle Informationen zu einer einzelnen Anforderung aufgezeichnet, einschließlich ob es Wiederholungsversuche oder vorübergehende Fehler gab.

Die Diagnosen werden als Zeichenfolge zurückgegeben. Der String ändert sich mit jeder Version, da er für die Fehlersuche in verschiedenen Szenarien verbessert wurde. Mit jeder Version des SDK wird die Formatierung der Zeichenfolge geändert. Analysieren Sie die Zeichenfolge nicht, um Breaking Changes zu vermeiden. Das folgende Codebeispiel zeigt, wie Diagnoseprotokolle mit dem .NET SDK gelesen werden:

try
{
    ItemResponse<Book> response = await this.Container.CreateItemAsync<Book>(item: testItem);
    if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan)
    {
        // Log the response.Diagnostics.ToString() and add any additional info necessary to correlate to other logs 
    }
}
catch (CosmosException cosmosException)
{
    // Log the full exception including the stack trace with: cosmosException.ToString()
    
    // The Diagnostics can be logged separately if required with: cosmosException.Diagnostics.ToString()
}

// When using Stream APIs
ResponseMessage response = await this.Container.CreateItemStreamAsync(partitionKey, stream);
if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan || !response.IsSuccessStatusCode)
{
    // Log the diagnostics and add any additional info necessary to correlate to other logs with: response.Diagnostics.ToString()
}

Best Practices für HTTP-Verbindungen

Das .NET SDK verwendet HttpClient, um HTTP-Anforderungen unabhängig vom konfigurierten Konnektivitätsmodus auszuführen.

  • Im direkten Modus wird HTTP für Metadatenvorgänge verwendet.
  • Im Gatewaymodus wird HTTP sowohl für Datenebenen- als auch für Metadatenvorgänge verwendet.

Eine der Grundlagen von HttpClient besteht darin, sicherzustellen, dass der HttpClient auf DNS-Änderungen in Ihrem Konto reagieren kann, indem Sie die Lebensdauer der Poolverbindung anpassen. Solange Poolverbindungen geöffnet bleiben, reagieren sie nicht auf DNS-Änderungen. Diese Einstellung erzwingt, dass poolierte Verbindungen regelmäßig geschlossen werden, wodurch sichergestellt wird, dass Ihre Anwendung auf DNS-Änderungen reagiert. Unsere Empfehlung besteht darin, diesen Wert entsprechend Ihrem Konnektivitätsmodus und Ihrer Workload anzupassen, um den Leistungseffekt der häufigen Erstellung neuer Verbindungen auszugleichen, wobei sie auf DNS-Änderungen (Verfügbarkeit) reagieren müssen. Ein 5-Minuten-Wert wäre ein guter Start, der erhöht werden kann, wenn er sich auf die Leistung auswirkt, insbesondere für den Gatewaymodus.

Sie können Ihren benutzerdefinierten HttpClient über CosmosClientOptions.HttpClientFactoryeinfügen, z. B.:

// Use a Singleton instance of the SocketsHttpHandler, which you can share across any HttpClient in your application
SocketsHttpHandler socketsHttpHandler = new SocketsHttpHandler();
// Customize this value based on desired DNS refresh timer
socketsHttpHandler.PooledConnectionLifetime = TimeSpan.FromMinutes(5);

CosmosClientOptions cosmosClientOptions = new CosmosClientOptions()
{
    // Pass your customized SocketHttpHandler to be used by the CosmosClient
    // Make sure `disposeHandler` is `false`
    HttpClientFactory = () => new HttpClient(socketsHttpHandler, disposeHandler: false)
};

// Use a Singleton instance of the CosmosClient
return new CosmosClient("<connection-string>", cosmosClientOptions);

Wenn Sie .NET-Abhängigkeitsinjektion verwenden, können Sie den Singletonprozess vereinfachen:

SocketsHttpHandler socketsHttpHandler = new SocketsHttpHandler();
// Customize this value based on desired DNS refresh timer
socketsHttpHandler.PooledConnectionLifetime = TimeSpan.FromMinutes(5);
// Registering the Singleton SocketsHttpHandler lets you reuse it across any HttpClient in your application
services.AddSingleton<SocketsHttpHandler>(socketsHttpHandler);

// Use a Singleton instance of the CosmosClient
services.AddSingleton<CosmosClient>(serviceProvider =>
{
    SocketsHttpHandler socketsHttpHandler = serviceProvider.GetRequiredService<SocketsHttpHandler>();
    CosmosClientOptions cosmosClientOptions = new CosmosClientOptions()
    {
        HttpClientFactory = () => new HttpClient(socketsHttpHandler, disposeHandler: false)
    };

    return new CosmosClient("<connection-string>", cosmosClientOptions);
});

Bewährte Methoden bei Verwendung des Gatewaymodus

Erhöhen Sie System.Net MaxConnections pro Host, wenn Sie den Gatewaymodus verwenden. Azure Cosmos DB-Anforderungen erfolgen im Gatewaymodus über HTTPS/REST. Sie unterliegen dem Standardverbindungslimit pro Hostname oder IP-Adresse. Unter Umständen müssen Sie einen höheren Wert für MaxConnections festlegen (100 bis 1.000), damit die Clientbibliothek mehrere Verbindungen mit Azure Cosmos DB gleichzeitig nutzen kann. In .NET SDK 1.8.0 und höher ist der Standardwert für ServicePointManager.DefaultConnectionLimit 50. Zum Ändern des Werts können Sie CosmosClientOptions.GatewayModeMaxConnectionLimit auf einen höheren Wert festlegen.

Bewährte Methoden für schreibintensive Workloads

Legen Sie für Workloads mit hohen Erstellungsnutzlasten die Anforderungsoption EnableContentResponseOnWrite auf false fest. Der Dienst gibt die erstellte oder aktualisierte Ressource nicht mehr an das SDK zurück. Normalerweise verfügt die Anwendung über das zu erstellende Objekt, sodass sie den Dienst nicht benötigt, um es zurückzugeben. Die Headerwerte sind nach wie vor zugänglich wie etwa eine Anforderungsgebühr. Die Deaktivierung der Inhaltsantwort kann die Leistung verbessern, da das SDK keinen Speicher mehr zuweisen oder den Hauptteil der Antwort nicht mehr serialisieren muss. Dies reduziert auch die Auslastung der Netzwerkbandbreite, um die Leistung weiter zu steigern.

Von Bedeutung

Durch Setzen von EnableContentResponseOnWrite auf false wird auch die Antwort eines Triggervorgangs deaktiviert.

Bewährte Methoden für mehrinstanzenfähige Anwendungen

Anwendungen, die die Nutzung auf mehrere Mandanten verteilen, wobei jeder Mandant durch eine andere Datenbank, einen anderen Container oder einen anderen Partitionsschlüssel innerhalb desselben Azure Cosmos DB-Kontos dargestellt wird, sollten eine einzelne Clientinstanz verwenden. Eine einzelne Clientinstanz kann mit allen Datenbanken, Containern und Partitionsschlüsseln in einem Konto interagieren, und es empfiehlt sich, das Singletonmuster zu verwenden.

Wenn jedoch jeder Mandant durch ein anderes Azure Cosmos DB-Konto dargestellt wird, muss eine separate Clientinstanz pro Konto erstellt werden. Das Singletonmuster gilt weiterhin für jeden Client (ein Client für jedes Konto für die Lebensdauer der Anwendung), aber bei einer hohen Anzahl von Mandanten kann die Anzahl der Clients schwer zu verwalten sein. Verbindungen können über die Grenzen der Computeumgebung hinausgehen und Konnektivitätsprobleme verursachen.

In diesen Fällen wird Folgendes empfohlen:

  • Machen Sie sich mit den Einschränkungen der Compute-Umgebung (CPU- und Verbindungsressourcen) vertraut. Es wird empfohlen, nach Möglichkeit VMs mit mindestens 4 Kernen und 8 GB Arbeitsspeicher zu verwenden.
  • Bestimmen Sie basierend auf den Einschränkungen der Compute-Umgebung die Anzahl der Clientinstanzen (und damit die Anzahl der Mandanten), die eine einzelne Compute-Instanz verarbeiten kann. Sie können die Anzahl der Verbindungen schätzen, die pro Client geöffnet werden, abhängig vom gewählten Verbindungsmodus.
  • Bewerten Sie die Mandantenverteilung auf Instanzen. Wenn jede Compute-Instanz eine bestimmte begrenzte Anzahl von Mandanten erfolgreich verarbeiten kann, ermöglichen der Lastenausgleich und das Routing von Mandanten an verschiedene Compute-Instanzen eine Skalierung, wenn sich die Anzahl von Mandanten erhöht.
  • Erwägen Sie bei Workloads mit geringer Dichte die Verwendung eines am wenigsten häufig verwendeten Caches als Struktur, um die Clientinstanzen zu speichern und Clients für Mandanten zu verwerfen, auf die innerhalb eines bestimmten Zeitfensters nicht zugegriffen wurde. Eine Option in .NET ist MemoryCacheEntryOptions. Dabei kann RegisterPostEvictionCallback verwendet werden, um inaktive Clients zu verwerfen, und SetSlidingExpiration kann verwendet werden, um den maximalen Zeitraum zum Speichern inaktiver Verbindungen zu definieren.
  • Verwenden Sie den Gatewaymodus, um die Anzahl der Netzwerkverbindungen zu reduzieren.
  • Wenn Sie den direkten Modus verwenden, sollten Sie CosmosClientOptions.IdleTcpConnectionTimeout und CosmosClientOptions.PortReuseMode in der direkten Moduskonfiguration anpassen, um nicht verwendete Verbindungen zu schließen und das Volumen der Verbindungen unter Kontrolle zu halten.

Nächste Schritte

Versuchen Sie, die Kapazitätsplanung für eine Migration zu Azure Cosmos DB durchzuführen? Sie können Informationen zu Ihrem vorhandenen Datenbankcluster für die Kapazitätsplanung verwenden.