Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Распределение нагрузки на несколько серверов


Автор: begin 5.11.2009, 19:47
Планируем сделать небольшую социальную сеть (такая посещаемость как Вконтакте или Одноклассники не будет, да и не нужна). Но несколько тысяч уников в день планируется. Насколько я понимаю, один выделенный сервер такую посещаемость не выдержит и ляжет. Читал в сети, что когда разрабатывали движок Одноклассников, то писали специально мультисерверное ПО, и что данный сайт сейчас распределен аж на 400 серверах.
Нам конечно такое решение не понадобится, но все же нужно заранее подумать о том, чтобы обеспечить нормальную работу сайта при посещении - максимум 10 тыс. уников в сутки.
Вначале была задумка такая:
1. купить виртуальный хостинг
2. по мере увеличения объема сайта и посещений переехать на VPS
3. потом (при дальнейшем росте сайта и его посещаемости) переехать на выделенный сервер.
Но я так понимаю, что и это может не решить проблему. Тогда возникла такая схема:
1. при разработке движка заранее заложить возможность указания в конфиге движка IP-адресов для папок галереи, и для баз данных разных групп таблиц.
2. когда нагрузка на сайте достигнет критического уровня, то перейти например на три выделенных сервера у разных (для надежности) хостинг-провайдеров и держать на первом - картинки, на втором - базу, на третьем - скрипты. 
3. По мере роста сайта делить нагрузку еще дальше - разные папки картинок на разных серверах, разные группы таблиц базы - на разных серверах.
Подскажите, в правильном ли направлении я мыслю.

Автор: Simpliest 5.11.2009, 20:00
Цитата(begin @  5.11.2009,  18:47 Найти цитируемый пост)
 три выделенных сервера у разных (для надежности) хостинг-провайдеров 

Не совсем верно.

Для начала отдели статику от динамических страниц.

Статику можешь выложить на CDN.

Динамику разносить по разным провайдерам не выгодно. Лучше подберите хороший ДЦ и в нем разместите/арендуйте требуемое количество серверов.

Добавлено через 1 минуту и 22 секунды
Цитата(begin @  5.11.2009,  18:47 Найти цитируемый пост)
один выделенный сервер такую посещаемость не выдержит и ляжет

Смотря что будешь отдавать.
Видео - может и не выдержит. А блоги... вполне.

Автор: Ипатьев 5.11.2009, 20:06
Цитата(begin @  5.11.2009,  19:47 Найти цитируемый пост)
о несколько тысяч уников в день планируется. Насколько я понимаю, один выделенный сервер такую посещаемость не выдержит и ляжет. 

Вы хотели сказать несколько сот тысяч уников?

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

Добавлено через 6 минут и 51 секунду
Послушайте.
Вы только что научились с куками работать.
Не рановато на социальные сети замахиваться?
Я понимаю, не боги горшки обжигают. Но, может, сначала элементарного опыта поднабраться?
Ваши рассуждения, извините, смехотворны.
Цитата(begin @  5.11.2009,  19:47 Найти цитируемый пост)
три выделенных сервера у разных (для надежности) хостинг-провайдеров 

в чем тут будет надежность? Что толку, если будет работать сервер с картинками, но не будет работать БД?
что за странная идея, ходить в базу данных к другому провайдеру? это, по-вашему, увеличивает время отклика?

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


Автор: begin 5.11.2009, 20:46
Цитата

Для начала отдели статику от динамических страниц.
Статику можешь выложить на CDN.

Спасибо за отличный совет. До этого моменты я не знал о такой технологии как CDN. Уже поискал и нашел украинского CDN-провайдера. Такой вариант действительно в разы дешевле, чем платить за несколько своих серверов. Огромное спасибо.

Цитата

Вы хотели сказать несколько сот тысяч уников?
Для нескольких тысяч не нужен выделенный сервер. Несколько тысяч без проблем обслуживается на обычном хостинге.

Вы знаете, а я даже рад, что заблуждался насчет количества. Но цифра взята не с потолка - у меня и моих клиентов несколько сайтов на разных украинских и российский виртуальных хостингах. Так вот время от времени везде возникает проблема то с большим количеством запросов к базе (аж 200  smile ), то еще с чем-то. И это при посещаемости максимум 1 тысяча уников в сутки.

Цитата

Вы только что научились с куками работать.
Не рановато на социальные сети замахиваться?
Я понимаю, не боги горшки обжигают. Но, может, сначала элементарного опыта поднабраться?

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

Цитата

Ваши рассуждения, извините, смехотворны.
три выделенных сервера у разных (для надежности) хостинг-провайдеров 

