Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
ок, наконец выдалось немного времени Из собственного опыта (был опыт наступания на многие из описаных мной граблей):
1 - если вы делаете что либо на выделенном сервере - первое с чего надо начать, это выбор ОС и програмного обеспечения...
Ну ось конечно в большинстве случаев Linux. Да, тут всё правильно и по большей части это ясно всем.
Но вот дальше...
Что? Я слышу Apache + PHP?! Вы считаете это верным ответом? Почему я не считаю? Всё просто:
a. Apache жрёт много памяти - apache server + php, так как PHP работает как модуль, то один запущеный процес обслуживает одно соединение. 100 соединений - 100 копий Apache (грубо конечно, но если у вас порядка 200-300 запросов в секунду есть, то это лёгко. кстати, запрос - это не только сам вызов скрипта, но это ещё загрузка каждой из картинок, что у вас есть на данной странице, CSS фаилы, так что открывая одну страничку вы реально делаете не 1 запрос, а от 10-15 до 50-60, в зависимости от кол-ва графики), что выливается ~600 мегабайт съеденной оперативной памяти (чем больше в PHP библиотек скомпилино, тем больше памяти есть + сами скрипты порой жрут весьма не мало памяти, так что можете смело ещё накинуть 100-200 метров. при этом apache всегда держит в запасе дочеркие процесы, поэтому если на первый взгляд работают всего каких 10-15 в данную секунду, всёравно все 100 будут висеть в памяти. Так работает Apache...). А если более-менее посещаемый сайт - с apache это очень легко. Реальная альтернатива - Lighttpd. Он не только в десятки меньше памяти занимает но и примерно на 30% быстрее в связке Lighttpd + PHP против Apache + PHP. А поскольку Lighttpd сделан что бы выдерживать высокие нагрузки, что кстати не по силам apache, после достижения определённого кол-ва запросов в секунду apache зарывается носом в землю, Lighttpd наоборот же, набирает ещё больше оборотов - тестов в интернете хватает - стоит только немного погуглить. Одно НО - с Lighttpd PHP работает как FastCGI, но пока минусов этого метода я не видел и не встречался с какими либо ограничениями из-за этого.
Для примера, имею весьма нагруженный torrent трекер - 25 тысячь пользователей, более 21 тысячи соединений, по 350 человек сидящих на WEB по вечерам... Это весьма не хилая нагрузка, которая по зубам лишь двуядерной машине (одноядерных процесоров, способных с этим в данный момент просто не существует ). Раньше стоял Apache + PHP5 первых ещё версий, 5.0.6 кажется. Потребление оперативной памяти только WEB сервером было ~700MB + MySQL съедал своё. Всё тормозило жутко, по вечерам почти DDOS 100% нагрузка. Установка Lighttpd и PHP 5.1.2 свело потребление памяти до жалких 300 MB в общем (это и ОС, и WEB сервер, и MySQL). Выделил больше памяти для MySQL, появилось свободное процесорное время. В итоге после этого набрали где-то 7000 новых пользователей, кол-во соеднинений, которое выдерживал сервер, поднялось на 40%. Да и при 100% нагрузке больше не чуствовалось то, что сервер перегружен. С небольшим таймаутом, но всё загружалось. Так что мотайте на ус, Lighttpd дествительно очень мощьная штука, его стоит освоить и использовать. Я с Apache уже распрощался
2. Выбор ОС.
Очень многие говорят про FreeBSD. Да, возможно последние самые версии и уже доведены до ума в плане многопоточности, но до моего парихода в этот проэкт стояла FreeBSD 5.4... С многопоточностью там было туго. Снёс всё, поставил Linux (конкретно если дистр - я использую Gentoo. Естественно я его отюнинговал по самые помидоры, вся ОС собрана мною, ничего из тех бинарников, что были на LiveCD не осталось, я делал полную пересборку системы. Зачем - будет ясно дальше). Кажется поставил и забыл. А не тут то было. Вы слышали о NTPL (Native Posix Thread Library) - это замена морально и физически устаревшей LinuxThreads. Поскольку ещё не везде стоит NTPL в новых дистрах, либо система собрана с поддержкой обоих библиотек, мною была убрана LinuxThreads вообще из ядра и выставлен флаг ntplonly для glibc (ещё раз напоминаю, я использую Gentoo, там такие настройки выставляются одной единственной командой и не нужно делать что-либо с исходниками - система сама всё умеет - за это я его обажаю ). Чтож, прирост скорости был феноменальный для MySQL, потому что он очутился в своей родной среде. А многопоточность под Linux всегда была отличной, а с NTPL это вообще убойная комбинация. В общем результате смена ОС и компиляция ПО с настройками флагов компиляции позволила выйграть ещё весьма приличное кол-во ресурсов - с месяц я не знал проблем, а за месяц набежало ещё около 5 тысячь пользователей, были добавлены новые возможности в трекер, повысилось кол-во пиров.
Ну конечно програмное обеспечение тоже не возможно оптимизировать до бесконечности, есть операции, которые просто требуют ресурсов и там уже ничего не сделаешь, нет, сдделать то можно, убрав какую-то фишку - но это скорость в угоду функционалу. Нас это не устраивало. Посему мы просто преобрели новый сервер. О выборе железа ниже...
3). Выбор железа. Вообщем то чем мощьнее - тем лучше. Но есть некоторые моменты. К примеры мы когда выбирали сервер - сделали выбор в пользу AMD, знакомый программист (дядька с опытом больше 10 лет WEB разработок) посоветовал взять 64 битные Athlon. Говорил что от 64 битности MySQL просто звереет. Мы взяли AMD X2 3800+, 2 гига рама (реально гига хватает выше крышы, но с заделом на будущее взяли, память ещё пригодится для memcache). Чтож, он был прав. Если раньше MySQL съедал половину а то и больше ресурсов, то щас он съедает от силы по 5% от каждого ядра нашего нового сервачка, а скорость работы просто зверская - загрузка SQL дампа базы занимает примерно 2 секунды. Это damn f***ing fast (сори за это, но по другому выразится очень сложно было) . Так что при выборе железа делайте выбор всё же в пользу а). Двуядерных процессоров. б). 64 бита далеко не лишние для базы данных. - если у вас более-менее нагруженный проэкт конечно
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
virus писал(а):
_Psih писал(а):
выше крышы
Гы
_Psih писал(а):
Lighttpd PHP работает как FastCGI, но пока минусов этого метода я не видел
Вперёд читать ман
_Psih писал(а):
Lighttpd сделан что бы выдерживать высокие нагрузки
Только вот чтоб юзать реврайт придётся делать альтернативными методами, ибо "нативного" реврайта у него нету (хотя я могу и ошибаться)
Насчёт FastCGI... ну незнаю, что такое специфичное надо юзать, что бы нужен был apache Опять же, все эти навороты apache юзаются крайне редко, по большей части они висят там мёртвым грузом занимая память и процесорное время.
mod_rewrite есть, такой модуль присутствует в Lighttpd... просто он не такой навороченный как в apache, зато быстрый в отличии от первого, почти не замедляет WEB сервер.
DZhon писал(а):
_Psih спасибо, очень гут, только вот скажи, Gentoo ты с лив сиди что ли крутил ? и замечены ли какие глюки с 64-битным софтом ?
Ну я его ставил на хард с LiveCD Глюков в 64 битами не наблюдается, всё работает.
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
Сегодня вечером напишу по коду Добавлено спустя 10 часов, 18 минут, 33 секунды
virus писал(а):
_Psih писал(а):
любыми средствами
Докупить оперативы на сервак, разогнать проц(ы) на серваке, и.т.д.
А програмно остаётся только кешировать сложные выборки (в файлах или временных таблицах)
Между прочим разгон и сервера совсем не совместимы - там главное надёжность и долгота службы, а микросхемы при разгоне, как вы знаете, теряют свой ресурс куда быстрее. Добавлено спустя 1 час, 24 минуты, 32 секунды Чёрт... накатал целое сочинение, а сайт взял да сглючил с авторизацией... челый час парился и всё на смарку Придётся писать заного, но уже не сегодня...
Member
Статус: Не в сети Регистрация: 20.09.2005 Откуда: Kiev, Ukraine
Привет всем!
Нужна помощь с проектом на PHP!
У меня не очень получается реализовать запуск внешних программ в PHP. Пробывал и system, и exec, и passthru - что то не выходит... Для начала мне нужно просто откомпилировать прогу на паскале паскалевским компилятором чрез скрипт php....
Если не сложно - приведите пример как это сделать! Заранее спасиб!
з.ы Что то я не нашел встроенной функции типа delay в PHP.... Sleep это не совсем то что нужно.... Есть альтернатива?
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
Serhios писал(а):
Привет всем! Нужна помощь с проектом на PHP! У меня не очень получается реализовать запуск внешних программ в PHP. Пробывал и system, и exec, и passthru - что то не выходит... Для начала мне нужно просто откомпилировать прогу на паскале паскалевским компилятором чрез скрипт php.... Если не сложно - приведите пример как это сделать! Заранее спасиб!
з.ы Что то я не нашел встроенной функции типа delay в PHP.... Sleep это не совсем то что нужно.... Есть альтернатива?
Тебе надо откомпилить прогу (само собой) - это 1. 2 - какая ОС?
Member
Статус: Не в сети Регистрация: 31.08.2005 Откуда: Мир
Вот такой вопрос..как можно скрещивать php и откомпилированное С++ приложение?
чтобы шла обыная страница..а потом гдето в средине посчет каких то данных был выполнен с помощью cgi приложения. причем что бы можно было послать какието значения и получить результат. заранее благодарен )
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
pretorian писал(а):
Вот такой вопрос..как можно скрещивать php и откомпилированное С++ приложение? чтобы шла обыная страница..а потом гдето в средине посчет каких то данных был выполнен с помощью cgi приложения. причем что бы можно было послать какието значения и получить результат. заранее благодарен )
Задаёшь команду, в output получаешь данные (программа должна их выводить в стандартный поток вывода - ака на экран в консоль).
Serhios Хм, ещё скажи через WEB...
А вообще вызываешь фаил компилятора, задаёшь как параметр входной фаил, он тебе выдаст exe с таким же именем в ту же папку где был запущен. Пробуй, эксперементируй. Я такими извращениями не занимался
Вобще-то если ты таким образом запускаешь приложение, оно должно быть написано под консоль, а не под WEB. К тому же если у тебя Windows, это должен быть .exe
В любом случае, даже если и Linux, то так же С++ приложение должно ыбть расчитано на работу в консоли а не с WEB сервером. Либо через CGI WEB сервера как WEB приложение, либо из PHP как консольное приложение.
Member
Статус: Не в сети Регистрация: 31.08.2005 Откуда: Мир
_Psih писал(а):
Вобще-то если ты таким образом запускаешь приложение, оно должно быть написано под консоль, а не под WEB. К тому же если у тебя Windows, это должен быть .exe В любом случае, даже если и Linux, то так же С++ приложение должно ыбть расчитано на работу в консоли а не с WEB сервером. Либо через CGI WEB сервера как WEB приложение, либо из PHP как консольное приложение.
Подскажите плиз как реализовать мою идею!!
эта прога на С++ и есть консольное приложение...
Скрипт завершает работу без ошибок, но файл Test1.exe (всмысле уже откомпиленый) не создается! В чём трабла? Добавлено спустя 58 секунд з.ы через командную строку работает...
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Serhios Я далёк от веба немного, но возможно тут проблема с текущей папкой. Т.к. ты для запуска используешь абсолютные пути, то чёрт его знает где щас текущаяя папка и разрешено ли вообще в неё сейчас писать. Также опытным путём выяснил, что tpc.exe не любит длинные имена - лучше их укорачивать до формата 8.3 . Я думаю можно насильно указать tpc папку куда билдить:
Скрипт завершает работу без ошибок, но файл Test1.exe (всмысле уже откомпиленый) не создается! В чём трабла? Добавлено спустя 58 секунд з.ы через командную строку работает...
Используй в первую очередь ' ', поскольку в " " кавычках одиночный бекслеш трактуется как символ экранирования, поэтому надо было писать так:
Может надо будет использовать ключ -E как писал mein
P.S. 2All И вообще, старайтесь использовать " " кавычки только по необходимости, поскольку это не просто кавычки, PHP их просмартивает на наличие переменных, переменных класса, вызовов методов классов, функций - а это затормаживает выполнение скрипта. Если брать чисто разницу между ' ' и " " - то разница в разы. А если много вывода - то и подавно выйграете во времени выполнения. К тому же писать HTML в ' ' кавычках куда удодобнее, не надо бекслешить " " в атрибутах тегов.
Вообщем доктор прописал, пациенту принимать в обязательном порядке
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения