Такой вопрос с помощью настройки MaxClients можно регулировать кол-во максимальных потоков для апача, такой вопрос если нужно чтобы запускалось максимальное кол-во потоков при этом каждый из потоков основное время (95% времени) будет тратить на получение данных с внешнего сервера и каждый из потоков ест примерно 1% памяти VPN, можно поставить MaxClients около 80 или это не поможет? Сможет процессор VPN обслуживать такое кол-во потоков? _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Что-то у меня проблемы с пониманием Вашего поста.
Я прочитал три раза и ничего не понял.
MaxClients просто лимит того, что у вас никогда не будет ретривить данные с бекенда(интерпретатор, диск) больше MaxClients процессов одновременно. _________________ сервис DNS | разные http, DNS и прочие утилиты
Честно говоря фразу "ретривить данные с бекенда" я тоже не понял. Речь шла о том что есть смысл увеличивать кол-во одновременных http процессов в апаче (как я понял вроде для этого надо использовать не MaxClients, а MaxSpareServers), или все равно это не даст пользы, т.к. упрется в то что процессор все-таки имитирует многозадачность и все равно большое кол-во процессов будет ждать обработки процессором. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Насколько я понимаю веб-сервер, в том числе и Апач, нужен для того, чтобы отдавать страницы с сервера. Получение информации с других серверов это обычный сокетный запрос на порт 80 удаленного сервера, реализуется стандартными средствами любого языка программирования. Зачем здесь Апач или какой-либо другой веб-сервер? Если только апач в данном случае не является фронт-ендом к другим серверам. Но использовать его для этой цели очень нерационально.
При большом количестве запросов, также, не рационально использовать синхронную модель (по процессу на запрос), горазо эффективнее показывает себя асинхронная модель (последовательная перебор запросов), а для нее нужен один процесс на ядро.
В общем гадание на кофейном гуще. Дайте описание задачи, тогда можно будет что-либо посоветовать .
хорошо задача
1) есть VPN который получает запрос с другого сервера (точнее другого VPN который занимается представлением сайта-интерфейса для данных запросов)
2) по данному запросу он должен обратится к одному или нескольким внешним серверам, скачать страницу, распарсить её и вернуть ответ на запрос в котором будет только нужная информация из внешних серверов + сохранить результаты в базе.
3) по текущим замерам производительности основное время это получение информации с внешних серверов, парсинг и сохранение данных в базу занимают 5-8 % времени.
При этом таких запросов может быть очень много в единицу времени и они должны выполнятся как можно быстрее. Т.е. нужно будет или оптимизировать работу так чтобы VPN мог выкладывался на 100% в час пик или использовать несколько различных VPN для данных целей.
P.S. Пример подобной системы сервис whois, определние ТИЦ и PR и т.п. где один VPN держит сам сайт, а второй отвечает на запросы (просьба не задавать вопросы почему нельзя сделать все на одном VPN'е - для такой архитектуры есть свои причины).
P.P.S. Сейчас после нагрузочного тестирования есть подозрение что VPN не работает в полную силу из-за ограничений на кол-во потоков в апатче (т.е. памяти и времени процессора ещё хоть залейся), но скорость ответа на большое кол-ва запросов падает до десятков секунд. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Я так понимаю, что основная логика - скачивание страниц и их парсер - написаны на php?
Апач здесь будет только тормозить систему именно из-за своей синхронной природы, т.е. пока не выполнится запрос с сайта-интерфеса (т.е. пока не скачается и не распарсится страница, а это делает php-интерпретатор, а не апач, апач просто ждет) он не сможет обслужить следующий. Для увеличения производительности он создает по процессу на запрос, но это много памяти и системных ресурсов, а следовательно количество одновременных запросов будет существенно ограничено.
Самым простым вариантом здесь является установка nginx в качестве прокси-сервера и запуск большого числа (выяснить экспериментальным путем) php интерпретаторов в режиме fast-cgi.
Nginx принимает запрос от сайта-интерфейса и передает его php-fastcgi серверу. Так как nginx является асинхронным, то ему не нужно ждать пока этот запрос будет выполнен php-сервером. Он сможет обслуживать другие преходящие запросы и выдавать распарсенные ответы. Т.е. это будет один процесс, который обслуживает запросы последовательным перебором.
php-fastcgi серверы в своем режиме будут скачивать страницы, парсить их и по мере готовности и отдавать nginx. Так как один php-fastcgi сервер может обслуживать несколько запросов, а таких серверов можно запустить большое количество, то и вероятность загрузить сервер на 100% будет больше.
В идеале вместо php fastcgi надо написать свой собственный сервер, который также будет скачивать страницы и обрабатывать их в асинхронном режиме. Тогда производительнось еще более увеличится.
гммм вообще куда проще все это реализовать через Mysql таблицу примерно так на
1) сайте интерфейсе через java script запускается рhp скрипт через http который либо добавляет запрос в таблицу mysql если его нет, либо проверяет флаг готовности запроса в той же таблице, при этом с помощью JS повторят обращение к этом скрипту каждую секунду или чаще.
2) соответсвенно php в режиме fast-cgi выбирает из этой таблицы запросы, отмечает их как выполняющиеся, выполнет и потом сохраняет в эту таблицы результаты.
3) как только результат готов вернуть его пользователею, при этом все будет работать ассинхронно.
ок, надо подумать, спасибо _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
MySql является сервером, он не обязательно должен находиться на одном компьютере с обращающимся к нему скриптом (только безопасноть снижается). Поэтому сайт-интерфейс можно настроить так, чтобы он напрямую запросом записывал/читал информацию в удаленный сервер. А скрипт-парсер с другого VDS читал/записывал с этого удаленного сервера информацию. Таким образом убирается большое количество промежуточных звеньев. Единственно надо будет как-то управлять (синхронизировать) всем этим делом.
Хотя с nginx в качестве прокси (как раз разруливающего все это дело), мне кажется будет проще, чем самому все синхронизировать.
кстати, если интересно я поигрался с кол-вом одновременных потоков в апаче и у меня больше 20 одновременных запросов по http очень весело бегали, причем не загрузив даже гарантированной памяти - при тестирование за 10 минут были обработаны 5 тысяч запросов, что намного больше ожидаемой нагрузки, так что пока мне и так хватит. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тестирование - вещь достаточно сложная. Не зная условий тестирования, очень сложно сказать хороший у Вас результат или нет.
У меня nginx + 3 php fastcgi обрабатывают ~30 запросов в секунду при ~ 500 параллельных запросов, правда на самом простом скрипте, который проверяет авторизацию пользователя по куки и выдает ответ. При этом загрузка процессора ~50%, а так скрипт не сложный, то и дополнительной памяти на его исполнение не выделяется, занята только та, что выделена процессам php-fastcgi.
Настройки стандартные, думаю, что если оптимизировать, то можно добиться существенного роста показателей.
Скажем так этот результат пока меня вполне устраивает, время ожидание пользователя секунды 2-3 даже если придет около 30 тыс запросах в час. Большая производительность не имеет смысла, т.к. во-первых такой необходимости просто нет, во-вторых на неё просто не хватит выделенного трафика.
Тестирую с помощью своих специальных страниц в браузере с обновлением страниц с помощью JS. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)