Архитектура серверов и баз данных ВКонтакте

6 декабря прошёл первый митап VK Tech Talks | Backend, на котором разработчик Алексей Акулович выступил с докладом об архитектуре серверов и баз данных ВКонтакте.

Архитектура серверов и баз данных ВКонтакте, image #1

Алексей работает в команде «ВКонтакте» уже более четырёх лет, и за это время он успел принять участие во множестве проектов, которые так или иначе связаны с мультимедиа и backend.

Архитектура серверов и баз данных ВКонтакте, image #2

Общая архитектура

Обработка запросов начинается с фронтов, которые принимают запрос непосредственно от пользователя. Фронт-запросы делятся на три типа, которые представлены ниже на фотографии.

Архитектура серверов и баз данных ВКонтакте, image #3

Общая реализация фронтов:

Архитектура серверов и баз данных ВКонтакте, image #4

В случае HTTPS-трафика и WSS-соединений на фронтах стоит nginx, с которых принимается запись соединения, а для RTMP был осуществлен переезд на kive — собственный сервер трансляции. Отказоустойчивость машин организована через анонсированные одинаковые IP-адреса для нескольких машин, поэтому при отказе одной из машины не теряются запросы. Для HTTPS-соединений и WSS фронты занимаются дешифровкой потока данных, снимая нагрузку с машин.

За фронтами стоят бекенды — http-сервера на kPHP, которые обрабатывают полученные запросы. Таких серверов у «ВКонтакте» тысячи.

Архитектура серверов и баз данных ВКонтакте, image #5

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

Общая структура распределения нагрузки представлена на фотографии ниже:

Архитектура серверов и баз данных ВКонтакте, image #6

Следующий тип серверов, которые имеются в большом количестве — это cs-сервера. CS — это контент-сервер. Их основная задача заключается в хранении файлов, но они также занимаются обработкой данных.

Архитектура серверов и баз данных ВКонтакте, image #7

Эти сервера зачастую закрываются pu/pp-серверами. PU/PP-сервера нужны для скачивания файлов.

Архитектура серверов и баз данных ВКонтакте, image #8

Зачем и как это работает?

Архитектура серверов и баз данных ВКонтакте, image #9

Для некоторых видов файлов, например, тяжёлых видеозаписей, происходит подача напрямую на cs-сервера.

Помимо pu/pp-серверов существуют sun-сервера, которые являются более эффективными.

Архитектура серверов и баз данных ВКонтакте, image #10

Идея при реализации sun:

Архитектура серверов и баз данных ВКонтакте, image #11

Организация sun-серверов:

Архитектура серверов и баз данных ВКонтакте, image #12

На фотографии ниже представлено расположение cache-серверов, на которых осуществляется хранение мультимедийных файлов:

Архитектура серверов и баз данных ВКонтакте, image #13

Чтобы понимать, с какого cache-сервера отдать файл, нужно как-то определять регион пользователя:

Архитектура серверов и баз данных ВКонтакте, image #14

Как работают cache-сервера?

Архитектура серверов и баз данных ВКонтакте, image #15

В целом получается сближение контента и пользователей, при этим снимается огромная сетевая нагрузка.

Архитектура серверов и баз данных ВКонтакте, image #16

Схема общей архитектуры серверов:

Архитектура серверов и баз данных ВКонтакте, image #17

Базы данных

Почему не базы данных, а движки? — Потому что это не базы данных, а самописные решения, которые создаются «под себя».

Архитектура серверов и баз данных ВКонтакте, image #18

Коротко пробежимся по архитектуре:

Архитектура серверов и баз данных ВКонтакте, image #19

RPC-proxy — это общая шина, всё взаимодействие происходит через неё. При сильном желании можно пойти в движок напрямую, но это крайне нехорошее решение с точки зрения поддерживаемости такой схемы. При этом proxy хранит конфиги, в которых перечислены все кластеры, движки в этих кластерах, на каких машинах и в каких портах они работают.

Архитектура серверов и баз данных ВКонтакте, image #20

Как это работает?

Очень важно, что rcp-proxy работают локально на тех же машинах, на которых запущен код.

Архитектура серверов и баз данных ВКонтакте, image #21

Персистентное хранение данных:

Архитектура серверов и баз данных ВКонтакте, image #22

Репликация данных на движках:

Архитектура серверов и баз данных ВКонтакте, image #23

Шардирование данных в rpc-proxy:

Архитектура серверов и баз данных ВКонтакте, image #24
Архитектура серверов и баз данных ВКонтакте, image #25

Логи и мониторинг

Самый популярный способ собрать логи — это записать их с memcache.
Другой вариант для долгосрочного хранения логов — это движок logs-engine, который много где используется. Самый большой кластер этого движка хранит примерно 600 ТБ запакованных binlogs. Но этот движок довольно старый и имеет некоторые ограничения, которые по-разному исправляются. Одно из решений — это использование ClickHouse.

Архитектура серверов и баз данных ВКонтакте, image #26

Сбор логов в ClickHouse:

Архитектура серверов и баз данных ВКонтакте, image #27

Мониторинг на основе ClickHouse:

Есть две метрики: системные (админские) и продуктовые (разработческие).
Системные (админские) метрики:

Архитектура серверов и баз данных ВКонтакте, image #28

Продуктовые (разработческие) метрики:

Архитектура серверов и баз данных ВКонтакте, image #29

Исходных метрик пишется очень много, примерно 600 миллиардов — 1 триллион в сутки, и при этом хотелось бы их хранить хотя бы пару лет, чтобы иметь возможность строить графики тенденций, изменения сезонов и так далее.

Схема сбора хранения продуктовых метрик:

Архитектура серверов и баз данных ВКонтакте, image #30

Метрики на ClickHouse:

Архитектура серверов и баз данных ВКонтакте, image #31
Подробнее про ClickHouse можно узнать из статьи на «Хабре».

Ссылки

  1. Разработка в надёжной нагруженной среде: 2018.codefest.ru/lecture/1250
  2. Как VK вставляет данные в ClickHouse с десятков тысяч серверов: highload.ru/2018/abstracts/4066
  3. Как переписать с нуля базу данных личных сообщений ВКонтакте и мигрировать на неё без даунтайма: highload.ru/2017/abstracts/3088
  4. Системный администратор Vkontakte. Как? highload.ru/2016/abstracts/2416

Посмотреть полную версию доклада можно в трансляции:

The Brown Room
независимое интернет-издание о социальных сетях и современных технологиях

Автор: Сергей Котов
Корректор: Арсений Метелев

777 views·8 shares