13 октября на конференции DEV {web}, организованной компанией IT-Portfolio, разработчики, системные архитекторы и руководители известных интернет-проектов поделились своим опытом с коллегами, рассказав о тонкостях веб-разработки высоконагруженных проектов. На ней были не только профессионалы из Санкт-Петербурга, но и других городов — Москвы, Самары, Екатеринбурга, Омска. А также стран — Украины и Беларуси.
Среди выступающих, были представители таких компаний как Topface, WapStart, Cezurity и «Фотострана». Все спикеры были открыты для вопросов и дискуссий, которые возникали в огромном количестве.
С фотографиями и можно ознакомиться по ссылкам: ВКонтакте, Facebook.
Дмитрий Бородин, CTO Topface, рассказал, что «настоящий» highload нужен проектам с 2-4 серверами, а в крупных он на втором плане. Имея честное горизонтальное масштабирование можно относительно эффективно работать даже с «лапшекодом» и неоптимизированным SQL, используя дешёвые сервера и провайдера.
Надо сказать, что, по мнению IT-Portfolio (в частности, Александра Красса) и некоторых спикеров, позиция несколько неоднозначная. Если у проекта есть деньги и пользователи, чтобы использовать 2-4 сервера, причём, хотя бы с относительной эффективностью, то он уже явно достаточно успешен, а значит можно выделить деньги на апгрейд старых и вообще развитие проекта. Так итеративно развивались многие успешные проекты. Ведь чтобы сразу думать о правильном горизонтальном масштабировании, нужно иметь огромный опыт, знания и иметь возможность потратить много дополнительных усилий. Однако, полностью пренебрегать им тоже не следует, если есть хоть малейшая возможность сразу сделать всё более-менее правильно. Ведь переписать будет намного дороже.
В рамках доклада Дмитрий задал несколько «невозможных» задач по разработке крупных web 2.0 проектов. Некоторые из них были решены с помощью общих усилий зала и спикеров на панельной дискуссии чуть позже, а некоторые стали «домашним заданием» участникам. По словам Дмитрия, при правильном решении четырёх поставленных задач можно закрыть 85% проблем веб-разработки высоконагруженных проектов:
- Понимание проблем атомарности и многопоточности ~ 25%
- Тщательное освоение какой-то no-sql базы (Memcache) ~ 25%
- Паттерны оперирования данными в sql и no-sql (честное горизонтальное масштабирование, шардинг и т.д.) ~ 25%
- Отложенное исполнение нагрузки ~ 10%
Дмитрий Смирнов, ведущий разработчик компании «Фотострана», поделился секретами успеха проекта и рассказал как правильно использовать PHP, MySQL, демонов на С++, memcache и другие технологии в проекте с 30 млн посещаемостью.
Например, у «Фотостраны» более 200 серверов, но они не особо задумываются о «честной» горизонтальной масштабируемости. Многие их потенциально узкие места могут держать нагрузки в 2-3 раза выше уже сейчас (посещаемость проекта более 1,5 млн в день). Плюс можно установить более мощные сервера.
Коллеги из «Фотостраны», когда видят сложности с производительностью, которые сложно решить с помощью существующих технологий, просто пишут свои решения, например, демонов на C++. Пример работы с одним из них есть в презентации (см. ниже).
Кроме того, у них свое собственное NoSQL-хранилище Lemon. Они не смогли эффективно настроить Redis и не стали мучиться. Пообщавшись с другими спикерами и участниками, можно сделать вывод, что практически никому не удается эффективно использовать Redis или MondoDB — слишком тонкая настройка нужна, а людей которые это умеют катастрофически мало. Для больших проектов проще написать своё с нуля, а для средних — вообще подобные решения не использовать.
Отдельно стоит отменить слова Дмитрия о том, что при работе с PHP-кодом (130 серверов) только 30% занимают временные затраты на базы данных. Он отдельно отметил, что это, видимо, говорит о неэффективном использовании PHP. Отсюда можно сделать вывод, что в больших проектах не так уж много проблем с MySQL. У Фотостраны таких серверов всего 14, причем только 7 обрабатывают запросы пользователей, а остальные нужны для надёжности и обновлений.
Как реагирует компания Cezurity на случайные сбои и предсказывает неслучайные, поведал ведущий разработчик Александр Чистяков. Во время доклада было очень много обсуждений технологий, которые используют различные проекты. Автор поделился личной «болью» по настройке всего что только может пригодиться. В докладе было очень много полезных деталей, подробнее смотрите в презентации.
Филипп Дельгядо, CTO Goodwix, бывший тимлид «Яндекс.Деньги», в своём выступлении рассказал о том, как правильно использовать Java в веб-проекте. Тема «Java в вебе, в поисках проблем…» была раскрыта очень подробно. Он показал различные сложности, которые встречаются, например, при PHP-разработке, но легко решаются в рамках стека технологий и специалистов из Java-мира.
В итоге, Филипп дал рецепт построения своего фреймворка на Java, рекомендовав использовать сторонние только при условии наличия отличного специалиста, который знает именно в нём все тонкости. Сам фреймворк получился крайне простой, производительный и использующий некоторые популярные технологии. Его может создать средний разработчик где-то за 2 недели.
Отдельно стоит отметить, что в рамках работы с этим фреймворком достаточно расширять штат только Java Junior Developers – более высококвалифицированные и дорогие специалисты практически не требуются. Плюс решается проблема с верстальщиками — им фактически ничего не нужно знать о Java-окружении, только немного JavaScript, а интеграция frontend и backend делается крайне просто. Это всё очень сильно экономит деньги работодателя — ведь не нужно держать штат высокооплачиваемых специалистов с огромным опытом, которых и найти-то крайне сложно.
Евгений Коковихин, системный архитектор WapStart, рассказал, что важно знать и помнить при проектировании приложений, способных масштабироваться. Это был последний доклад, но, тем не менее, было много полезной информации о граблях, на которые запросто может наступить большой проект, что можно ожидать от memcache и как его можно использовать. Это переросло в небольшую и полезную дискуссию, к которой подключились другие спикеры и участники. Плюс Евгений остановился на очень полезном сервисе для мониторинга производительности, pinba, который несколько раз упоминали другие спикеры.
После выступления докладчиков все желающие могли получить ответ на интересующий вопрос у каждого спикера, чем воспользовались многие участники конференций и часто вопросы перерастали в мини-дискуссии.
В середине конференции была организована панельная дискуссия, которую вёл Александр Красс (генеральный директор IT-Portfolio), в ней участвовали все спикеры. Дискуссия была посвящена проблеме выбора технологий и архитектуры для высоконагруженных проектов и построена так, что вопрос от ведущего чередовался с вопросами из зала. После интенсивного обсуждения некоторые участники определили эффективную стратегию развития своих проектов, а другие разобрались с текущими сложностями.
Благодаря DEV {web} профессиональные веб-разработчики смогли обменяться опытом. Мероприятия, проводимые компанией IT-Portfolio, служат отличной возможностью познакомиться и пообщаться с высококвалифицированными профессионалами, а также получить необходимые знания для развития и создания своих проектов.
Когда будет следующее мероприятие, организаторы не уточняют, но сообщается, что уже скоро.