web-dev-qa-db-fra.com

Montée / descente automatique des Cosmos DB RU

Nous rencontrons une limitation (429) due à une explosion de trafic élevé pendant une période de temps. Pour atténuer ce problème, nous augmentons actuellement la RU dans le portail Azure et la diminuons plus tard.

Je souhaite augmenter/réduire en fonction des métriques, mais cela n'expose pas le nombre de partitions physiques créées pour le conteneur de base de données de documents.

  • Comment puis-je obtenir le nombre de partitions physiques pour un conteneur de base de données de documents?
  • Si un membre de ce groupe a résolu un problème de mise à l'échelle automatique, je suis impatient de savoir comment?
8
Saravanan

Sur quoi baser la limite RU souhaitée

Je n'irais pas du tout au niveau de la partition physique car la charge ne se répartit probablement pas uniformément sur les partitions de toute façon. Je suppose que vous ne vous souciez probablement pas du débit de partition moyen, mais que vous devez prendre soin du pire.

Donc, si vous avez besoin d'une mise à l'échelle automatique complète, je me concentrerais sur le suivi des événements de limitation (se produit après coup) ou sur la surveillance de l'utilisation totale de RU (partitionnement magique). Les deux chemins peuvent devenir très complexes pour obtenir une véritable mise à l'échelle automatique et une combinaison de ceux-ci serait probablement nécessaire. Alors que la mise à l'échelle semble réalisable, alors décider quand redescendre et à quel niveau est plus délicat.

Il est difficile de s'attendre à l'inattendu et de réagir de manière fiable aux choses avant qu'elles ne se produisent. Envisagez certainement si cela en vaut la peine dans votre scénario par rapport à des solutions plus simples.

Base de référence de limite de RU basée sur le calendrier

Une solution encore plus simple serait de simplement définir la limite de RU par un calendrier préparé (c'est-à-dire le jour de la semaine + l'heure de la journée) suivant les tendances de charge de pointe moyenne.

Cela ne mettra pas à l'échelle automatiquement les pics ou les chutes inattendus et nécessiterait une surveillance pour s'adapter à l'inattendu, mais vous avez quand même cela, non? Ce qu'une telle solution simple vous donnerait, c'est une limite de débit flexible et un coût prévisible pour la journée moyenne, avec un effort minimal.

Modification de la limite RU

Une fois que vous connaissez la limite de RU que vous souhaitez à un moment donné, il est facile de l'exécuter. La limite croissante-décroissante ou RU pourrait être programmée et par exemple parcourue fonctions Azure . Un exemple C # pour changer réellement la limite serait le long de:

var offer = client.CreateOfferQuery()
    .Where(r => r.ResourceLink == collection.SelfLink).Single();
offer = new OfferV2(offer, newthroughput);
client.ReplaceOfferAsync(offer);

Votre fonction Azure peut cocher périodiquement et en fonction de votre planification configurée ou des événements collectés, ajustez le newthroughput en conséquence.

Une note de prudence

Quelle que soit la solution de mise à l'échelle automatique que vous implémentez, pensez à fixer des limites strictes raisonnables pour la hauteur que vous êtes prêt à atteindre. Sinon, vous pourriez obtenir des factures inattendues d'Azure en cas d'incidents ou d'activité malveillante (DDOS). Il est préférable d'avoir un étranglement à un moment donné.

6
Imre Pühvel

https://github.com/giorgited/CosmosScale

J'ai écrit cette bibliothèque pour aider à la mise à l'échelle automatique. Nous utilisions les fonctions Azure pour effectuer la mise à l'échelle le matin et réduire la nuit, mais nous avons réalisé que ce n'était pas aussi efficace.

La bibliothèque mentionnée ci-dessus évoluera jusqu'au maximum de la RU souhaitée fournie par l'utilisateur et diminuera en cas d'inactivité. Il gère les opérations en bloc différemment des opérations uniques, consultez le github pour les informations complètes, y compris les statistiques de référence.

Avertissement : Je suis l'auteur de cette bibliothèque.

3
scorpion5211

Il y a une réponse plus à jour pour cela maintenant (à partir du 2019-11-19): La fonction "Auto Pilot" (actuellement en Aperçu) effectue automatiquement la mise à l'échelle et la réduction.

Au moment de la rédaction de ce document, vous pouvez le trouver dans le panneau "Aperçu des fonctionnalités" du compte Cosmos DB sur le portail Azure. Il se déplacera évidemment une fois sorti de l'aperçu. Les instructions les plus récentes doivent être trouvées ici: https://docs.Microsoft.com/en-us/Azure/cosmos-db/provision-throughput-autopilot

1
Josh Gallagher