Forbes продолжает публиковать интервью с известными российскими интернет-предпринимателями и специалистами. На этот раз о том, как социальная сеть «ВКонтакте» научилась распределять нагрузки на свой сайт, как выступает на конференциях ее основатель Павел Дуров и почему обычно компаниям нет смысла создавать свою команду разработчиков, рассказывает руководитель компании «Онтико» Олег Бунин. Полную аудиоверсию интервью можно послушать на сайте программы «Рунетология»
Максим Спиридонов: Большинству людей, ведущих бизнес в интернете, вполне достаточно типовых решений для успешной работы в сети. Будь то корпоративный сайт или сообщество в «ВКонтакте» или Facebook. Однако бывают случаи, когда интернет-бизнес построен на работе с сотнями тысяч пользователей. В таких ситуациях типовые решения не подходят. На помощь приходят специалисты по высоким нагрузкам — фигуры в программистской среде очень уважаемые и в чем-то даже легендарные. Один из таких специалистов — Олег Бунин, руководитель компании «Онтико».
Для начала расскажи обобщенно, что такое высокие нагрузки?
Олег Бунин: Это зависит от типа проектов, но в целом это десятки тысяч пользователей в сутки. Начиная от 30 000 – 40 000 пользователей в сутки, я бы задумался о том, что будет дальше. Это, конечно, не самые высокие нагрузки, но тем не менее. Реально высокие нагрузки — сотни тысяч пользователей. Это типичный случай.
— Каким образом ты пришел к идее создания компании, которая занимается высокими нагрузками?
— Это произошло эволюционным путем. Получилось так, что основные навыки моей команды лежали в области сложных проектов — таких, которые нельзя сделать на простой CMS (Content Management System, система управления содержанием сайта). Нам всегда нравилось искать нестандартные решения, исследовать новые технологии. Всё это вылилось в компанию, которая специализируется на высоких нагрузках.
— Одним из первых проектов стала работа с «ВКонтакте»?
— Пожалуй, да. Это самый громкий проект, но я бы не сказал, что мы там развернулись в полную силу. Мы помогали ребятам так программировать их сайт, чтобы в будущем, когда туда придут миллионы пользователей, у них всё продолжало работать. Речь даже не столько про высокие нагрузки, сколько про грамотное программирование. Я недавно смотрел старые Excel-файлы, которые мне прислал Павел Дуров, со списком и статистикой пользователей. На тот момент их было всего несколько десятков тысяч, но уже тогда они готовились к высоким нагрузкам.
— Это было разумно с их стороны. В тот момент существовало несколько подобных социальных сетей. Как ты думаешь, чем тогда взял «ВКонтакте»?
— Я думаю, что причиной была любовь ребят, которые создавали проект как детище. Вылилось это во внимание к деталям, в самую лучшую логику работы, самые лучшие технологические средства. Я несколько раз общался с Павлом Дуровым и его командой. Когда с ними общаешься, всегда уходишь вдохновленным.
— Ты один из немногих, кто видел программные исходники «ВКонтакте». Ходят слухи о том, что они частично или полностью взяты из Facebook. Так ли это?
— Это неправда. Я действительно видел исходники «ВКонтакте», более того, я видел, как их писали и правили. Лично я уверен, что никакого заимствования из Facebook не было, ребята все написали с нуля.
— Клиенты, которым нужны услуги специалистов по высоким нагрузкам, довольно редки. Как вы их ищете?
— В основном это сарафанное радио. Мы постоянно думаем, что пора начать маркетинговую деятельность компании, но реально никто этим сейчас не занимается. Приведу пример. Сейчас очень много дизайн-студий, и выбрать из них лучшую сложно. Все они похожи между собой. Единственная возможность конкурировать на насыщенном рынке — делать что-то настолько качественно, что подобраться будет сложно.
— Можешь назвать интересные кейсы из области высоких нагрузок? Не вдаваясь в технические детали. С чего вы начинаете?
— Любой проект проходит в своей работе несколько стадий. Сначала пишется некое решение, набор скриптов, которые работают на одном сервере и выполняют какие-то задачи. Но постепенно мощности железа становится мало. Дальше начинаются архитектурные решения. Нужно понять, как проект будет расти с технической точки зрения. Есть масштабирование горизонтальное и вертикальное. У каждого способа есть свои плюсы и минусы. Всё это нужно учитывать. Мы, приходя в любую компанию, спрашиваем, какую посещаемость сайт планирует через год. В зависимости от класса сайта (СМИ, социальная сеть или фотохостинг) характер нагрузки будет разным. Например, миллион пользователей для социальной сети — это очень существенно, а для СМИ — нет. Характер решений будет кардинально различаться в этих случаях.
— Видимо, основную роль играет программный архитектор, который принимает базовые решения?
— Да, программный архитектор принимает решение о том, как в технологическом плане будет развиваться проект, чтобы выдерживать большие нагрузки. Проект нужно подготовить к подобному масштабированию. Мы изучаем программную архитектуру сайта, то есть смотрим, как происходит разделение на модули, как проходит процесс выполнения запроса.
— Бывает, что при посещаемости в 100 000 — 200 000 пользователей все крутится на одном сервере. В то же время я видел проект, который при посещаемости в 50 000 человек использует кластер на пять серверов. Как ты прокомментируешь такую ситуацию?
— Нужно смотреть, что это за проекты. Бывает такое, что 100 000 человек приходят, смотрят одну страницу и уходят. В таком случае всё может крутиться на одном сервере. Во втором примере каждый из 50 000 пользователей может генерировать большую нагрузку, сложные алгоритмические вычисления, которые требуют большой процессорной мощности. В этом случае может быть и пять серверов.
— В примерах, которые я привел, речь идет об интернет-СМИ с возможностью комментирования.
— В таком случае всё зависит от рук и ума разработчиков. Сейчас стоимость сервера значительно ниже, чем ума людей. Тот же Игорь Сысоев (создатель nginx и в прошлом главный сисадмин «Рамблера». — М. С.), который недавно получил инвестиции в свою собственную разработку, экономил «Рамблеру» многие десятки и даже сотни тысяч долларов. Именно потому, что он написал такое программное обеспечение, которое работало быстро и не требовало большого количества железа.
— Среди прочих напастей, которые относятся к высоким нагрузкам, есть DDoS-атаки. Вы умеете с ними бороться?
— Да, мы умеем защищаться от DDoS. Самый правильный ответ звучит так: «Ваш сайт должен быть спрограммирован таким образом, чтобы не замечать DDoS».
— Давай будем реалистами. Я понимаю, о чем ты говоришь. С запасом в десятки раз?
— Речь идет не обязательно о том, что у тебя должно быть 100 серверов, когда реально нужно 10. Это значит, что у тебя всё должно быть спроектировано таким образом, что для тебя не составляет труда с 10 серверов вырасти до 100, что тебе не нужно ничего переписывать, ты просто включаешь их, и все.
— Иными словами, ты стоишь с серверами наготове, и если у тебя пошел DDoS, то ты подключил еще десяток?
— Либо так, либо ты нажал на волшебную кнопочку, произошли невидимые для пользователя изменения, и сайт продолжает работать. У тебя должны быть спроектированы различные уровни, твой сайт должен автоматически реагировать на повышенную нагрузку. Дело не в том, чтобы заказать новые сервера, а в том, чтобы увеличить время кэширования с одной минуты до 5 минут. 99% пользователей не заметят, что у тебя время кэширования выросло, но это снизит нагрузку в десятки раз. Это вполне реальные цифры.
— В крупных американских проектах высокие нагрузки на сервера совсем иного порядка. Вспомним тот же самый Facebook, eBay или Amazon. Есть ли принципиальные отличия в российском и западном подходах к работе?
— По этой причине мы очень часто приглашаем на нашу конференцию «HighLoad++» западных специалистов. У нас обычно четверть докладов проходит на английском языке. Цель всего этого — выяснить, как они справляются с теми или иными решениями. Набор технологий, решений и способов одинаковый, но сайт, который создается в России, даже если он будет успешным, может не дорасти до высоких нагрузок, потому что у нас маленькая аудитория. Сайт, который создается на американском рынке, если он будет успешным, — практически 100% высоконагруженное решение. Они с этим чаще сталкиваются, чем мы.
Я бы еще отметил грамотную программную архитектуру. Я детально не знаком с тем, что творится внутри Facebook, но могу привести в пример «Яндекс». В «Яндексе» есть программисты, которые занимаются высокими нагрузками и пишут что-то вроде платформы. Они берут на себя все проблемы посещаемости, связи между различными проектами. А есть программисты, которые пишут небольшие кусочки и реализуют тот или иной проект. Они пишут небольшой кусочек, и он запускается на платформе, которая может выдержать колоссальные нагрузки. «Яндекс» тем самым добился того, что собрать новый проект он может за считаные дни, используя готовые наработки. Они каждый раз не пишут заново масштабируемые решения, это не нужно. У них есть работающий слой, на который можно сверху что-то довесить.
— Как изменилась веб-разработка за последние годы? Изменилась ли вообще?
— Конечно, она меняется. Рынок потихоньку растет. Почему мы начали проводить конференцию «HighLoad++»? Потому что не было ни одного места, куда можно было прийти и чему-то научиться. Это классическая ситуация, когда общественное мероприятие родилось «снизу», то есть программисты решили собираться и рассказывать друг другу, что и как они делают. Сейчас ситуация совсем не такая катастрофическая, какой она была раньше. Если лет пять назад мы говорили об информационном вакууме в области веб-разработки, то сейчас есть сайты, книги, конференции, мероприятия и курсы, то есть всему можно научиться. В результате уровень знаний программистов колоссально поднялся. Так, как сейчас пишут сайты, не писали несколько лет назад.
— Стали комментировать код?
— Да, можно и так сказать. Ты затрагиваешь болезненную тему. Это вопрос зрелости рынка не столько программистов, сколько студий, которые делают сайты. Несколько лет назад понятий «юзабилити», «отдел тестирования» не было вообще. Семь лет назад мы одними из первых внедрили отдел тестирования в «Рамблере» (в 2000-2006 Олег Бунин руководил отделом веб-разработок «Рамблера» — М. С). Тестирование стало отдельной стадией бизнес-процесса по разработке сайта. Тогда это было колоссальным новшеством. Мы писали сайт и не просто выкладывали его, а передавали в отдел тестирования. Его нам возвращали со списком из 100 мелких ошибок. Тогда в отдел закупили старые компьютеры, установили на них различное программное обеспечение, в том числе и архаичное, и гоняли наши сайты. Сейчас тестирование — это нормальный процесс. Если в смете на создание сайта, которую вам присылают, нет тестирования, то это непрофессиональная команда.
— Как сегодня выглядит типовой отдел разработчиков, например, в твоей фирме?
— Сам отдел разработчиков сейчас довольно сильно специализирован: есть программисты, есть специалисты по базам данных, есть системные администраторы, есть архитекторы, есть javascript-программисты, есть flash-программисты и так далее. Если сейчас в создании даже небольшого проекта будет участвовать 10-15 человек, то это вполне нормально. При этом будет всего два-три программиста, которые будут непосредственно делать сайт. Все остальные будут заниматься очень узкими участками: собирать информацию или управлять процессом. Сейчас любая дизайн-студия — это гораздо более сложное образование, нежели раньше.
— Если сегодня какой-нибудь предприниматель хочет построить грамотный веб-проект, например интернет-СМИ в общественно-политической области, какой алгоритм действий ты ему предложишь?
— Сейчас создание сайта — встроенный в бизнес заказчика проект. Надо смотреть на то, когда нужно запустить проект, как быстро всё нужно разработать. В любом случае с этой задачей нужно приходить в профессиональную студию, которая занималась подобными вещами.
— На твой взгляд, самостоятельную команду искать нет смысла?
— Это практически невозможно. Есть некоторые проекты, ради которых создание команды обязательно, но это не интернет-СМИ.
— Какие проекты требуют создания команды?
— Онлайн-игры, поисковая система, почтовая система.
— То есть крупный портал, где работа после старта продолжается с той же интенсивностью, что и во время разработки?
— Да. Один из критериев — это бизнес проекта. Нужно знать, насколько велика технологическая составляющая в бизнесе проекта и бизнесе компании-заказчика в целом. Например, если у него есть сеть спортивных магазинов, где он занимается продажей спортивной атрибутики, и он хочет добавить интернет-магазин, то в этом случае ему стоит обратиться в стороннюю компанию — к профессионалам, которые сделают интернет-магазин быстро и качественно. Если же он хочет сделать исключительно интернет-СМИ, где ничего, кроме интернета, не будет, то ему стоит думать о том, чтобы сформировать собственную команду.
— Под СМИ?
— Да, даже под СМИ. Если весь твой бизнес зависит от ребят, которые проектируют и программируют сайт, то через какое-то время тебе придется посадить их рядом с собой.
— Ты упоминал в своих ответах конференцию «HighLoad++». Это тоже стало бизнесом?
— Там поднимаются деньги, но не огромные. В первую очередь, в силу того, что деятельность по конференциям несильно масштабируемая. Мы можем делать три конференции в год, можем сделать пять конференций в год, но не 25. В то же время мы можем разрабатывать пять проектов в год, может 25, а можем и 100.
— Как ты распределяешь свое время между проектами и конференциями? Мы с тобой пересекаемся на конференциях, ты меня периодически приглашаешь для выступлений, и я вижу, что ты в них серьезно погружен.
— Конференции — это мое любимое детище. Мне нравится делать мероприятия, которые полезны большому количеству людей. Мне приятно вытаскивать самого «вкусного» докладчика, уговорить Павла Дурова выступить на конференции. Кстати, «HighLoad++» — единственная техническая конференция, на которой выступал Павел Дуров. То, что он был готов раскрыть какие-то внутренние секреты, был готов учить людей, распространять информацию, приветствовалось чуть ли не стоя. То, как работает «ВКонтакте», — это очень интересная методология с технической точки зрения.
— Завершая нашу беседу, назови три наиболее важных качества разработчика?
— Я назову одно — внутренняя потребность делать хорошую вещь. Для разработчика это самое важное качество, потому что их работу очень сложно проверить. Внешне смотришь, видишь, что работает, а какого качества код, сложно понять. Сам разработчик всегда знает, хороший код он написал или нет. Если у него есть внутренняя потребность в том, чтобы всё делать хорошо, то будут получаться проекты более высокого класса.