Переживаю по поводу нагрузки (самописный сайт)

Melvin

Новичок
Здравствуйте. Пишу свой сайт с нуля. Рассчитываю на большое кол. пользователей в сутки, порядка 30.000. Возникла тревога за устойчивость своего сайта при такой посещаемости. Все таки опыта разработки больших порталов у меня нет. Собственно хотелось бы прояснить пару вопросов, которые меня мучают:

1) На что нужно обратить внимание, при создании сайта для такой посещаемости?
2) Стоит ли задумываться о безопасности. Я не имею ввиду о стандартных мерах защиты от инъекций, а о чем то более серьезном. Или защиты от "дурака" и подобных дурок в sql запросах хватит?
3) При каждом обращении к страницам сайта, к БД посылается от 5 до 20 запросов. Они примерно такие:

Код:
PHP:
SELECT id,login,password,country,status FROM users,user_info WHERE login='$login' and users.id=user_info.user_id 
SELECT id,caption,body FROM news LIMIT 0,10 
SELECT id,caption,body FROM articles LIMIT 0,10 
SELECT id,player_code FROM video ORDER BY LIMIT 1
+ ещё 2-4 подобных запроса на каждый модуль(типа опросы, посл. сообщения форума. Все что нужно выводить на главной.)
4) Есть чат. Самописный. На php+mysql+ajax. Каждые 2 секунды делает запрос к базе, для отображения сообщений чата:

Код:
PHP:
$result = mysql_query("SELECT COUNT(*) FROM chat"); 
$start = ...; $end = ...; 
$result = mysql_query("SELECT id,login,msg,datetime FROM chat ORDER BY id DESC LIMIT $start,$end");

Ну и собственно главный вопрос. Как все это будет работать при нагрузках? Как работают готовые движки типа Joomla. Слышал у них гораздо больше запросов и подобного говнокода? В общем посоветуйте пожалуйста что делать дальше и стоит ли беспокоится?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Совет: забыть о нагрузках как о страшном сне и писать... писать... писать...

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

Melvin

Новичок
Спасибо, видимо так и поступлю. По сути только за чат переживаю. Ну там видно будет.
 

Фанат

oncle terrible
Команда форума
> На что нужно обратить внимание, при создании сайта для такой посещаемости?

для начала на что НЕ нужно:
- любые манипуляции с синтаксисом, замены одних функций на другие и тому подобная ерунда.

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

> Стоит ли задумываться о безопасности. Или защиты от "дурака" и подобных дурок в sql запросах хватит?

Стоит. О ней всегда думать стоит. http://phpfaq.ru/safety - не слишком подробно, но в общих чертах можно посмотреть

> Я не имею ввиду о стандартных мерах защиты от инъекций,

Вообще-то, те меры, которые почитаются в среде пользователей пхп "стандартными", обычно ведут прямиком к инъекциям. Поэтому лучше бы своё видение этих методов изложить и получить их критический разбор и рекомендации.

> посылается от 5 до 20 запросов. Они примерно такие:

каждый запрос выполняем, приписав к нему слева EXPLAIN и смотрим вывод.
нужно, чтобы не было temporary и filesort-ов, количество строк не равнялост количеству строк в таблице.

В таблице чата я бы не стал хранить всю историю за всё время. Если хочется хранить - хранил бы отдельно, в таблице архива. А оперативную держал бы короткой, только с актуальными сообщениями.
Хотя не понимаю, кому в наше время нужны веб-чаты...
 

Melvin

Новичок
Спасибо большое за советы. Единственное что не совсем понял:
количество строк не равнялост количеству строк в таблице.
. Какие именно строки имеются ввиду? Кол. запрашиваемых полей в самом запросе имеется ввиду?
 

С.

Продвинутый новичок
Если при исполнении запроса перебираются все строки, то это не есть хорошо (кроме тех случаев, когда они все и нужны).
 

Фанат

oncle terrible
Команда форума
строки, затронутые запросом, которые показывает explain
 

Фанат

oncle terrible
Команда форума
можно увидеть в гомерических количествах в любом тексте "...цать советов пхп-программисту, как стать крутым". к примеру "замени фор на форич, прег_реплейс на стр_реплейс" и так далее.
 

turrel

Новичок
Хороший совет, что пока у тебя нет хотя бы 10 тыс. хостов, париться о нагрузках не нужно (если у тебя нет архиогромных таблиц конечно же)

3) При каждом обращении к страницам сайта, к БД посылается от 5 до 20 запросов.
Зачем? 20 запросов к БД при каждом обращении - это перебор.
Многие блоки (последние новости, статьи, записи и пр.) обновляются относительно редко, не раз в несколько секунд точно. Можно выносить их в отдельные статичные файлы (articles.php, news.php), которые можно будет обновлять по мере необходимости (раз в n минут или при добавлении нового материала к примеру).
Таким образом, при каждом обращении будет вызываться статичные куски кода, БД не будет лишний раз напрягаться.

Потом можешь прикрутить memcached+Sphinx - добьешься некоторой оптимизации скорости выполнения запросов. Но это в будущем.
 
Сверху