Как мне создать логику Load Balancer, используя PHP?

Я хочу использовать свой безлимитный виртуальный хостинг для создания нескольких небольших общих хостинговых учетных записей, на которые я могу перенести обработку. Поэтому мне нужно создать некоторую логику в PHP для создания основ балансировщика нагрузки.

У меня есть 4 общие учетные записи, одна является основным сайтом, а другая - учетными записями сервера обработки. Пожалуйста, смотрите изображение.

Я хочу знать, как я могу определить, на какой сервер передать следующее задание обработки? Сохраняю ли я переменную последнего сервера, на которую я прошел, и перехожу с одного на другой? и т.п.

Какой метод самый лучший?

3 ответа

Решение

Мое предложение KISS Tinpot - использовать JavaScript при отправке формы для случайного выбора сервера.

Список доступных серверов, которые будут использоваться страницей загрузки, должен обслуживаться как файл JS с главного сервера. Задание cron должно периодически обновлять этот список, чтобы обеспечить выбор только живых серверов.

Простой пример:

Servers.js (размещается на главном сервере, автоматически генерируется):

/* Auto Generated 01/01/2009 01:01:01 */
var Servers = new Array();
    Servers[0] = "42.81.240.101";
    Servers[1] = "42.81.240.120";
    Servers[2] = "42.81.240.199";

function LoadBalancer_GetIP()
{
    return Servers[Math.floor(Math.random() * Servers.length)];
}

upload.html:

<html>
    <head>
        <script type="text/javascript" src="servers.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            function DoUpload() {
                TestForm.action = "http://"+LoadBalancer_GetIP()+"/upload.php";
                TestForm.submit();
            }
        </script>
        <form id="TestForm" method="POST" action="">
            <input type=button value="Upload" onclick="DoUpload()">
        </form>
    </body>
</html>

Пожалуйста, пересмотрите, какие рабочие места вы пытаетесь разбить? Какие виды работ.

Во-первых, для ответа вы можете разделить задания равномерно на основе какого-либо параметра задания, например, скажем, каждый параметр имеет поле с именем пользователя, которое отправило задание. Вы разделяете свою пользовательскую базу между этими серверами и отправляете соответствующий запрос на указанный сервер.

Другая стратегия, более сложная, состояла бы в том, чтобы балансировщик нагрузки получал некоторую базовую информацию от этих трех работников, которая сообщала бы нагрузку каждому из них, а не распределяла задания на основе этой нагрузки.

Я лично пошел бы на сложный метод, конечно, если бы данный предмет потребовал этого.

Может быть, сорваться с крючка, но не могли бы вы воспроизвести round-robin / dns /, используя метод случайных запросов?

Другие вопросы по тегам