Да, я уже начинаю понимать, что дополнительной стабильности такая схема явно не даст.

Цитата

Вы не имеете ни малейшего представления о распределении нагрузки.

Ну вот поэтому и советуюсь здесь, с Вами.

Автор: Ипатьев 5.11.2009, 21:40
Ну сами подумайте. 
Допустим, вся эта тысяча ходит в течение 10 часов. Это сто человек в час. То есть, в одну минуту на сайте находятся 2-4 человека максимум. Это вообще не нагрузка. Поисковики создают и то большую.
Цитата(begin @  5.11.2009,  20:46 Найти цитируемый пост)
Понимаю Вашу иронию

Это не ирония.
Это констатация факта. Сложные проблемы вам пока не по зубам.
Вы просто не понимаете, за что беретесь. Вам кажется, что все просто. Посоветуюсь на форуме, полгодика попишу и бац - все готово!
Цитата(begin @  5.11.2009,  20:46 Найти цитируемый пост)
Ну вот поэтому и советуюсь здесь, с Вами.

Понимаете, какое дело.
Не всему можно научиться, "советуясь на форуме".
Вам кажется, что разработать хайлоад проект не сильно сложнее ленты новостей.
Это не так. 
Нужно очень много знаний и практического опыта. Которые советами на форуме не приобретаются.

Цитата(begin @  5.11.2009,  20:46 Найти цитируемый пост)
меня и моих клиентов несколько сайтов на разных украинских и российский виртуальных хостингах. Так вот время от времени везде возникает проблема то с большим количеством запросов к базе (аж 200  smile ), то еще с чем-то. И это при посещаемости максимум 1 тысяча уников в сутки.

Вот чем вам надо заняться.
Сначала надо сделать так, чтобы эти сайты вообще не замечали нагрузки. 
Именно этим вам надо заниматься, если вы хотите в перспективе делать хайлоад. 
Если у вас сайты на 1000 падают, то вам никаких серверов не хватит. ни 3, ни 33.

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

Автор: begin 5.11.2009, 22:04
Цитата

Сначала надо сделать так, чтобы эти сайты вообще не замечали нагрузки. 
Именно этим вам надо заниматься, если вы хотите в перспективе делать хайлоад. 


Да, согласен с Вами. И мне очень хочется узнать именно теорию того, как в php и в MySql писать скрипты и запросы, чтобы минимизировать нагрузку на сервер. Т.е. мне хочется выработать в себе культуру написания ресурсоНЕемких php-скриптов и sql-запросов.
Существует ли какая-нибудь специализированная литература по этой теме? В сети нашел лишь разрозненные упоминания этой проблемы, в своих книгах по php и mysql такого не нахожу и подавно.

Автор: Simpliest 5.11.2009, 22:17
Для начала стоит начать с 
http://xdebug.org/docs/profiler

Т.е. узнать что именно тормозит работу.

Автор: Ипатьев 5.11.2009, 22:32
Такая культура приходит только с опытом.
Уже очень много раз предпринимались попытки давать готовые рецепты, но применяемые без опыта, эти рецепты всегда дают противоположный результат.

В первую очередь надо научиться оптимизировать работу с БД.
Разобраться с индексами.
Научиться пользоваться командами benchmark и explain.

Находить, с помощью профайлинга, медленные запросы, и учиться их оптимизировать. 
Уже по одной этой теме нужно прочесть пару учебников. А дальше ведь пойдут следующие уровни - загрузка диска, оперативной памяти, процессора. Выбор веб-сервера. И многое другое.
Но начать стоит с БД.

Плюс посмотреть на оптимальность своих алгоритмов. Часто бывают ненужные циклы. РНР не должен работать с графикой в режиме отдачи контента ни под каким видом. Графику отдает только веб-сервер.

Автор: brother79 6.11.2009, 07:56
Цитата(begin @  5.11.2009,  19:47 Найти цитируемый пост)
Вначале была задумка такая:
1. купить виртуальный хостинг
2. по мере увеличения объема сайта и посещений переехать на VPS
3. потом (при дальнейшем росте сайта и его посещаемости) переехать на выделенный сервер.



Для твоего случая - ИМХО это оптимальный вар-нт. Нужен опыт - набирайся, но вбухивать бабло раньше времени - смысла не вижу. Если опыта мало - почему не начать с простых вещей?  Если сайт грамотно построен - ничего не мешает его потом оптимизировать и распределять нагрузку. Если есть желание - можно заранее об этом подумать, но начать всётаки с виртуального хостинга. Вообще что-то слабо верится, что сразу прям будет пиковая посещаемость, всёравно этот процесс будет занимать какое-то время, пока народ узнает. 

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