Как мне создать логику Load Balancer с помощью PHP? - PullRequest
1 голос
/ 08 июня 2009

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 08 июня 2009

Мое предложение 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>
0 голосов
/ 08 июня 2009

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

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

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

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

0 голосов
/ 08 июня 2009

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

...