Сильнонагруженные сайты - как они реализованы?

Ayavryk
На сайте с 11.10.2003
Offline
209
#51

ПРочитал дискуссию и не понял два момента.

1) Как строятся высоконагруженные приложения

2) У кого самая длинная пиписька

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
P
На сайте с 08.03.2007
Offline
250
#52
Ayavryk:
ПРочитал дискуссию и не понял два момента.
1) Как строятся высоконагруженные приложения
2) У кого самая длинная пиписька

Проблема в терминологии. Некоторые сочли, что речь идёт об оптимизации форума, некоторые что речь о создании клона ЖЖ. Отсюда и дрязги.

zzeus
На сайте с 04.01.2008
Offline
74
#53
prformail:
Вообще есть у меня знакомые товарищи, которые работают в такой сфере.
Основная оптимизация идет за счет использования утилиты, которая компилирует пхп код в исполняемый и в таком виде уже сервер его запускает. То есть сервер не компилирует пхп файлы каждый раз заново.
Также я советую отказаться от MySQL и смотреть в сторону MSSQL и Oracle.
MySQL валится уже на 100 запросах в секунду.
Кроме того, нужно строить индексы в базах данных, и по возможности не использовать джойн запросов по выбору из нескольких таблиц.
Плюс к этому вы можете использовать ядро, написанное не на пхп, но это существенной скорости не даст.
А самое главное - простой сайт на пхп способен выдерживать примерно 500 пользователей онлайн, а если у вас пользователей больше - что же!
Поздравляю! наверняка в таком случае вы найдете деньги и на программистов, и на оборудование.

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

Про MSSQL вместо MySQL я молчу вообще.

HraKK
На сайте с 02.03.2009
Offline
128
#54

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

Во-первых, что такое highload (высоконагруженный) проект, это проект ну хотя бы от 1 млн. хитов в день, хотя это тоже субъективно - правильнее rps - request per second, то есть количество запросов в секунду, может быть проект с посещаемостью 100000 хитов быть более нагруженный из-за пиковых моментов, чем сайт с 1000000 хитов.

Тезис №1

Преждевременная оптимизация корень всех бед.

Если Вы никогда не делали аналогичный highload проект, Вы НИКОГДА не скажите где у Вас будет узкое место, а посему я ( и такое классики как Фаулер, например ) советую Вам не оптимизировать заранее. Это не значит, что можно писать криво, наоборот делайте все правильно, красиво, гибко. Использование ООП и Design Patterns (шаблонны проектирования), только поощряются, а не как многие заблуждаюсь, советуют наоборот. Сейчас мы рассмотрим почему.

Раньше, дела обстояли так, что не было OP cache программ (те кто берут php код и сохраняют его результат интерпретации в кэше), что приводило к тому что интерпретация большого кода (а ООП код всегда несет в себе излишество) существенно замедляла отдачу. Теперь же есть много таких программ, я лично считаю лучшей бесплатную Xcache (которую, кстати, начинают ставить даже на простых хостингах).

Дальше, вспоминая 1 тезис, мы не знаем где будет узкое место, а когда сделали проект и увидели под реальной загрузкой что в таком-то месте у нас тормозит ( для этого можно например погонять в Xdebug) то мы всегда может сделать хак который ускорит это место убрав оттуда ООП или другой код внедрив или дополнительный кэш этого места. Всегда можно от высокого спустится к низшему. А, ухудшая изначально свой код, Вы делаете непоправимое - скоро крупный проект выйдет у Вас из под контроля и Вам придется переписывать заново его или мучаться с поддержкой этого жиле.

Тезис №2

Умный в гору не пойдет, умный гору обойдет.

Любой highload это масштабирование, масштабирование бывает 2 видов:

- вертикальное, когда увеличивают мощность сервера.

- горизонтальная, когда нагрузку разносят на несколько серверов.

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

Масштабировать лучше начать (повторюсь, надо смотреть на проект, всё тут очень и очень уникально) с разнесения на 3 сервера:

1) Статические файлы. Поставить веб сервер Nginx, он замечательно справляется с отдачей статических файлов. Сюда относиться js, css, картинки любой контент и если вы используете html кэш, который потом собираете SSI директивой.

2) Логика. Я бы посоветовал тут поставить lighttpd.

3) Базы данных. Ставим MySQL и memcache на отдельный сервер, желательно чтоб на нем было побольше и побыстрее оперативной памяти.

Когда и если вам перестанет хватать этих серверов, Вы спокойно можете поставить еще один и с помощью аппаратного балансировщика нагрузки или программного (например nginx) и увеличить в двое ресурсы. Единственная сложность MySQL сервер, так как там надо поддерживать актуальную информацию, а она часто изменяется, то можете либо при вставке или изменении делать их сразу на всех таблицах или сделать master – slave и синхронизировать контент с мастер на слейв с какой-то периодичностью по cron. Делать кластер не советую на MySQL заметно падает производительность, тут уже стоит посмотреть на другие СУБД.

Тезис №3

Кэшируй все что можно.

Тут думаю все понятно, просто храним в КЭШе все что можно, чтоб не нагружать сервера, в основном это касается запросов в базу данных, как мы видим из предыдущего тезиса, это самое узкое место и сложных расчетов, например статистических. Для КЭШа советую использовать memcache.

Заключение.

Соблюдая эти 3 простых тезиса, Вы может и не сделаете google, но выдержите любую адекватную нагрузку в разумных пределах, а если ее Вам не будет хватать, то тут уже думаю, Вас будет меньше всего заботить, как это реализовать, ведь вы сможете себе позволить курировать этот проект с Гавайских островов!

Надеюсь это кому-то поможет, с уважением Александр.

я гарант (/ru/forum/493343) уже не оказываю данные услуги, извините.
neov
На сайте с 15.02.2005
Offline
95
#55

Не претендуя на highload, кратко опишу с чем сталкивался по оптимизации нагрузки. Был один сайт, все на нем было здорово (php+MySQL) до поры до времени, пока он не начал грузить сервак кучей зависших процессов, которые плодились пачками и висели в топе по полчаса. Одновременно с этим стал наблюдаться нелостаток памяти, которой выделялось по полгига и более!

Так вот, оказалось следующее. Во-первых при выяснении причин происходящего обнаружилось, что кеш из-за жуткой неоптимизированности разрастался непропорционально быстро и на момент недостатка памяти весил более 5 метров. Первую проблему решил программной оптимизацией кеша, после которой его размер уменьшился в 10 раз (!!!) и рост стал много меньше.

Со втрой проблемой пришлось повозиться дольше. В результате многочисленных тестов стало понятно, что процессы зависают из-за слишком длинного цикла. В итоге удалось найти эту зацикленность (внутри длинного цикла выполнялся select к базе), фактически отключить не нарушая функциональности, после чего процессы перестали плодиться.

Мораль сей басни такова - прежде чем применять новые технологии, стоит разобраться с собственным кодом🚬

HraKK
На сайте с 02.03.2009
Offline
128
#56

Мораль этой басни такова, очередной сайт сделаный идуссами. Понятно что с таким успехом кладутся сайты и с 1000 уников в день. Это не highload,а джамшут&рамшуд™. В таких случаях xdebug Вам в руки.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий