Платформа
Debian Linux — основная операционная система nginx — балансировка нагрузки PHP + XCache Apache + mod php memcached MySQL Собственная СУБД на C, созданная «лучшими умами» России node.js — прослойка для реализации XMPP, живет за HAProxy Изображения отдаются просто с файловой системы xfs ffmpeg — конвертирование видео
Статистика
95 миллионов учетных записей 40 миллионов активных пользователей во всем мире (сопоставимо с аудиторией интернета в России) 11 миллиардов запросов в день 200 миллионов личных сообщений в день Видеопоток достигает 160Гбит/с Более 10 тысяч серверов, из которых только 32 — фронтенды на nginx (количество серверов с Apache неизвестно) 30-40 разработчиков, 2 дизайнера, 5 системных администраторов, много людей в датацентрах Каждый день выходит из строя около 10 жестких дисков
Архитектура
Cервера многофункциональны и используются одновременно в нескольких ролях: Перебрасывание полуавтоматическое Требуется перезапускать daemon''ы Генерация страниц с новостями (микроблоги) происходит очень похожим образом с Facebook, основное отличие — использование собственной СУБД вместо MySQL При балансировке нагрузки используются: Взвешенный round robin внутри системы Разные сервера для разных типов запросов Балансировка на уровне ДНС на 32 IP-адреса Большая часть внутреннего софта написано самостоятельно, в том числе: Собственная СУБД (см. ниже) Мониторинг с уведомлением по СМС Автоматическая система тестирования кода Анализаторы статистики и логов Мощные сервера: 8-ядерные процессоры Intel (по два на сервер) 64Гб оперативной памяти 8 жестких дисков (соответственно скорее всего корпуса 2-3U) RAID не используется Не брендированные, собирает компания ТехноОкта Вычислительные мощности серверов используются менее, чем на 20% Сейчас проект расположен в 4 датацентрах в Санкт-Петербурге и Москве, причем: Вся основная база данных располагается в одном датацентре в Санкт-Петербурге В Московских датацентрах только аудио и видео В планах сделать репликацию базы данных в другой датацентр в ленинградской области CDN на данный момент не используется, но в планах есть Резервное копирование данных происходит ежедневно и инкрементально.
База данных на C
Разработана «лучшими умами» России, победителями олимпиад и конкурсов топкодер; озвучили даже имена этих «героев» Вконтакте: - Андрей Лопатин
- Николай Дуров
- Арсений Смирнов
- Алексей Левин
Используется в огромном количестве сервисов: - Личные сообщения
- Сообщения на стенах
- Статусы
- Поиск
- Приватность
- Списки друзей
Нереляционная модель данных Большинство операций осуществляется в оперативной памяти Интерфейс доступа представляет собой расширенный протокол memcached, специальным образом составленные ключи возвращают результаты сложных запросов (чаще всего специфичных для конкретного сервиса) Хотели бы сделать из данной системы универсальную СУБД и опубликовать под GPL, но пока не получается из-за высокой степени интеграции с остальными сервисами Кластеризация осуществляется легко Есть репликация
Аудио и видео
Эти подпроекты являются побочными для социальной сети, на них особо не фокусируются. В основном это связанно с тем, что они редко коррелируют с основной целью использования социальной сети — общением, а также создают большое количество проблем: видеотраффик — основная статья расходов проекта, плюс всем известные проблемы с нелегальным контентом и претензиями правообладателей. Медиа-файлы банятся по хэшу при удалении по просьбе правообладателей, но это неэффективно и планируется усовершенствовать этот механизм. 1000—1500 серверов используется для перекодирования видео, на них же оно и хранится.
Интеграция со внешними ресурсами Во Вконтакте считают данное направление очень перспективным и осуществляют массу связанной с этим работы. Основные предпринятые шаги: максимальная кроссбраузерность для виджетов на основе библиотек easyXDM и fastXDM; кросс-постинг статусов в Twitter, реализованный с помощью очередей запросов; кнопка «поделиться с друзьями», поддерживающая openGraph теги и автоматически подбирающая подходящую иллюстрацию (путем сравнивание содержимых тега <title> и атрибутов alt у изображений, чуть ли не побуквенно); возможность загрузки видео через сторонние видео-хостинги (YouTube, RuTube, Vimeo, и.т.д.), открыты к интеграции с другими.
Интересные факты
Процесс разработки близок к Agile, с недельными итерациями Ядро операционной системы модифицированно (на предмет работы с памятью), есть своя пакетная база для Debian Фотографии загружаются на два жестких диска одного сервера одновременно, после чего создается резервная копия на другом сервере Есть много доработок над memcached, в.т.ч. для более стабильного и длительного размещения объектов в памяти; есть даже persistent версия Фотографии не удаляются для минимизации фрагментации Решения о развитии проекта принимают Павел Дуров и Андрей Рогозов, ответственность за сервисы — на них и на реализовавшем его разработчике Павел Дуров откладывал деньги на хостинг с 1 курса.
Итоги
В целом ВКонтакте развивается в сторону увеличения скорости распространения информацию внутри сети. Приоритеты поменялись в этом направлении достаточно недавно, этим обусловлено, напимер, перенос выхода почтового сервиса Вконтакте, о котором очень активно говорили когда появилась возможность забивать себе текстовые URL. Сейчас этот подпроект имеет низкий приоритет и ждет своего часа, когда они смогут предложить что-то более удобное и быстрое, чем Gmail. |