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


Автор: akazed 19.12.2008, 23:14
Вопрос адресован к профессионалам, поэтому людям не имеющим реального опыта просьба не офтопить.
Итак суть проблемы. Создаю рекламную систему: банеры, объявления. Предполагаются очень большие нагрузки на БД, т.к. будет индексация площадок, вывод материалов и подсчёт статистики. Реализую всё на связке php5 + MySQL5. Вопрос такой, как сбалансировать систему, может есть конкретные примеры как сделать связку из нескольких выделенных серверов, что не было потери данных при пиковых нагрузках. Ориентировочно предполагается до 100000000 обращение к БД в сутки. Очень нужны конкретные примеры физического разделения back-end и front-end, создание кластеров БД с возможностью безболезненного наращивания ресурсов. Буду признателен за любую информацию по теме.

Автор: MuToGeN 20.12.2008, 00:59
Тут уже 3хуровневая архитектура будет больше к месту. На морде - лютый, бешеный прокси под фряхой (или, как мне советовали в аналогичном вопросе, хитрая цисковская железка), дальше - несколько машин, между которыми первый уровень распределяет задачи и общий для всех на 2м уровне источник данных. На последний придется поставить дофига оперативы и серьезно оттюнинговать. 

Автор: MuToGeN 20.12.2008, 01:14
Да, насчет связи между ур.2 и ур.3 - вроде одна контора, для которой мы делали софт, линковала это на пачке firewire шлангов, но я, честно говоря, так и не понял, почему именно так. Возможно, чего-то не знаю.

Автор: akazed 20.12.2008, 08:04
MuToGeN, я правильно понял? на первый уровень можно поставить nginx в качестве прокси и определённый статический контент хранить в кеше на нём. Далее, если можете, проясните вопрос, потому что пока я как-то плаваю в нём. К примеру на 2 уровне у нас 3 сервера для back-end(следовательно на три машины ставится один и тот-же скрипт), а на 3 уровне 5 машин образуют кластер БД. Поправте меня, если я что-то понимаю не правильно. 

Автор: MuToGeN 20.12.2008, 12:31
akazed, извиняюсь, был пьян, посему мысль изложил непонятно. По пунктам:
1 уровень - легковесный веб-сервер. Что делает - раздает статический контент, запросы на динамику передает на 2й уровень, иногда проверяя, кто на 2м уровне сильно загружен, а кто отдыхает.
2 уровень - берет данные с 3го уровня, обрабатывает их, передает на 1й.
3 уровень - источник данных. Тут надо иметь в виду то, что он не должен быть чем-то большим, чем просто источником данных, т.е. не перекладывать на него задачи 2го уровня.
При таком подходе есть огромный плюс - можно без всяких хитрых средств следить за нагрузкой и наращивать аппаратные ресурсы в случае необходимости. Наращивать обычно приходится только 2й уровень.

Я когда-то проектировал одну критичнонагруженную систему, остановился именно на таком варианте. Чуть позже узнал, что гугол, жж и прочие подобные сервисы работают точно так же.

Автор: akazed 20.12.2008, 12:35
MuToGeN, спасибо, ваши разъяснения мне очень помогли. теперь буду копать глубже в сторону такой архитектуры.

Автор: MoLeX 21.12.2008, 09:17
akazed, все что накопаешь выкладывай сюда. Очень полезный материал.

Автор: akazed 21.12.2008, 11:20
Вот нашёл наглядный пример реализации 3-х уровневой системы
http://hi-load.social.php.com.ua/topic/31/

Автор: akazed 21.12.2008, 12:23
Появился новый вопрос, на который я пока не могу найти ответа.
Сетевой админ предложил использовать MySQL NDBcluster. Может у кого есть пример реализации php скрипта с MySQL сluster. Я с такой задачей сталкиваюсь впервые. И ещё, а стоит ли вообще применять MySQL NDBcluster для создания отказоустойчивой и масштабируемой системы, может лучше использовать репликацию и InnoDB?

Автор: akazed 22.12.2008, 12:42
Проведя вечер за исследованием вопроса и материалов конференции highload++ 2008 пришол к выводу, что для построения хорошей системы с лёгкой горизонтальной масштабируемостью, репликация не подходит абсолютно. 
ИМХО, хабре прогеры сильно прогадали, сделав распределение нагрузок между серверами БД на php.

Автор: MuToGeN 23.12.2008, 00:37
Цитата(akazed @  22.12.2008,  12:42 Найти цитируемый пост)
хабре прогеры сильно прогадали

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

А насчет InnoDB vs NDBCluster - это подбирается эмперически. Все зависит от конечной задачи. Вот Аструм Интертеинмент, к примеру, который держит ТаймЗиро и многие другие проекты, связанные с критичными нагрузками, пользуют в основном NDBCluster.

Автор: akazed 23.12.2008, 08:51
Сравнивая InnoDB vs NDBCluster, пришол к выводу, что NDBCluster работает быстрее и более устойчив к нагрузкам. Но часть задачи при работе с запросами приходится перекладывать на php. Однако это не создаёт проблем, если изначально использовать оптимально сконфигурированный физ. сервер. Хочу сразу уточнить, что для работы связки php + MySQL cluster нужно как минимум 3 машины. Хотя сейчас хочу поизвращаться и попробовать всё поставить на одну под FreeBSD 7.0

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