Наверх ▲

Круглый стол ВКонтакте

Павел Дуров Павел Дуров Основатель и разработчик социальной сети Вконтакте.

Олег Бунин: Я рад представить легенду Рунета, у нас в гостях Павел Дуров. Он готов рассказать про ВКонтакте все, что вы хотели узнать, но боялись спросить.

Вопрос из зала:
Расскажите, как вы храните пользовательские данные?
Павел Дуров:
На дисках.
Вопрос из зала:
Понятно. Есть какая-то общая файловая система для всех серверов?
Павел Дуров:
Фотографии – в файлах обычных. В файловой системе Linux.
Вопрос из зала:
Это для всех серверов?
Павел Дуров:
Разумеется.
Вопрос из зала:
А в какой системе?
Павел Дуров:
XFS, естественно.
Вопрос из зала:
Как с вашей нагрузкой на сайт вы будете соответствовать закону «О защите персональных данных»? С ГОСТовской стандартизацией, сертификацией и прочим.
Павел Дуров:
На 100 % будем соответствовать.
Вопрос из зала:
Как? Что будете – понятно. Вопрос – как.
Павел Дуров:
Я думаю, разберемся. Я просто не могу точно ответить сейчас. Очень много деталей. Есть планы, есть наработки, но скоро мы в это углубимся.
Вопрос из зала:
Скажите, пожалуйста, как у вас поставлен процесс разработки – сколько разработчиков, менеджеров, кто придумывает идеи, может, используете какую-то методологию?
Павел Дуров:
Это близко к Agile. Порядка 30-40 разработчиков. 2 дизайнера. Идеи придумывают 1-2 человека (один из них здесь находится). 
Самое главное: цикл разработки – неделя. За неделю обязательно должен быть готовый результат. Если за неделю мы ничего не видим, готовый продукт не представлен на презентации, то это скорее неуспех, чем успех.
Вопрос из зала:
Сколько у вас тестировщиков - нагрузочников, функциональщиков?
Павел Дуров:
На самом деле, часть разработчиков параллельно функционируют как тестировщики и балансировщики нагрузки. Часть сисадминов занимается тем же самым. Все сисадмины, которые у нас есть, - это еще и специалисты по нагрузкам.
Вопрос из зала:
Каково соотношение тестировщиков-нагрузочников и тестировщиков функционала?
Павел Дуров:
Порядка 10-20 %.
Вопрос из зала:
10 % функционала и 20 % нагрузки?
Павел Дуров:
Нет, наоборот. Порядка 20 % специалистов занимаются только этим. Параллельно те люди, которые занимаются системным администрированием, следят за нагрузками и пытаются своевременно все проблемы решать.
Вопрос из зала:
Сколько человек?
Павел Дуров:
Так как у нас многофункциональные специалисты, универсалы, я могу сказать, это порядка 20-25 человек из команды в 40 человек. На самом деле, у нас нет разработчиков, которые не являются специалистами по высоким технологиям.
Вопрос из зала:
Что вы используете в качестве инструментария для автотестов?
Павел Дуров:
Весь "софт" свой.
Вопрос из зала:
Автотесты тоже?
Павел Дуров:
Да.
Вопрос из зала:
Автотесты используете?
Павел Дуров:
У нас поставлены такие интересные собственные разработки, которые мониторят все тысячи серверов. Чуть что где – присылаются sms (мне, например, постоянно приходят сейчас), и все вопросы решаются оперативно.
Олег Илларионов:
Нельзя забыть про целую «касту». В Контакте есть модераторы (люди, которые много писали в техподдержку, становятся модераторами) и так называемые тестировщики. Не могу назвать точную цифру, но около сорока. Перед тем как что-то выпустить, мы в специальном интерфейсе пишем: «Мы собираемся выпустить то-то, посмотрите». Они отписываются об ошибках.
Не знаю, можно ли их назвать тестировщиками или нет. Это не совсем тестировщики, они не сидят в офисе, ничего не тестируют, не исправляют. В то же время они сообщают нам об ошибках, что очень помогает в разработке.
Вопрос из зала:
Избыточность как-то реализована на серверах? Пользователи не имеют доступа к данным?
Павел Дуров:
Разумеется, избыточность реализована. Во-первых, мы следим за тем, чтобы серверы не работали на 20 % ЦП, а чтобы они "отдыхали" большую часть времени. Кроме того, все основные базы данных реплицируются. Все файлы хранятся на двух дисках одного сервера и копируются на старые серверы. Разумеется, ответ «да».
Вопрос из зала:
Насколько я понимаю, приватных сообщений у вас очень много (я даже боюсь предположить цифру). Как вы их храните? Какую базу данных используете?
Павел Дуров:
Да, это наиболее актуальный вопрос. В день отсылается 200 миллионов личных сообщений. Для их хранения, обработки была реализована собственная система, свой движок, написанный на языке "Си". Разработчики, которые им занимались - это неоднократные победители олимпиад по программированию, ACM, рейтингов. На самом деле, самые лучшие умы, которые у нас есть, - это разработчики, которые поддерживают этот движок.
Это касается, кстати, и сообщений стены, статусов, комментариев к статусам, а также данных, которые касаются поиска. Вся приватность, все списки друзей реализованы с помощью собственной системы хранения данных. При разработке этой системы учитывались малейшие потери в оперативной памяти. Все делалось таким образом, чтобы реализовать максимальную скорость обработки информации, занять место на серверах. По сути, 99 % актуальной информации "крутится" в оперативной памяти, поэтому все происходит достаточно быстро.
Вопрос из зала:
Я так понимаю, эта система шардится легко? Без лишних усилий вы ее распространяете?
Павел Дуров:
Вы имеете в виду именно систему хранения личных сообщений?
Вопрос из зала:
Да, я имею в виду ее, в первую очередь.
Павел Дуров:
Да, разумеется, это так. Изначально весь "софт" проектируется таким образом, чтобы "добрасывание" новых серверов не было проблемой. Разумеется, периодически приходится запускать специальные скрипты, которые в течение какого-то времени "раскидывают" текущие данные на большее количество серверов. Например, у нас было 500 серверов под личные сообщения, стало 700. Какой-то "софт" в течение пары суток отработает, и будет 700.
Вопрос из зала:
Ярослав Городецкий, компания CDMvideo. Есть ли у вас собственная сеть CDN для раздачи "горячего" статического контента? Где находятся серверы? Будете ли вы делать такую сеть самостоятельно?
Павел Дуров:
Сейчас нет. Мы планируем. Серверы находятся сейчас в четырех дата-центрах, строим еще два, так как места будут почти исчерпаны к весне этого года. Они находятся в Москве и в Санкт-Петербурге.
Основная база серверов – в Санкт-Петербурге. В Москве находятся, в основном, видеосерверы и немного аудиосерверов. Видеосерверы генерируют в пике 160 гигабит в секунду, поэтому из Москвы этот трафик легче отдать.
Реплика из зала:
160 гигабит в секунду – прикольно.
Вопрос из зала:
Можете рассказать о способе реплицирования большой базы данных между московскими и санкт-петербургскими серверами? Или у вас единая база данных в одном дата-центре?
Олег Илларионов:
База данных, естественно, в одном месте - в Санкт-Петербурге. Даже больше того – в одном дата-центре. Сейчас как раз ресурсы этого дата-центра исчерпаны. Мы работаем над тем, чтобы сделать большую сеть и разрастись на два дата-центра в плане базы данных.
Вопрос из зала:
Можете рассказать о принципах реплицирования на большие расстояния, которые вы хотите и будете применять? Это будет какая-то инкрементальная репликация? Как вы будете это делать?
Олег Илларионов:
Во-первых, два дата-центра, на которых должна быть вся динамика, должны располагаться сравнительно близко друг к другу. Полагаю, что толстое "оптоволокно" решит проблему долгих репликаций. Не знаю, как это будет устроено. Но я думаю, что люди, которые будут этим заниматься, решат эти проблемы правильно.
Павел Дуров:
На самом деле, система готова. Есть два дата-центра в Петербурге, база данных сейчас находится в одном из них. Мы хотим на второй дата-центр реплицировать часть. Все испытано, протестировано. Поставим серверы, начнем это делать. Естественно, все написано нашими специалистами. Каких-то готовых решений мы не используем.
Вопрос из зала:
Хоть что-нибудь? Nginx, memcached?
Павел Дуров:
Это, разумеется, мы используем. Причем по совету Олега Бунина.
Вопрос из зала:
Общие детали реализации будут?
Павел Дуров:
Реализации чего именно?
Вопрос из зала:
Какие вы используете наработки?
Павел Дуров:
Да, мы хотели бы вообще этот "софт" сделать общедоступным, GPL. Он просто сейчас очень специализирован, и нет смысла его выкладывать в общий доступ. Мы хотим сделать некую универсальную систему хранения данных – и для себя, и для всех остальных. Представить всем для использования свободно, открыто.
Вопрос из зала:
Скажите, пожалуйста, несколько слов об обработке видео. Насколько я понимаю, когда видеофайл загружается на сервер, он каким-то образом анализируется (кодек, формат) и перекодируется в какой-то стандартный вид. Так ли это? Если так, то какие инструменты вы используете? Планируете ли на этом этапе какие-то проверки?… Не лицензионной чистоты, но чего-то в этой области.
Павел Дуров:
Да-да-да. Здесь мы используем стандартные инструменты, хотя мы их активно дорабатывали.
Вопрос из зала:
Какие?
Павел Дуров:
Общедоступные. Сейчас работает система, в соответствии с которой повторно загрузить тот файл, который был удален модераторами либо правообладателями, нереально. Берется просто некий хеш от файла, сравнивается.
Вопрос из зала:
Есть база этих хешей?
Павел Дуров:
Да, разумеется. Мы за этим следим. Постоянно удаляются файлы. По запросу правообладателей мы их удаляем. За этим следят некоммерческие организации, те организации, которые борются с порнографией. Они удаляют. Повторно загрузить это уже нереально.
Разумеется, если человек отредактирует файл, возьмет какой-то другой кусок и загрузит, это будет работать. Поэтому мы будем совершенствовать эту систему.
Вопрос из зала:
Вы и дальше планируете использовать именно FTTP? Не VLC?
Павел Дуров:
На самом деле, мы этим усиленно не занимались. Это не является ядром нашего бизнеса. Я сказал об исходящем видеотрафике. Гигантские расходы.
Основная статья расходов, связанных с трафиком, – это именно видеотрафик. При этом на страницах с видео у нас нет рекламы, и мы не пытаемся его монетизировать. Нет ни баннерной, ни таргетированной рекламы – ничего. В том числе, из-за вероятных проблем с правообладателями.
Для нас видео всегда было неким боковым проектом, на котором мы не фокусировались. Недавно мы запустили сервис, который позволяет интегрировать видео с YouTube, с  RuTube и так далее. По-моему, Олег как раз интегрировал.
Для нас это очень приятные, позитивные изменения, так как мы не будем нести убытки, связанные с трафиком. Чуть-чуть откладываем проблемы, связанные с построением собственной CDN-сети (Content Delivery Network). Опять же, это не ядро нашего бизнеса. Нам не хотелось бы размывать фокус.
Вопрос из зала:
В будущем вы, возможно, откажетесь от непосредственного размещения видеофайлов?
Павел Дуров:
Скорее, нет, так как это "ударит" по очень многим пользователям, которые не знают про YouTube и другие средства хранения видео. Но это действительно не является чем-то первостепенным. Если мы анализируем поведение пользователей ВКонтакте, мы видим, что 90 % их времени уходит на просмотр фотографий, чтение личных сообщений, чтение новостей, стен и так далее. 10 % уходит на потребление всего этого трафика.
Поэтому для нас это не приоритет. Мы не стараемся разрабатывать какие-то изысканные решения в данной сфере. Я могу сказать об этом открыто.
Вопрос из зала:
Вопрос от Facebook. Ребята спрашивают: «Вы сейчас интегрировали YouTube. Планируете ли вы интегрировать другие сети - типа Twitter и так далее?»
Олег Илларионов:
Мы готовы интегрировать все, что будет нужно пользователям. Мы занимаемся этим. Мы интегрируемся с Twitter и рассматриваем другие возможности для интеграции.
Насчет видеохостингов. Если есть какой-то видеохостинг, который хочет интегрироваться, они могут написать на press@vkontakte.ru и договориться, как это сделал RuTube. Это все обсуждается. Нам несложно подключить какой-то новый видеохостинг. Это не является проблемой, мы с удовольствием это сделаем.
Вопрос из зала:
Когда Twitter заработает? Точнее, трансляция.
Олег Илларионов:
Трансляция из Twitter во ВКонтакте?
Вопрос из зала:
Да.
Олег Илларионов: Это обсуждалось, но пока сложно представить, как это будет выглядеть, как это будет настраиваться и нужно ли это пользователям. Пока это на уровне идеи, и нет четкого представления, как это должно быть реализовано. Поэтому пока не могу ответить на этот вопрос.
Вопрос из зала:
Что является ключевым решением для того, чтобы запускать такие процессы? Некая статистика необходимости запросов или возможность технологического решения и затраты времени?
Олег Илларионов:
Как сказал Павел, у нас есть два человека, которые занимаются решением того, что нужно сделать. Они анализируют и статистику, и то, сколько нужно затратить времени, и то, какому разработчику это нужно дать (кто лучше справится с этой задачей). На основе этого составляется наш план на неделю.
Вопрос из зала:
Некие приоритеты, за которыми следует остальной вопрос?
Олег Илларионов:
Да.
Вопрос из зала:
Как я понимаю, у вас количество серверов, систем хранения данных исчисляется уже сотнями, если не тысячами. Эти серверы используются в течение многих лет. С течением времени емкость и, в особенности, производительность процессоров, оперативной памяти, систем хранения данных отличается. Как вы учитываете это при балансировке? У вас есть какие-то условные данные, на основе которых распределяется нагрузка?
Павел Дуров:
Да, все это так. Абсолютно верно. Данные существуют. Мы знаем, какой сервер с какими характеристиками какую нагрузку может взять на себя.
Вопрос из зала:
Для балансировки на серверах back-end это тоже как-то используется? У вас есть какой-то механизм, как у nginx, есть приоритеты по серверам?
Павел Дуров:
Да.
Вопрос из зала:
Как у вас сделано массовое развертывание на серверы back-end: какое-то стандартное решение или что-то самописное?
Павел Дуров:
Не могу сказать. По-моему, самописные скрипты.
Олег Илларионов:
Ничего особенного, никаких пиринговых сетей. Об этом, может быть, были какие-то разговоры, но, в целом, сейчас довольно быстро все развертывается. В зависимости от загруженности серверов, но больше, чем минуту эта логика никогда не длилась, поэтому с таким временем развертывания можно спокойно жить.
Вопрос из зала:
Какие примерно мощности сейчас требуются на перекодирование файлов при загрузке (какое количество серверов)?
Павел Дуров:
Там не так много – по-моему, 1-1,5 тысячи серверов. Это все серверы, которые "занимаются" хранением и – параллельно – копированием видео. Часть этих серверов при необходимости задействуется под копирование, после чего они кладут эти файлы на те серверы, которые непосредственно будут их отдавать.
Вопрос из зала:
Тогда самый первый вопрос, который у меня был, про размещение картинок и видео. Каким образом веб-сервер получает доступ к конкретному файлу на диске? Все-таки сетевая файловая система или они как-то реплицируются?
Павел Дуров:
Обычный прокси.
Олег Илларионов:
Просто скриптами все делается.
Павел Дуров:
Да-да.
Вопрос из зала:
По сети?
Олег Илларионов:
Да.
Вопрос из зала:
То есть файлы – это локальные файлы, по сути?
Олег Илларионов:
В локальной сети.
Вопрос из зала:
Или локально?
Олег Илларионов:
Речь о том, что файл мы "отдаем" конкретному серверу. Но когда кто-то загружает файл, он может сжаться на одном сервере, а потом быть отправленным на другой. Чтобы задействовать лишние серверы, надо сжать файлы, потому что есть видео многих форматов. Это трудоемкая работа.
Вопрос из зала:
Вы говорили об анализе действий пользователей (сколько времени пользователь проводит за чтением и так далее). Как это организовано? Есть ли у вас специальная очередь задач в этой области, так же, как языков пользовательского интерфейса? Как много времени вы тратите на изучение этого?
Мужской голос:
Считаетесь ли вы продолжением "Империи зла" или нет?
Павел Дуров:
Коротко – нет. Мы недостаточно времени тратим на анализ log-файлов и поведения пользователей, безусловно. Когда мы встречаемся с коллегами из Яндекса, они недоумевают, почему мы так мало внимания уделяем этому. На самом деле, мы сами недоумеваем.
У нас есть простенькие анализаторы трафика и простенький собственный сервис статистики. Их мы и используем. Никаких глубоких исследований здесь мы не проводим. Это одно из упущений.
Вопрос из зала:
Расскажите, как функционирует страничка «Новости». Например, есть какой-то пользователь, у которого есть 10 друзей. Так сложилось, что все друзья разбросаны по всем серверам. Новости, которые генерирует этот пользователь, физически реплицируются на каждый сервер или есть более хитрые методы? Как функционирует страничка новостей?
Павел Дуров:
Очень интересный вопрос. Мы где-то года полтора делились с коллегами из Facebook опытом того, кто как это делает. Мы были удивлены, насколько похожи аналогичные системы. 
Причем это вещь, которую, понятно, нельзя скопировать, так как она разрабатывается очень глубоко внутри. Мы не используем для этого MySQL. Естественно, кэшируем данные в memcached.
Все новости дробятся по пользователям именно генератором контента. Пользователь функционирует как генератор контента, генератор действия. Существуют серверы-сборщики. На серверы-сборщики идет запрос: «Дайте мне действия этих пользователей». Этот сервер посылает запрос к еще десяти серверам, так как пользователи разбиты по id на ряд серверов. Все эти запросы идут параллельно и параллельно приходят обратно.
За какую-то долю секунды запрос от этого сервера-сборщика доходит до десятка серверов, и приходят ответы. Все это собирается. Как только приходит последний ответ и формируется финальный результат, он идет наверх, и генерируется страница с новостями.
Вопрос из зала:
Кто является инициатором сбора: тот, кто породил событие, или тот, кто читает свою страничку «Новости»?
Павел Дуров:
Тот, кто читает.
Вопрос из зала:
При генерации новостей у вас используются различные фильтры, а также есть ограничения (например, 50 последних новостей). Эти фильтры участвуют в запросе в базу данных? Или фильтрация происходит в самом конце, когда все данные получены большой пачкой, и после этого вы выбираете только те данные, которые запросил пользователь.
Павел Дуров:
Разумеется, участвует.
Олег Илларионов:
Только без базы данных. Новости затрагивают базу данных, но в целом там код на "Си".
Вопрос из зала:
Когда вы говорите про базу данных, что вы имеете в виду?
Олег Илларионов:
Да, по сути, код на "Си" – это и есть база данных.
Вопрос из зала:
Базы данных как таковой у вас нет?
Олег Илларионов:
Нет, у нас есть MySQL, конечно. Но в новостях он участвует в меньшей степени.
Вопрос из зала:
Ограничение – последние 50 новостей. Если запрос делается на различные серверы (пользователи находятся на разных серверах), мы заранее не знаем, сколько новостей получим. Как вы поступаете здесь?
Олег Илларионов:
Приходит больше новостей – мы отсекаем. Очень много где приходится так поступать. Это касается не только новостей.
Например, надо показать случайных участников в группе. В этом случае мы берем захватом, кэшируем memcached и вытаскиваем только часть. Точнее, вытаскиваем все, отсекаем и отдаем только часть. Так будет быстрее.
Павел Дуров:
У нас именно 50 новостей? По-моему, нет.
Олег Илларионов:
Да, это, по-моему, давно было. Сейчас больше.
Вопрос из зала:
Вы не кэшируете дополнительно уже готовый сформированный список последних новостей? Чтобы если пользователь через 5 минут нажмет F5, снова не запрашивать?
Олег Илларионов:
Если честно, я не помню.
Павел Дуров:
Да, мы это делаем. Только не за недавнее время, а за те отрезки времени, которые когда-то происходили (полдня, день назад и так далее). Если бы мы кэшировали за недавнее время, тогда бы нам не удалось эффективно группировать. Пользователь загрузил две фотографии, потом еще две фотографии через час. Вы же всегда видите это одним блоком, а не отдельными.
Вопрос из зала:
Как устроен анкетный поиск? Параметры – город, область…
Павел Дуров:
Спасибо за вопрос. На самом деле, это наша гордость. Поиска по такому количеству критериев по пользовательской базе в десятки миллионов человек нигде нет. Там есть такие параметры, как «сейчас на сайте». При этом вы можете посмотреть, кто находится на сайте из людей, которые заканчивали кафедру такого-то факультета такого-то вуза в таком-то году или обитают в таком-то районе или около станции метро. Это достаточно сумасшедшие вещи.
Итак, это снова поиск, который разработан лучшими умами. Я могу назвать этих людей, но…
Вопрос из зала:
Назовите.
Павел Дуров:
Это чемпионы мира Андрей Лопатин, Николай Дуров. Сейчас к нам присоединились Алексей Левин, Арсений Смирнов, Олег Давыдов, Юрий Петров.
На самом деле, мы не скрываем имена наших разработчиков, не боимся какой-то утечки информации. Их периодически пытаются переманить ребята из компаний Google и Яндекс. Однако у нас лучшие условия работы, по крайней мере, в Петербурге точно: и место, и компенсации, и премии, и атмосфера. Я думаю, что можно быть спокойным.
Вопрос из зала:
А как вы "общаетесь" с кодом на "Си"?
Павел Дуров:
Это нереляционная база данных.
Олег Илларионов:
Вы спросили, как мы с ними взаимодействуем. Мне кажется, это очень интересный момент. Я узнал об этом на собеседовании какое-то время назад. Меня поразил такой подход, потому что мне в голову такое бы никогда в жизни не пришло.
Очень просто можно общаться с кодом на "Си". Пишется демон, который работает по интерфейсу memcached. Общение с ним идет, как с обычным memcached. Это очень просто. Это интегрируется в PHP, в другие языки и позволяет держать всю систему в каком-то едином формате.
Вопрос из зала:
Получается, что у вас действительно сложные выборки хотя бы для тех же новостей. Нельзя же сложные выборки построить просто на неких значениях.
Олег Илларионов:
Просто в ключе пишутся специальные символы. Это не SQL, но это специальный ключ, который, естественно, не является аналогом ключа в memcached. По сути, это запрос. Но не SQL. Это нереляционная база данных.
Павел Дуров:
У нас до сих пор нет универсальной системы хранения данных. Для новостей пишется отдельный "софт", узкоспециализированный, заточенный именно под эти задачи, изначально рассчитанный на определенный род запросов. Не любой запрос туда можно отправить.
Вопрос из зала:
Не так давно я прочитал новость о том, что у вас появилась такая функция, как мобильное позиционирование. Оно наверняка должно было работать по координатам базовой станции. Где вы взяли базу данных координат базовых станций и соответствие их кодировкам?
Павел Дуров:
У нас нет этой базы данных. Я думаю, что это новость одного из операторов связи.
Вопрос из зала:
Нет. У вас наверняка это работает через базовую станцию. Я правильно понимаю?
Павел Дуров:
У нас есть сервис геолокации, который мы запустили в августе.
Вопрос из зала:
Он связан с координатами базовых станций, с кодами базовых станций?
Олег Илларионов:
Нет, с сотовой связью он никак не связан. Используют GPS в телефоне, в iPhone.
Павел Дуров:
Да, используются обычные API, которые предоставляются такими устройствами.
Вопрос из зала:
Хорошо. Если хотите связать – обращайтесь.
Вопрос из зала:
Главный поставщик серверов для ВКонтакте в Санкт-Петербурге. Расскажите про открытие дата-центров. Когда это случится?
Павел Дуров:
Они открываются в Ленинградской области.
Вопрос из зала:
Когда?
Павел Дуров:
Мы надеемся, весной сделаем пару новых дата-центров. Один на 5 тысяч серверов, другой на 7 тысяч серверов.
Вопрос из зала:
А сейчас их сколько?
Павел Дуров:
Более десяти тысяч.
Вопрос из зала:
Какие операционные системы вы используете на серверах?
Павел Дуров:
Linux.
Вопрос из зала:
Везде Linux?
Павел Дуров:
Да.
Вопрос из зала:
Вы используете какое-то решение или все полностью самостоятельно реализовано?
Павел Дуров:
Самостоятельно.
Вопрос из зала:
Можно подробнее? Серверов-то огромное количество.
Павел Дуров:
Я думаю, это серьезный вопрос, на который я в деталях сейчас не отвечу. Есть скрипт, который отлеживает все серверы. Все серверы отслеживают информацию о текущем состоянии. Все это собирается, есть красивый интерфейс у сисадминов. Я сам помогал им его сверстать. При любых дисбалансах сразу присылаются sms.
Там все сделано достаточно брутально. Нет каких-то очень удобных изысков, поэтому мы не беремся все это публиковать в общий доступ для использования. Это очень узкоспециализированные вещи. Нашим сисадминам так оказалось удобно. Они, кстати говоря, очень не любят готовые универсальные решения именно в силу их избыточности. Очень много всего, что им не нужно.
Вопрос из зала:
Сисадмины разработали инструмент для самих себя?
Павел Дуров:
Да.
Вопрос из зала:
Правда ли, что у них нет как такового нагрузочного тестирования? То есть они все тестируют – выкатывают для одной тысячной пользователей. У вас есть какое-то нагрузочное тестирование?
Олег Илларионов:
Все абсолютно так же, за исключением отдельных вещей. Выкатывается. Вы, наверное, замечали, что в новостях было написано, что первым десяти тысячам – такое-то нововведение.
Вопрос из зала:
Часто у вас ломаются, выходят из строя жесткие диски на серверах?
Павел Дуров:
Очень часто.
Вопрос из зала:
Может быть, какие-нибудь цифры?
Олег Бунин:
10 тысяч серверов. Каждый день – десяток.
Павел Дуров:
Порядок такой.
Вопрос из зала:
Вопрос насчет тестирования функционала на какой-то части пользователей. В каком месте вашей системы (на серверах front-end, back-end или где-то еще) вы разделяете пользователей на «тестовых» и продакшн-пользователей, и каким образом?
Олег Илларионов:
Если id меньше…
Павел Дуров:
На серверах front-end пользователи отсекаются очень редко. Когда надо максимально быстро подняться из состояния, когда сайт "упал" (у нас была пара таких случаев, когда отключали электричество), и memcached, соответственно, обнулился, данных нет. Надо долго-долго восстанавливать. Тогда имеет смысл заниматься чем-то на серверах front-end. Пускать не всех пользователей, так как если они придут все, все снова "упадет".
Вопрос из зала:
Безжалостно каждого второго?
Павел Дуров:
Например, да. Еще на серверах front-end мы занимались такого рода деятельностью, когда были DDoS-атаки (весной 2007-го года, например), нам приходилось этим заниматься.
Олег Илларионов:
Теперь вопрос от меня. Недавно был доклад про DDoS. Мне хотелось осветить эту тему более подробно, потому что это очень интересно, как мне кажется. Каким способом можно бороться с DDoS-атакой? Что можно сделать, когда DDoS достигает гигатских масштабов?
Павел Дуров:
Честно говоря, не очень люблю вспоминать это время. Нас тогда забрасывали DDoS-атаками больше, чем всех остальных в Рунете. В тот момент, когда мы были сайтом на трех серверах, проходящая полоса мусорных пакетов достигала полутора гигабит в секунду. Когда мы стали искать статьи на эту тему в 2007-м году, мы, по сути, ничего не смогли найти. Нам приходилось самим писать и скрипты, которые анализируют логи, Real Time, анализируют запросы, выявляют закономерности регулярными выражениями и перезагружают nginx с новой конфигурацией с (неразборчиво).
Потом это перестало спасать. Надо было работать на уровне switch’ей. Потом и это перестало спасать. Надо было работать на уровне операторов связи. Последнее, правда, было конечной точкой. Нам удалось с этим бороться, но, как я говорю, не очень приятно вспоминать то время. Давайте перейдем к чему-нибудь позитивному.
Вопрос из зала:
У вас так много серверов... Сколько же администраторов их обслуживает, и чем они занимаются?
Олег Илларионов:
Когда я пришел, было два. Сейчас уже четыре.
Павел Дуров:
На самом деле, есть люди, которые находятся в дата-центрах. Это дежурные инженеры, которые постоянно меняют сломавшиеся диски и следят за базовым состоянием серверов (за их температурой и так далее). Их много. Они работают по сменам. В любом дата-центре они есть в достаточном количестве.
Есть сисадмины, которые работают у нас, они находятся не в дата-центрах непосредственно. Они мониторят всю эту ситуацию. Их было трое, когда Олег Илларионов присоединился к нам весной или летом этого года. Сейчас их пятеро. В общем-то, хватает. Это люди, которые не смогли приехать сегодня сюда, так как они очень сильно погружены в мониторинг, во всю эту ситуацию. Пяти человек хватает.
Вопрос из зала:
Скажите, что происходит с пользовательскими данными, когда пользователь подает команду на удаление, например, текста или фотографии? Они удаляются сразу или через какое-то время?
Павел Дуров:
Текстовые данные – зависит от того, что это.
Вопрос из зала:
Комментарии.
Павел Дуров:
Комментарии удаляются сразу. Они записываются в memcached на 15 минут на тот случай, если пользователь захочет восстановить комментарий. Фотографии удаляются сходным образом, однако сам файл  с фотографией будет удален не сразу…
Вопрос из зала:
Многие заметили, что они доступны по прямым ссылкам еще долгое время.
Павел Дуров:
Сам файл по прямой ссылке останется доступным, это правда.
Вопрос из зала:
Он будет храниться вечно?
Павел Дуров:
Пока не произойдет какая-то работа над этим сервером, зачистка.
Вопрос из зала:
Например, я удалил какую-то фотографию полгода назад, она до сих пор доступна по прямой ссылке.
Павел Дуров:
Это правильно. Это происходит, чтобы в работе диска не было лишней расфрагментации.
Вопрос из зала:
А как же приватность?
Павел Дуров:
Ссылки на файл удалены, в Контакте…
Вопрос из зала:
Если кто-то перехватил прямую ссылку?
Павел Дуров:
Если кто-то перехватил прямую ссылку, то это вопрос не сайта vkontakte.ru.
Вопрос из зала:
А к кому же?
Павел Дуров:
Вы можете этот файл разместить на любом хостинге.
Вопрос из зала:
Нет, любые хостинги удаляют файлы, когда пользователи просят.
Олег Бунин:
Нет, это не так.
Павел Дуров:
Это не так.
Олег Бунин:
Почти все не удаляют. Это нормально.
Вопрос из зала:
Я удалил фотографию, я хочу, чтобы она вообще исчезла.
Вопрос из зала:
Если используются такие "тяжелые" вещи, как модуль Apache и запросы, значит, надо распределять нагрузку на множество серверов. Как вы умудряетесь ее балансировать?
Павел Дуров:
Глобальный вопрос.
Вопрос из зала:
IPVS, или nginx, или начиная с Round Robin это все идет?
Павел Дуров:
Nginx балансирует. При этом есть отдельные серверы, которые исполняют только скрипты, связанные с личными сообщениями, отдельные – только с профилями, отдельные – с новостями и так далее. Соответственно, если из-за каких-то проблем с базой данных или еще с чем-то забиваются Apache, связанные с новостями, то все остальное при этом работает.
Вопрос из зала:
А как это все идет между 32-мя серверами front-end?
Олег Илларионов:
Никак. IP-адрес. Есть домен, есть NS-сервера, есть IP-адреса. 32 IP-адреса.
Вопрос из зала:
Вчера я задавал такой же вопрос представителю Facebook, сейчас я задам его и вам. Кто принимает решение о том, что тот или иной функционал все-таки едет в релиз? Кто несет ответственность за полученное качество продукта?
Олег Бунин:
Можно рассказать про пару новинок, сдать нам какую-нибудь сенсацию. Чего нам ждать в ближайшее время?
Павел Дуров:
Решения такого рода принимаются мной и еще одним человеком. Его зовут Андрей Рагозин. Это директор по разработке. Он сегодня очень хотел быть здесь, но заболел. Ответственность несем мы и, соответственно, тот разработчик, который это сделал.
Я думаю, тот тренд, который сейчас выходит, это открытие ВКонтакте = интеграция ВКонтакте с другими сайтами, курс на сотрудничество с другими ресурсами. Все это будет развиваться еще год-два минимум, я думаю, и достигнет какого-то максимума.
Вопрос из зала:
У вас пять системных администраторов, которые очень заняты мониторингом, наблюдением. Как вы их отпускаете в отпуск, когда они спят, как они дублируют друг друга?
Павел Дуров:
Если заниматься арифметикой, то при 24 часах в сутках 5 человек – это вполне сносно. Естественно, они координируют отпуска, не уходят в отпуск все сразу. Всегда есть как минимум 3 человека. Делим 24 часа на 3...
Вопрос из зала:
Все пять человек взаимозаменяемы?
Павел Дуров:
Мы стремимся к этому. Сейчас это не совсем так.
Вопрос из зала:
Sms в неслужебное время приходят?
Павел Дуров:
Разумеется.
Олег Илларионов:
Я даже могу рассказать интересную историю. Однажды целый день мучил одного из наших системных администраторов, потом пошел к товарищу в соседний кабинет, смотрю – он тоже его целый день мучает. Понял, что наши администраторы, на самом деле, многопоточные.
Вопрос из зала:
Расскажите самое начало истории ВКонтакте.
Павел Дуров:
С удовольствием. На самом деле, так как меня интересовали веб-проекты, то, наверное, с первого курса университета, я откладывал деньги на хостинг. При этом мне очень помогали потанинские стипендии (по-моему, их было 3 или 4). Были неплохие суммы – полторы тысячи рублей. Президентские, Правительственные стипендии. Набиралось определенное количество средств. Я мог оплачивать услуги хостеров.
В итоге к концу 4-го или 5-го курса я накопил на выделенный сервер, купил его. Я еще подрабатывал, статьи писал. Купил сервер, поставил, оплачивал. ВКонтакте первоначально крутился на этом сервере. Там еще были другие проекты.
Потом, когда проект развился до посещаемости в 10 тысяч человек в день и понадобился еще один сервер, то инвесторы заинтересовались очень сильно. Я помню, как мы везли первые два сервера. Сами их устанавливали, потом где-то ночь я пытался устроить взаимосвязь между сервером базы данных и сервером со скриптами.
Вопрос из зала:
Они еще в бою?
Павел Дуров:
Они хранятся в дата-центре. Они не в бою. Директор дата-центра говорил, что он хранит их для какого-то музея.
Олег Бунин:
Спасибо, Павел.

Комментарии

3
# 20 декабря 2012 16:26
Где видео?

Только пользователи могут оставлять комментарии

Возможно, вам будет интересно:

Николай Кондратов

Николай Кондратов

Технический руководитель почтовой службы Mail.ru.

На примере "Mail.ru" рассмотрен вариант переноса и усовершенствования службы поддержки высоконагруженного сервиса.

Андрей Сас

Андрей Сас

Андрей заведует email-рассылками в Badoo, а также консультирует российские и зарубежные интернет-проекты по вопросам email-маркетинга. Ранее работал в «МедиаМире» (РБК).

Впервые в Рунете Андрей Сас говорит о ста миллионах писем каждый день.

Андрей Смирнов

Андрей Смирнов

Андрей Смирнов – руководитель разработки, разработчик, фанат Go, Python, DevOps и больших нагрузок. Руководил разработкой backend-сервисов в стартапе Qik, после его покупки продолжил работать в компаниях Skype и Microsoft.

Представители компании "Skype" рассказывают о решардинге Redis «наживую».