Les pilotes MongoDB offrent plusieurs options aux clients Mongo pour gérer différentes erreurs d'expiration du réseau pouvant survenir lors de l'utilisation. Dans certains cas, les valeurs par défaut de ces options peuvent ne pas correspondre à votre cas d'utilisation. Il est donc essentiel de comprendre les différentes options de délai d'expiration de MongoClient pour éviter les blocages imprévisibles de votre flux d'application et améliorer les performances.
Configuration des options de délai d'attente pour mongo -serverselection, connection &socketClick To TweetAu niveau abstrait, chaque fois que vous utilisez MongoClient pour vous connecter, envoyer ou recevoir une demande, il utilise en interne des options de délai d'attente prédéfinies pour décider combien de temps l'application attendra l'établissement d'une connexion initiale ou la réponse du serveur à votre demande.
Les applications typiques interagissent avec différents serveurs de base de données en fonction de la logique métier. Par exemple, votre historique de paiement peut se trouver sur un cluster de base de données et vos enregistrements d'analyse sur un autre cluster. Les délais d'attente par défaut peuvent influencer considérablement le comportement de votre application en cas d'erreurs réseau. Si votre serveur d'analyse est en panne, chaque opération attendra une valeur par défaut de 30 secondes avant d'échouer (ce qui peut ou non être ce que vous voulez).
Délai de sélection du serveur
Le délai de sélection du serveur correspond au nombre de millisecondes que le pilote mongo attendra pour sélectionner un serveur pour une opération avant d'abandonner et de générer une erreur.
Cette option a été introduite dans la nouvelle version des pilotes Mongo de nouvelle génération (version 3.2.x+ en Java). Pour chaque type d'opération et de préférence de l'utilisateur, le MongoClient sélectionne le serveur à l'aide d'un algorithme de sélection pour exécuter l'opération.
Pour une opération d'écriture sur un serveur autonome, il n'y a qu'un seul serveur disponible qui est sélectionné. Dans un jeu de répliques ou des clusters fragmentés, plusieurs serveurs peuvent remplir les critères de préférence de l'utilisateur pour une opération.
Les scénarios possibles où le délai de sélection du serveur peut se produire incluent - si un réseau est en panne ou en cas de défaillance d'un nœud principal dans un jeu de réplicas.
Le pilote Mongo utilise 30 secondes comme valeur par défaut du délai de sélection du serveur . Selon le cas d'utilisation, nous pouvons augmenter ou diminuer ce seuil.
Délai de connexion
Le délai d'expiration de la connexion correspond au nombre de millisecondes que le pilote attendra avant qu'une nouvelle tentative de connexion soit abandonnée.
Après sélection du serveur, le client essaie d'établir une connexion avec le serveur.
En fonction de l'infrastructure réseau et de la charge sur le serveur, le client peut devoir attendre l'établissement d'une connexion. Scénarios possibles où le délai de connexion peut se produire - le serveur est arrêté, problèmes de réseau, mauvais IP/DNS, numéro de port, etc.
La valeur par défaut d'un délai de connexion dépend de la version et de la langue du pilote. Les dernières versions des pilotes Mongo Java et Ruby ont un délai d'attente par défaut de 10 s pour les établissements de connexion, tandis que le pilote NodeJs n'a pas de délai d'attente.
Si le délai d'attente est trop élevé, vous risquez de bloquer votre application. Si le délai d'attente est trop faible, vous pouvez abandonner trop rapidement. Il est préférable de tester avec différentes valeurs pour trouver le bon délai d'attente pour votre application.
Délai d'expiration du socket
Le délai d'expiration du socket correspond au nombre de millisecondes qu'un envoi ou une réception sur un socket peut prendre avant l'expiration du délai.
Après avoir établi une connexion avec le serveur, le client envoie une demande au serveur et reçoit la réponse en utilisant une connexion déjà établie. En interne, la connexion utilise un socket pour envoyer la requête du client et reçoit la réponse
Les pilotes Mongo Java et Nodejs ont un délai d'attente de socket par défaut de 0 s, ce qui signifie qu'il n'y a pratiquement pas de délai d'attente . Tandis que Ruby offre un délai d'expiration de socket de 5 secondes. Vous ne souhaitez pas limiter ce délai car différentes opérations prendront un temps variable pour s'exécuter.
Exploration complémentaire
Les options de délai d'expiration de MongoClient varient selon les différentes versions et langues des pilotes Mongo. Nous vous encourageons à parcourir la documentation de la classe MongoClient de votre pilote pour comprendre vos options de délai d'attente par défaut. Nous avons fourni un exemple de code ci-dessous pour illustrer la configuration du délai d'attente dans Java et Ruby.
Pilote Java MongoDB
List<MongoCredential> creds = new ArrayList<MongoCredential>(); creds.add(MongoCredential.createCredential(username, DBname, password); MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder(); optionsBuilder.connectTimeout(CONNECTION_TIME_OUT_MS); optionsBuilder.socketTimeout(SOCKET_TIME_OUT_MS); optionsBuilder.serverSelectionTimeout(SERVER_SELECTION_TIMEOUT_MS); MongoClientOptions options = optionsBuilder.build(); Mongo m = new MongoClient(new ServerAddress(server , port), creds, options);
Pilote MongoDB NodeJs
var uri = ‘mongodb://[username:password@]host[:port1]/[database]’; var options = { server: { socketOptions: { socketTimeoutMS: SOCKET_TIME_OUT_MS, connectTimeoutMS: CONNECTION_TIMEOUT_MS } } }; MongoClient.connect(uri, options, function(err, db) { if(!err) { console.log("We are connected"); } });
Avons-nous raté quelque chose ? N'hésitez pas à nous le faire savoir dans les commentaires ci-dessous. N'oubliez pas de vous inscrire à notre newsletter pour être le premier à recevoir des conseils comme ceux-ci et plus encore !