2010-09-08 14 views
0

Im essayant d'écrire l'application, qui redirigera ou non un peu de trafic Web. Supposons que je souhaite rediriger 10% du mouvement vers un autre serveur Web. La chose est, que je ne sais pas comment transférer cette condition en condition logique dans mon application. Comme l'entrée j'ai eu le nombre de demandes. Comment obtenir quelle requête devrait être redirigée, et laquelle, si le nombre de requêtes change encore?simple équilibrage de la charge alghorithm

Thx pour tous aider

+0

-vous simplement obtenir un numéro de morceau de demandes, ou reviennent-ils dans un à temps? Si un à la fois, que diriez-vous tous les 10? Si dans une somme forfaitaire, que diriez-vous de prendre 10% et et les assigner? – Ragster

Répondre

0

obtenir le nombre aléatoire de <0;10) gamme et si ce number is equal to 0. Rediriger vers un autre serveur Web.

Ou

Vous pouvez utiliser cet algorithme http://en.wikipedia.org/wiki/Round_robin.

Ou

Vous pouvez oublier ces 10%, et d'écrire des fonctions pour obtenir des ressources gratuites sur un serveur, vous pouvez alors le serveur de choix qui ont en temps le choix des ressources plus libres et si tous les serveurs est pleine vous pouvez supprimer la connexion avec l'erreur ou la pousser vers le serveur aléatoire.

Ou

Pensez à faire une je pense que la couche serveur proxy Web , est une meilleure solution.

Lire cette http://en.wikipedia.org/wiki/Reverse_proxy

0

Les docs Apache ont une section sur load balancing (Ctrl + F pour sur cette page).

Il est généralement préférable de conserver les demandes provenant de la même adresse IP sur le même serveur. Tant que vous n'avez pas trop de demandes de 1 adresse IP, quelque chose comme le pseudo-code devrait fonctionner:

servers = [0: server0.com, 1: server1.com, ...]; 
server_count = 10; 
# split the crc32 range into server_count chunks 
server = crc32(get_client_ip_address()) % (4294967296/server_count); 
redirect(servers[server]);