Pourquoi puis-je avoir des timeouts de connection aux services privés dans Azure?

Je semble le voir avec mon server SQL et mon set de réplicas MongoDB. Je ne reçois qu'une poignée de jour, mais cela me concerne toujours.

Je reçois un timeout d'attente lorsque j'essaie d'ouvrir une nouvelle connection au système distant. Cela se produit même lorsque le système distant est en train de répondre. J'ai une seule instance SQL Server et un set de réplicas mongodb à 3 systèmes. Il semble se produire plutôt sporadiquement sous des charges modérées à plus élevées.

J'utilise les pools de connection, et les tailles devraient limiter les connections (par process, bien sûr), ne devraient pas voir plus de 1k de connections, de même que je vois des temporisations tentant de se connecter.

Le server SQL est Windows (bien sûr), les instances de mongodb sont sous Ubuntu et les clients sont une combinaison de node.js sous Linux et Windows, ainsi que des applications .Net 4.5.

Je suis en train de créer une architecture plus résiliente (essayer 3 fois avant l'échec), tout comme le problème me concerne.

Que cherchiez-vous en termes de problèmes ici?

La question est ancienne et ce pourrait être un problème de racine différent, mais depuis que j'ai passé plus d'une semaine à le suivre et que cela pourrait gagner du time ici:

J'ai un problème qui présente une erreur similaire. après avoir creusé avec le support technique azure leur meilleure estimation (ils ne sont pas sûrs ) est que les connections inactives sont tuées par un proxy entre les applications Web et le server. Cela se produit après environ 4 minutes. et de telle sorte que le server et le client ne include pas que cela se produit. Lorsque vous essayez d'utiliser la connection dans cet état, le client envoie des packages qui ne le font jamais au server.

Enfin, j'ai entendu dire que cela ne serait pas changé / corrigé. de sorte que les options pour éviter cela (dans l'ordre de la santé mentale) sont les suivantes:

  1. tuer les connections inactives sur le server à la marque ~ 3 minutes.
  2. définissez le client pour tuer la connection s'il est inactif à la marque ~ 3 minutes.
  3. assurez-vous de ne pas disposer de connections inactives en effectuant du travail occupé sur le client.

votre tentative à nouveau si la connection échoue fonctionnera si elle créera réellement une nouvelle connection, sinon elle ne fera que l'application attendre plus longtime avant d'arriver au même point.

Je vais mettre à jour dans une semaine si cela corrige réellement le problème pour de bon.

edit: Une combinaison de tuer les connections inactives sur le client et d'envoyer un keep-alive du server toutes les 2 minutes a rendu ce problème disparu.