Платформа
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 теги і автоматично підбирає підходящу ілюстрацію (шляхом порівнювання умістів тега і атрибутів alt у зображень, мало не побуквенно);
- можливість завантаження відео через сторонні відео-хостинги (YouTube, RuTube, Vimeo, і.т.д.), відкриті до інтеграції з іншими.
Цікаві факти
- Процес розробки близький до Agile, з тижневими ітераціями
- Ядро операційної системи модифікованих (на предмет роботи з пам'яттю), є своя пакетна база для Debian
- Фотографії завантажуються на два жорсткі диски одного сервера одночасно, після чого створюється резервна копія на іншому сервері
- Є багато доробок над memcached, в.т.ч. для більш стабільного і тривалого розміщення об'єктів в пам'яті-є навіть persistent версія
- Фотографії не видаляються для мінімізації фрагментації
- Рішення про розвиток проекту беруть Павло Дуров та Андрій Рогозів, відповідальність за сервіси - на них і на реалізовані його розробника
- Павло Дуров відкладав гроші на хостинг з 1 курсу.
Підсумки
В цілому ВКонтакте розвивається у бік збільшення швидкості поширення інформацію всередині мережі. Пріоритети помінялися в цьому напрямку досить недавно, цим обумовлено, напимер, перенесення виходу поштового сервісу Вконтакті, про який дуже активно говорили коли з'явилася можливість забивати собі текстові URL. Зараз цей підпроект має низький пріоритет і чекає свого часу, коли вони зможуть запропонувати щось більш зручне і швидке, ніж Gmail.
Джерела:
- insight-it.ru - архітектура Вконтакте;
- d3scene.ru - архітектура ВК;
- vkbag.ru - Павло Дуров розповів про архітектуру ВКонтакте на HighLoad ++ 2010.
Додатково: