В преддверии cибирской HighLoad++ мы побеседовали с одним из наших спикеров — Юрием Насретдиновым, расспросив его о том, хорошо ли работается во ВКонтакте, одновременно приоткрывая завесу тайны над внутренней кухней социальной сети.
В рамках же самой конференции Юрий будет рассказывать о том, как социальная сеть вставляет данные в ClickHouse с десятков тысяч серверов, чего в текущей беседе мы коснулись лишь вскользь.
— Расскажи, пожалуйста, о своей работе?
На текущий момент я работаю во ВКонтакте. Правда, не так уж долго — с начала этого года. Занимаюсь видеоинфраструктурой и инфраструктурой сайта. Сайт в основном написан на PHP, и я разрабатываю сервисы и утилиты на PHP и Go.
— Что побудило тебя пойти работать в VK?
Меня пригласили работать в VK. И я подумал — почему бы и нет? ВКонтакте — это самый высоконагруженный сайт России и один из самых больших сайтов во всём интернете. Мне всегда было интересно поработать над таким большим проектом — принять участие в разработке сайта и мобильного приложения. Возможно, даже повлиять на их развитие, как-нибудь улучшить. Наверное, это самый мотивирующий фактор — ВКонтакте все знают и используют. И это очень приятно работать над таким продуктом, помогать ему становиться лучше.
— До этого тебе приходилось сталкиваться с чем-то похожим по масштабу?
Да, около пяти лет я работал в компании Badoo на похожей должности — в разработке инфраструктуры. Но нагрузки в VK на порядок больше.
— Возникли ли какие-то проблемы при переходе в VK?
Офис ВКонтакте находится в Санкт-Петербурге. А я до этого жил в Подмосковье, поэтому мне пришлось переехать. Сам переезд прошёл достаточно легко — компания помогает. Но в Санкт-Петербурге бывает очень холодно зимой. Наверное, это было самым тяжелым, с чем пришлось столкнуться.
— Нет ощущения, что жизнь осталась где-то внутри МКАД?
Поначалу мне действительно так казалось, несмотря на то, что я и ранее бывал в других городах России, помимо Москвы. Но на самом деле мне Санкт-Петербург нравится, наверное, даже больше, чем Москва. Он более спокойный — меньше людей, они никуда не торопятся, и это приятно.
— А с точки зрения используемых в работе технологий — что было для тебя принципиально новым?
ВКонтакте очень большой, соответственно, здесь действительно есть некоторые нюансы, с которыми я раньше не сталкивался. Например, в Badoo практически нет очень популярных профилей, на которые заходит значимый процент людей. У ВКонтакте такое есть, как есть и целый ряд интересных инструментов, позволяющих быстро масштабировать очень популярные аккаунты.
Кроме того, ВКонтакте отличается тем, что по историческим причинам здесь практически всё своё. В отличие от, к примеру, Badoo, который в основном использует MySQL и Memcache (плюс свои сервисы), ВКонтакте использует свои базы данных и даже свою версию Memcache. Разработчики VK могли позволить себе создавать более высокоэффективные сервисы (на фоне того же MySQL), которые хорошо работают на таком огромном масштабе. Большинство готовых инструментов без напильника нельзя использовать в инфраструктуре, включающей десятки тысяч серверов, как у VK, и это создает существенные трудности.
— Сложно ли было быстро вникнуть в такие «внутренние» инструменты?
Я работаю в отделе инфраструктуры, а здесь не так много нестандартных вещей. В основном это даже более стандартный стек, чем тот, с которым я работал ранее. Но если бы я работал, например, в отделе, который занимается фичами на back-end, то там, конечно, пригодились бы знания того, как в принципе строится Highload-система, но не конкретные детали. В таких ситуациях помогают страницы для новых сотрудников, описания внутренних механизмов.
В принципе, ощутимая часть инфраструктуры VK была выложена Павлом Дуровым в open source вместе с документацией. Любой желающий может ознакомиться с ней, почитать, как это все работает. Но, конечно, намного легче это воспринимать в контексте того, как оно используется внутри. Вы приходите и начинаете делать задачи, постепенно изучая то, что нужно для их решения. Смотрите, как это уже сделано, и делаете так же. И этого достаточно. Ведь даже если вы осилите прочтение всей документации по инфраструктуре VK, пока вы не начнете это использовать, скорее всего, не поймете, как это все работает в деталях.
Замечу, что все вышесказанное касается моего отдела (в других может быть иначе).
— Есть ли у тебя внутри VK какая-то специализация? В решении каких задач ты успел поучаствовать?
Специализации как таковой нет. Делаю то, что в данный момент требуется.
Я работаю в отделе, деятельность которого затрагивает разные части инфраструктуры социальной сети, а это огромный проект (чтобы полностью охватить пониманием устройство VK, нужно много времени).
Например, я участвовал в частичном переходе на PHP7. Это в принципе касается всего сайта, но в то же время не относится к каким-то конкретным деталям.
Еще пример — проблема со сбором логов, для решения которой мы использовали ClickHouse. Об этом я как раз и буду рассказывать на HighLoad++.
— Дадим небольшой спойлер — в чем была особенность этой проблемы?
Загвоздка была в сочетании двух факторов: с одной стороны, у нас пишется очень много логов, а с другой — нам их нужно быстро просматривать.
Существующая система по сути не умела хранить большие объемы данных, быстро отдавая только свежую информацию. Чтобы получить историю, нужно было вручную выполнять очень тяжелые запросы.
— Читателям, возможно, будет интересно, почему для решения использовалась именно колоночная ClickHouse?
Колоночная — из-за специфики работы. Зачастую при поиске информации в логах нам нужно фильтровать по серверу или пользователю. Если речь идет о чтении с диска, колоночная БД позволяет многократно ускорить чтение (на фоне строчной), что достигается за счет чтения только нужных колонок и более эффективного поколоночного сжатия. К тому же, ClickHouse хорошо распараллеливает запросы по ядрам. Т.е. в отличие от классических баз данных он может выполнять один запрос даже на целом кластере, используя почти все ресурсы как процессора, так и диска. Таких баз данных, тем более бесплатных, не очень много, если они вообще есть. ClickHouse подошел для задачи хранения логов очень хорошо.
Отмечу также, что ClickHouse и до моего прихода использовался в VK админами в довольно узкоспециализированной задаче — в качестве back-end инструмента Grafana. Это система сбора данных и построения графиков по серверам. Правда, было развернуто всего несколько серверов с ClickHouse, то есть по сути для программистов он был недоступен.
После того, как было принято решение об использовании ClickHouse для хранения логов, я помогал создавать соответствующую инфраструктуру, чтобы это было для всех удобно и понятно.
— Используются ли в VK в каком-то значимом количестве сторонние решения (помимо упомянутых выше)?
Конечно, используются. Например, Linux, на котором всё это крутится. Не стоит преуменьшать долю работы, которую за нас делает операционная система.
Как ни странно, используется PHP. У нас есть самописный движок под названием KittenPHP, который транслирует PHP в C++, но для ряда задач, в том числе в продакшене, применяется и обычный PHP.
Используется nginx. До сих пор в некоторых местах задействован MySQL, но постепенно мы от него отказываемся — используем самописную базу данных.
— А как построен процесс разработки?
Я не вижу больших отличий процессов в VK от того, что принято в индустрии. У нас есть баг-трекер, отделы, которые занимаются разной функциональностью, отвечая за свою часть проекта; есть спринты, ответственные за компоненты и т.д.
— Вместо итогов можно ли обозначить направление, в котором развивается отдел, в котором ты работаешь?
Насколько я знаю, раньше отдел, в котором я сейчас работаю, состоял из 1-2 человек.
И заниматься инфраструктурой в том виде, в каком это делается сейчас (наверное, это похоже на DevOps), начали не так давно. Поэтому пока рано говорить о планах — мы решаем существующие проблемы, и пока работы у нас хватает. А дальше посмотрим.
Подробнее о внутренностях VK, использовании ClickHouse и других деталях Юрий расскажет в своём докладе на сибирском HighLoad++ 25-26 июня. Также вас наверняка заинтересуют и вот эти доклады:
- Репликация данных из MySQL в ClickHouse в реальном времени для плавной миграции аналитики из MySQL в ClickHouse (Владислав Клименко, Валерий Панов)
- Учимся немного ранжировать (Андрей Аксенов)
- Эволюция инструментов и сервисов в Badoo: наши критерии выбора и что из этого получилось (Антон Турецкий)
Автор: olegbunin