Archives de catégorie : PHP

Load Balancer PHP

Load Balancer php

Contexte compenser la faiblesse de Lotus Notes d’IBM… Truc assez vieux , on se servira plutot de Haproxy ou de nginx en reverse proxy.

<?php
 
# url
$url1 = 'https://URL1';
$url2 = 'https://URL2';
$url_error = 'http://URL_MAINTENANCE';
 
# calcul de temps et ouverture de connexion serveur 1
$time_start_conn1 = microtime(true);
$conn1 = @fopen($url1, "r");
$time_end_conn1 = microtime(true);
 
$time1 = $time_end_conn1 - $time_start_conn1;
 
# calcul de temps et ouverture de connexion serveur 2
$time_start_conn2 = microtime(true);
$conn2 = @fopen($url2, "r");
$time_end_conn2 = microtime(true);
 
$time2 = $time_end_conn2 - $time_start_conn2;
 
 
#test des 2 serveurs simultannement afin de rediriger au besoin vers une page pour la maintenance
if((! $conn1 ) && (! $conn2 ))
{
 header("Location: $url_error");
}
elseif (! $conn1 ) # test mess1 si ko redirection vers mess2 ( il est forcement OK au vu du test precedent )
{
header("Location: $url2");
}
else    #mess1 Ok ici
{
        if(! $conn2 )
        {
        header("Location: $url1");
        }
        else  # ici mess 1 & 2 sont OK on calcul le temps de reponse pour choisir le meilleur
        {
        $diff=$time1-$time2;
           switch($diff){
                case($diff < 0):   # la difference est negative donc le serveur 2 est plus long que le 1
                header("Location: $url1");
                break;
 
                case($diff > 0):  # la difference est positive donc le serveur 1 est plus long que le 2
                header("Location: $url2");
                break;
 
                case($diff == 0):  # Aucune difference on prefere le 1
                header("Location: $url1");
                break;
                }
 
        }
 
fclose($conn1);
fclose($conn2);
}
 
?>