Question

J'écris un service Windows qui doit exécuter une tâche (qui se connecte à un serveur central) tous les 30 jours + - 5 jours (il doit être aléatoire). Le service sera en cours d'exécution sur les machines clientes 2000+, de sorte que le caractère aléatoire vise à les niveler de sorte que le serveur ne soit pas surchargé.

Quelle serait la meilleure façon de le faire? À l'heure actuelle, je prends un temps aléatoire entre 25 -. 35 jours depuis la dernière tâche couru et l'utiliser

Quelqu'un at-il une meilleure façon? Y at-il une meilleure façon?

Était-ce utile?

La solution

Qu'est-ce que vous avez sonne comme une très bonne façon pour moi. Vous peut vouloir polariser un peu de sorte que si elle exécutée après 25 jours cette fois-ci, il est plus probable d'exécuter dans plus de 30 jours la prochaine fois, si vous voyez ce que je veux dire.

Une autre alternative est que vous pouvez demander au serveur central pour une « fente » appropriée -. Cette façon, il pourrait éviter de se surcharger (en supposant que tout se comporte)

Autres conseils

Je referais certainement ce que Jon suggère dans son deuxième alinéa, et déplacer la logique de décider quand exécuter à côté du serveur. De cette façon, vous avez efficacement les clients à votre contrôle, et peut apporter des modifications à votre algorithme sans avoir à re-distribuer l'application à vos machines 2000+.

Le serveur peut dire au client lors de son prochain pour se connecter? Dans ce cas le serveur pourrait avoir un pool de « créneaux horaires de connexion programmées » qui sont uniformément répartis dans l'intervalle de temps. Le serveur peut distribuer ces derniers comme il aime et assurer ainsi une répartition homogène.

Semble assez bon. Vous pouvez supprimer chaque jour de la liste car ils sont utilisés (pour assurer chaque jour se habitue à un moment donné que par hasard sélectionné quelques-uns ne peut jamais être sélectionné!).

En plus de la mise à niveau à long terme, vous pourriez avoir le serveur renvoie un code d'état si elle est proche de la capacité d'instruction au client de réessayer plus tard. À ce moment-là, vous pourriez retarder une heure, au lieu de 25-35 jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top