Un logiciel hors ligne JAVA 7 utilisé par des milliers envoie automatiquement une sauvegarde au cloud lorsque les utilisateurs l'exécutent le matin. Chaque sauvegarde envoyée consomme de la bande passante serveur. Voir le tableau ci-dessous:Retarder l'accès au serveur pour éviter les heures de pointe
On peut remarquer qu'une forme de pointe entre 8h15 et 09h45. C'est parce que la plupart des utilisateurs exécutent le logiciel entre cet intervalle de temps.
Nous devons changer le logiciel pour qu'il envoie une sauvegarde au cloud toutes les 10 minutes. Cela augmentera considérablement la consommation de bande passante et nous avons peur que nous atteignions une limite parce que de nombreux utilisateurs utilisent le logiciel au même moment. Pour contourner le problème, nous prévoyons de reporter au hasard la première sauvegarde sur le serveur. Cependant, nous ne sommes pas convaincus que c'est une bonne solution.
Ce type de problème est-il commun? Y a-t-il une solution standard pour cela?
Voici l'algorithme de la façon dont nous pensons à le faire, mais nous ne sommes pas convaincus qu'il est une bonne solution:
new Thread(new Runnable(){
@Override
public void run(){
String hhmmNow = new SimpleDateFormat("HH:mm")
.format(Calendar.getInstance().getTime());
if(hhmmNow.compareTo("08:15")>=0 && hhmmNow.compareTo("09:45")<=0){
Thread.sleep(new Random().nextInt(3600000)); //Sleep from 0 to 1h
}
while(true){
sendBackupToTheCloud();
Thread.sleep(600000); //Sleep 10 minutes
}
}
}).start();
EDIT:Modifié à la solution suivante, selon la suggestion Mcdowella:
new Thread(new Runnable(){
@Override
public void run(){
int periodicity = 10 * 60 * 1000;
//Randon sleep between 0 and 10 minutes to
//distribute backups within the ten-minute interval.
Thread.sleep(new Random().nextInt(periodicity));
//Send new backup to server every 10 minutes
while(true){
sendBackupToTheCloud();
Thread.sleep(periodicity);
}
}
}).start();
Quelle est la taille de la sauvegarde qu'une application envoie au serveur? –
La taille des sauvegardes varie entre 500 Ko et 4 Mo. – viniciussss
okk si des milliers d'utilisateurs téléchargent une sauvegarde sur le même serveur. vous devriez envisager d'utiliser des équilibreurs de charge sur votre serveur. De cette façon, vous n'aurez pas besoin de changer l'algo dans le logiciel. ou si vous devez encore l'implémenter avant de télécharger la sauvegarde sur le cloud, vous devez demander au serveur de savoir si la bande passante disponible est suffisante pour le téléchargement. Il existe des moyens de vérifier la bande passante à la fin du serveur par programmation –