Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Создание одновременных запросов с разных серверов


Автор: alPacino 16.1.2006, 17:15
Доброе время суток!

Задача: есть некая система, работающая на целевом сервере, для которой необходимо рассчитать производительность опытным путем (искусственно формировать некоторое количество наиболее реалистичных запросов с разных машин). Т.е. необходимо генерировать максимально одновременно запросы сразу с нескольких серверов на целевой.

Один из вариантов решения, который я вижу: на целевом сервере запустить процесс, на всех N машинах fork'ом запустить M процессов, которые при запуске коннектятся к процессу целевого сервера и ждут команды. Демон посылает некую команду всем подключенным процессам, а те, в свою очередь, формируют запрос на целевой сервер.

P.S.: было предложено воспользоваться тулзой ab (apachebrenchmark), но ее недостаток в том, что она показывает внешнее время (т.е. с учетом передачи данных, а скорость то может менться в зависимости от загрузки сервера), а нам необходимо засекать время обработки только транзакции (это уже реализовано). Да и результат ab не выдает.

С радостью выслушаю змечания/комменты по данной задаче.
Заранее благодарен.

Автор: AntonioBanderaz 16.1.2006, 17:19
1. Что за система?
2. На чём написана?

Можно ограничиться, добавлением неских строчек в файл, чтобы узнать время выполнения, или обработки... А дальше писать лог, и анализировать...

Автор: Mal Hack 16.1.2006, 19:19
Цитата(alPacino @ 16.1.2006, 17:15 Найти цитируемый пост)

для которой необходимо рассчитать производительность опытным путем

Зачем?

Автор: alPacino 17.1.2006, 14:42
To AntonioBanderaz
Цитата

Что за система?

На самом деле роли не играет, что за система
Цитата

На чём написана?

PHP5
Цитата

Можно ограничиться, добавлением неских строчек в файл, чтобы узнать время выполнения, или обработки... А дальше писать лог, и анализировать...

Это уже способ фиксирования времени, что уже реализовано. А необходимо фиксировать время "чего-то", а это "чего-то" надо сгенерить. В этом и состоит вопрос: как правильнее на ваш взгляд сгенерировать одновременые запросы с разных серверов.
To Mal Hack
Цитата

Зачем?

Для того, чтобы понять узкие места (сама система - программа, производительность железа и пр.), а может даже отследитьповедение системы при перегрузках

Автор: IZ@TOP 17.1.2006, 15:15
alPacino, что то мне подсказывает что лучше данную систему писать не на PHP, а хотя бы на C (если хочется исполнять на сервер).
И возможно есть продукты которые разработаны для тестирования серверов, возможно есть смысл доверить данную работу именно подобным программам.

Автор: AntonioBanderaz 17.1.2006, 15:20
написать ещё пару скриптов, которые будут пользать по вашему сайту.... извиняюсь системе... можно даже ограничится одним - двумя серверами, скрипт на сервере, запускать не из браузера, а из cron параллельно получется запустить довольно много скриптов... Писал скрипт, который ползает по сайту и собирает текстовую инфу...
Код

<?php
set_time_limit(0);
error_reporting(0);
function get_content($val,$fo) {
        preg_match_all('#<a(.*)><b>(.*)</b></a>(.*)<tr><td style="padding-left:5; padding-top:5;" colspan=2 >(.*)</td>#msiUS',@file_get_contents($val),$rez, PREG_SET_ORDER); 
        for($i = 1; $i < count($rez); $i++) {
         $addr = iconv("KOI8-R", "CP1251",$rez[$i][4]);
         if(strpos($addr,"Ìîñêâà")) {
           fputs($fo, "Íàçâàíèå - ".iconv("KOI8-R", "CP1251",$rez[$i][2]).'<br>'."Àäðåñ - ".$addr.'<p>'."\r\n\r\n");
           echo "Çàïèñàíî â ôàéë:<br /> Íàçâàíèå - ".iconv("KOI8-R", "CP1251",$rez[$i][2]).'<br />'."Àäðåñ - ".$addr.'<p>'."\r\n\r\n";
         }
        }
}
$razdels = array("http://www.XXXXXX.ru/search.php?id_r=1&param=r", 
                   "http://www.XXXXXX.ru/search.php?id_r=2&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=5&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=4&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=6&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=7&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=8&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=9&param=r",
                  "http://www.XXXXXX.ru/search.php?id_r=10&param=r",
                   "http://www.XXXXXX.ru/search.php?id_r=21&param=r");
                   
$fo = fopen("1.html","w");
foreach($razdels as $val) {
    for($i = 1; $i < 50; $i++)
        get_content($val."&page=".$i, $fo);
}
?>

Добавлено @ 15:22
В случае с вашей системой, можно ограничится просто открытием...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)