FAQ по архитектуре и работе ВКонтакте

Архитектура

Для распределения нагрузки:

* Бэкенды группируются: general, mobile, api и т.п. Выбирает между ними nginx на фронте.

* Сбор метрик и перебалансировка.

Как устроены sun:

* маршрутизация anycast
* кеширование
* поддержка весов
* можно ставить в регионах
* шардирование по id контента (например, когда 100000 человек запрашивают аватарку одного пользователя)

Базы данных

Называем engines, потому что это не совсем базы данных.

В 2008-2009 использовали MySQL и Memcached, но они не выдержали взрывного роста пользователей. Заменили их на велосипеды.

Типов движков очень много. На каждую задачу — новый тип движка. Очереди, списки, сеты — всё что угодно.

Движки одного типа объединяются в кластеры. Код не знает расположения и размера кластеров. Для этого между серверами и базами есть ещё rpc-proxy:

На каждом сервере есть локальный rpc-proxy, который знает, куда направить запросы и где находятся engines.

Если один engine идёт в другой, то тоже делает это через прокси. Engine не должен знать ничего, кроме себя.

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

При перезапуске движок сначала читает снапшот, восстанавливает из него своё состояние. Потом из него находит offset, по нему дочитывает остаток из бинлога, восстанавливает окончательное состояние.

Результат: репликация данных:

Эта же схема используется для создания бэкапов.

vk-binlog

Логи

Как собираются?

Хранятся в ClickHouse. Чтобы это заработало, приходится локальный rpc-proxy заменить на KittenHouse, а на движке добавлять KittenHouse reverse proxy.

А ещё есть nginx, чтобы получать логи по UDP.

clickhouse-logs

Мониторинг

Есть два типа метрик.

Системные и админские метрики:

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

Эксперимент: собираем метрики на ClickHouse

Деплой

Git, GitLab, TeamCity

PHP:

  1. git pruduction branch
  2. diff файла
  3. записывается в binlog copyfast
  4. реплицируется на сервера через gossip replication
  5. применяется локальными репликами на локальной файловой системе

kPHP:

Движки:

Другие доклады про архитектуру VK