2016-04-06 1 views
5

Je suis curieux de savoir comment la mise à l'échelle fonctionne sur les fonctions Azure en ce qui concerne la sortie vers Document DB.Azure Fonction et document DB

Fondamentalement, que se passe-t-il lorsque le DB de document renvoie un 429 parce que le débit alloué est dépassé? Je demande parce que quand j'ai eu le plus bas niveau de fonctions Azure combiné avec le plus bas niveau de DB de document et ai procédé à appeler la fonction 1000 fois dans 20 secondes je voyais seulement 700-800 documents réels insérés dans ma collection de document db. Quand j'ai redimensionné DB de document jusqu'au maximum avec le même niveau de fonction le plus bas à nouveau, je n'ai reçu que 700 à 800 documents dans ma collection doc db. Cependant quand j'ai augmenté la fonction au maximum avec le document db au maximum je reçois tous les 1000. Quand je baisse doc db vers le bas je n'ai eu que 300ish .... bien que cela ait l'air d'avoir verrouillé le doc db compte et qu'il réessaye encore l'insertion jusqu'à ce qu'il puisse réussir. Je suis juste confus quant à cette mise à l'échelle et si je pouvais avoir un aperçu afin que je puisse mieux régler divers aspects de la fonction ou de l'application.

Répondre

6

Oui, il réessaie actuellement sur 429, en attendant le délai suggéré selon la réponse DocDB. Il n'y a actuellement aucun délai d'attente absolu, donc les tentatives continueront jusqu'à ce qu'elles soient terminées (je vérifie maintenant si c'est le comportement attendu).

Dans votre premier scénario, si vous attendez assez longtemps pour que la manette des gaz soit retirée, est-ce que tous les 1000 finissent par apparaître?

Je voudrais essayer de répliquer cela - êtes-vous coller 1000 éléments dans une file d'attente avant d'activer votre fonction? Ou l'appeler d'une autre manière?

Le code de nouvelle tentative spécifique qui est en cours d'exécution est ici si vous êtes curieux: https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/WebJobs.Extensions.DocumentDB/DocumentDBUtility.cs#L36

+0

Je déclenchement de la fonction via http puisque je ne crois pas que le bus de service déclenche en C# sont actuellement fonctionnels (bien que peut-être changé puisque cela change rapidement pour le moment). Donc, je déclenche tous les 1000 via le http, j'utilise loader.io pour faire cela en appelant un point de terminaison web api dans mon code qui à son tour déclenche le poste http pour déclencher la fonction. Le test loader.io est configuré pour exécuter 50 requêtes/s pendant 20 secondes. – steveko23

+0

Je ne suis pas sûr à 100% si la fonction finit par se terminer. Dans mon dernier test, il n'y avait plus d'enregistrements écrits, mais je recevais toujours des 429 lorsque j'essayais d'interagir avec la collection doc db. J'ai donc supprimé toute la collection et l'ai recréée, puis j'ai vu d'autres enregistrements écrits dans la collection. Donc, il semble que ce soit encore en train d'essayer, mais aussi semblait être dans un état étrange. – steveko23

+0

Eh bien, après un tas de tests aujourd'hui, je me suis rendu compte que j'ai retiré le sommeil réel de ce morceau de code dans mon dernier changement: https://github.com/Azure/azure-webjobs-sdk-extensions/commit/d39943965d45038ebddc7d4a2d729beab8a678aC# diff-6f209fbf17e36efd4d9ebc6a285cc00cL69. Je vais corriger cela et ajouter quelques tests pour vérifier que cela ne se reproduise plus. Je vous écris ici quand ce correctif est disponible et je vais essayer d'autres tests pour m'assurer que cela fonctionne comme avant. Merci d'avoir soulevé cette question! – brettsam