Использование плагина кэширования для моего сайта WordPress значительно снизило нагрузку на сервер, но я пытаюсь уменьшить его еще больше.Плагин кэширования создает статический HTML-файл, который можно использовать повторно, а не заново создавать его с помощью php при каждом отдельном запросе.
Я хочу скопировать этот статический файл на несколько серверов, чтобы его можно было обслуживать из разных мест, что увеличивает нагрузку на сервер.
Концепция
Я делаю это в основном так:
Главный сервер:
//Echo's what the pointer server will echo, which echo's what the sub-server echo's (which is the stored html file's content)
echo file_get_contents("http://$pointerserver?f=$fileNameWeAreRequesting";
Сервер указателей:
if(isset($_GET['f'])){ $requestedfile = $_GET['f']; }
/* Redirect user to file */
if(isset($_GET['redirect']))
{
//Filename example: file.html (shares same filename as it's original,
//but the content holds a string of sub-servers that host the file, seperated by a comma)
$servers = file_get_contents("filelocations/$requestedfile");
$pieces = explode(",", $servers); //Sub-Servers to array
//Check for online server
foreach ($pieces as $server)
{
if(file_get_contents("servercheck/$server") == "1") //Check if sub-server online
{
/* Echo file from sub-server NOW */
echo file_get_contents("http://$server?f=$requestedfile"); //Echo's whatever the sub-server echo's
break;
}
}
}
Подсервер
/* Provide requested file */
echo file_get_contents("files/$requestedfile"); //Echo's the static html page stored on the sub-server
Это вообще снижает нагрузку на главный сервер?Или file_get_contents работает таким образом, что главный сервер все равно «разбирает» (собирает файл для вывода html) файл.
Как добавить проверку, чтобыесли субсервер находится в автономном режиме, а сервер-указатель не знает об этом, вместо этого мы подаем статический html-файл с основного сервера.
Подготовка основного сервера к этому
Модуль кэширования обрабатывает создание статического файла, поэтому для его отправки я подумал:
Главный сервер:
//This doesn't send anything physical, just instructions to what file the pointer server needs to retrieve and then copy over to the sub-severs.
echo file_get_contents("http://$pointerserver?propagate&f=$fileNameWeAreRequesting";
Указатель сервера: (я знаю, что это не работает, это иллюстрирует идею)
if(isset($_GET['f'])){ $requestedfile = $_GET['f']; }
/* Propagate file to sub-servers */
if(isset($_GET['propagate']))
{
if ($handle = opendir('subservers/')) //Retrieve all available sub-servers
{
while (false !== ($server = readdir($handle))) //For-each subserver, send the file
{
if ($server != "." && $server != "..")
{
/* CREATE AUTO-SUBMIT FORM HERE TO POST FILE CONTENTS (CONCEPT) */
action="http://$server/receivefile.php?f=$requestedfile&send"
$postThisStuff = file_get_contents("http://www.mainserver.xx/cache/$requestedfile"); //Reads the file contents from the main server so it can send it over to the sub-server
}
}
}
}
Подсервер
/* Receive file */
if(isset($_GET['send']))
{
//Write received post date to file
$fh = fopen("files/$requestedfile", 'w') or die("can't open file");
$stringData = $_POST['thefile'];
fwrite($fh, $stringData);
fclose($fh);
die();
}
Итак, мой третий и последний вопрос:Является ли этот метод копирования хорошим подходом с точки зрения ресурсов?Статические файлы на главном сервере редко меняются, только когда кто-то публикует комментарий или редактирует статью (или добавляет новый), но все равно важно сохранять ресурсы.