Как мне создать логику 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 /, используя метод случайных запросов?