[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Принципы разработки под высокие нагрузки
Страницы: 1, 2, 3, 4, 5, 6, 7
RCuPeR
В требованиях к разработчику веб-приложений, все больше и больше компаний указываю следующие требование:
Цитата
Понимание принципов разработки под высокие нагрузки;
Опыт с высоко-нагруженными проектами (есть ли, в чем проявлялся highload на ваших проектах)?


Что это? Как это? Зачем это?

Убедительная просьба: не уверен - не пиши. Советы типа: "нужно, кароче, тупо оптимизировать свой код и все будет зашибись" - оставлять в своей базе знаний и не пускать дальше.

_____________
Гнусный социопат с комплексом Бога.
Игорь_Vasinsky
ИМХО

оптимизация поисковых запросов
иногда предумышленная денормализация структуры таблиц
кеширование

может даже использование нескольких серверов Бд

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
нужно, кароче, тупо оптимизировать свой код и все будет зашибись smile.gif

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

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

Вобщем вопрос некорректен. Из области "Как научиться управлять всеми видами транспорта, от велосипеда, до Боинг-737".

Поэтому это самый дельный совет в данной ситуации.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
DedMorozzz
Цитата
Советы типа: "нужно, кароче, тупо оптимизировать свой код и все будет зашибись"

А что ты ожидаешь услышать?
Так и есть. Понимать наиболее ресурсоёмкие точки проекта, и их "упрощать", кешировать, переделывать, и т.д.
Писать не в стиле "что бы работало", а что бы работало хорошо и быстро. Для этого надо понимать что такое запросы, и что такое, к примеру 3 джоина в запросе(к примеру вот статейка http://habrahabr.ru/post/44807/). И что с ними делать

А "зачем это", да это даже простая "лакмусовая бумажка". Человек который работает в хайлоадом уже понимает множество тонкостей, который пригодятся всегда и везде

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Hello
Цитата (RCuPeR @ 16.01.2013 - 12:59)
Что это?

разработка под высокие нагрузки = хороший код + горизонтальное масштабирование
Цитата (RCuPeR @ 16.01.2013 - 12:59)
Как это?

Писать код который сможет работать с десятком серверов memcache и БД, у которой таблица user на 3х разных серверах
Цитата (RCuPeR @ 16.01.2013 - 12:59)
Зачем это?

Достигнут предел вертикального масштабирования, а проект начинает тормозить

_____________
VPS от 5$, первые 2 месяца - бесплатно.
RCuPeR
Решил, что архиважно прочитать данный* учебник (сборник докладов), а потом задавать вопросы.

*http://rutracker.org/forum/viewtopic.php?t=4253616

_____________
Гнусный социопат с комплексом Бога.
Joker
а я когда впервые столкнулся с высоконагруженным проектом всё вылелось всего лишь в несколько правил, которые более четко сформулированными услышал на highload++

1. всё что можно вынести в демоны (фонон) выносим.
2. всё что можно кешировать, кешируем.
3. join забудь. (при горизонтальном масштабируемости вообще физически нет такой возможности)
3. order забудь.
4. autoincriment бд забудь. (при горизонтальном масштабируемости вообще физически нет такой возможности)
5. кеш бд забудь. запросы только по пк ключу только I/O чтение с диска нечего более.


upd: ну то что речи про фреймворки идти не может думаю говорить не надо) минимум наследований минимум всяких излишеств)
upd2: стандартные пхп сессие тоже отпадают)
RCuPeR
Цитата
3. join забудь. (при горизонтальном масштабируемости вообще физически нет такой возможности)
3. order забудь.
4. autoincriment бд забудь. (при горизонтальном масштабируемости вообще физически нет такой возможности)

Здесь я удивился. Можно не "в лоб", а более подробно разобрать эти три пункта?

_____________
Гнусный социопат с комплексом Бога.
Joker
Цитата (RCuPeR @ 16.01.2013 - 17:28)
Здесь я удивился. Можно не "в лоб", а более подробно разобрать эти три пункта?


Когда реч идет очень высоких нагрузках, то тогда сразу встаёт о масштабируемости проекта т.к. если сейчас даже ты все наоптимизируешь ООООЧЕНЬ хорошо и снизишь нагрузку, то что будет когда начнется реклама продукта? и пойдут 5 раз больше трафика? опять оптимизация? почему сразу недооптимизировал до максимум? в один прекрасный момент оптимизации просто упрешся в стену когда опитимизировать будет нече.

И вот тут на помощь приходит масштабируемость, и у неё есть 2 основных понятия:

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

горизонтальная (шарды) - это когда разносятся на разные сервера данные, и ладно когда по начало у вас вся одна таблица находится на одном сервере, но стратегия масштабируемости должна быть универсально так чтоб сходить в соседний магаз купить еще 10 серверов моментом накотить подготовленные дистры и в бой их. (у меня такого не разу не было но вот мой начальник рассказывал что уходил с работы у них было 6 серверов вернулся утром уже 8, оказалось ночью рекламу запустили)
в итоге у нас есть какие то алгоритмы по которым мы вычислем на каком шарде и в каком споте лежит запись и подключаемся туда и достаём её.

3. И само сабой если еще при вертикальном масштабируемости можно делать join внутри запрос то при вертикальной ты уже не сделаешь данные на нескольких сервах.

3. order для бд это один из самых тихих операций, соответсвенно её делать нельзя, тут на помощь приходят инструменты поиска сфинксы яндексы и т.д. (хотя я работал ток со сфинксом прикольная штука), дак вот эти вещи по умолчанию выдают в нужной сортировке, или же по ревалентности поиска.

4. autoincriment бд не получится использовать разные сервера.... опять таки мешают, мы юзаем для это мемкеш.
Joker
я еще не работал с таким) но меня учат) объясняют) к чему то видимо готовят.... мы хоть и делаем один свой проект который в перспективе будет иметь большую нагрузку, но мне кажется еще рано о масштабируемости этого проекта думать) поэтому я хоть и работал уже с этими правилами, чуть чуть, реально я знаю это только в большей части в теории.
T1grOK
Цитата (Joker @ 16.01.2013 - 12:08)
upd: ну то что речи про фреймворки идти не может думаю говорить не надо) минимум наследований минимум всяких излишеств)

Велосипеды строить??? wink.gif
На чем, на чем, а на хорошей основе в виде того или иного фреймворка не стоит пренебрегать даже в высоконагруженных системах. И не поверите smile.gif пишут высоконагруженные проекты и на Symfony, так как структура кода очень хорошая, возможности впечатляющие, расширяемость отличная.
Человекочасы обходятся дороже новой железки. Проще выбрать подходящий фрейм. сложить за пол года проект и уже получать с проекта прибыль(затратив на пару новых серверов монетку), чем оплачивать команде разработчиков ЗП в течении года.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sharki
Цитата
И не поверите smile.gif пишут высоконагруженные проекты и на Symfony,

Компания, в которой я работаю, основной платформой использует Symfony2. Расширяемость потрясающая, отдел архитекторов, наращивают его всем что нужно, без проблем (камень в огород Twin'у, про его "...находится в рамках фрейма, и не шагу в бок..."). И я тоже собсна без труда расширяю его чем хочу, без вреда остальным модулям, которые очень часто отваливаются в "велосипедах". А используем мы различное кеширование, туда входит "Varnish", все летает, все четко) Хоть и симфони достаточно тяжелый в процессорном эквиваленте, из-за чистого ООП (камень в огород Joker, считающий что ООП в ПХП еще не доросло до "нормального ООП")
Игорь_Vasinsky
раскидался камнями laugh.gif

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
sharki
А вот урок мне по симфонии так ни кто и не взялся писать. Ответный камушек. biggrin.gif

Смысл в том, что фреймворк имнно расширяется. А нормальное приложение проектируется без излишеств, самодостаточно и под конкретные задачи. Рамками я называю те базовые принципы, которые вы расширяете. Ту же инкапсуляцию я считаю абсолютным злом при разработке высоконагруженных систем. Даже принципы MVC в рамках фреймворка могут (как бы помягче сказать) создавать препоны при проектировании или оптимизации проекта под большие нагрузки.

Что вы с этими фреймворками как кот с салом, везде их суете. Сказано же давно - фреймворк имеет преимущество только на стадии разработки, облегчая и ускоряя процесс написания кода. При эксплуатации оно сводится на нет костностью, поглащением ресурсов и тормознутостью. Если человек говорит, что он строит высоконагруженные проекты на основе фреймворка, значит два варианта. Либо ему повезло, и его никак не ограничивают в ресурсах, либо проект все же недостаточно нагружен. Скорее всего оба показателя имеют место быть.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sharki
Цитата
При эксплуатации оно сводится на нет костностью, поглащением ресурсов и тормознутостью.

Полностью не согласен! Как уже сказали выше, стоимость человекочасов выйдет намного дороже, чем железо. Про то, почему и т.д не буду спорить. Заколебался) Тебе надо просто с этим работать, и видеть как с помощью GIT'а и четкой архитектуры, и кода, делаются стабильные и легкопонимаемые модули) В котором вновь прибывший новый прогер разберется за несколько часов.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.