Социальные сети: ВК, Фейсбук, Инстаграм – что лучше использовать


Платформа

Для нас, конечно, особый интерес представляет именно архитектура проекта: как взаимодействуют основные компоненты системы, какие собственные разработки потребовались, какими трюками пришлось воспользоваться. Но прежде, чем перейти к ней, необходимо ознакомиться с базовыми вещами — используемыми технологиями и продуктами.

В качестве основной операционной системы используется Debian Linux — решение, проверенное временем, один из самых старых и стабильных современных дистрибутивов. Для балансировки нагрузки между серверами приложений используется HTTP-сервер nginx, работающий в режиме reverse proxy. В его обязанности входит держать соединение с браузером пользователя и передавать запросы серверам, ответственным за исполнение PHP-кода, а также контролировать попадание результата обратно в браузер. PHP-код исполняется посредством модуля mod_php для Apache — альтернативных вариантов довольно много, особенно на основе протокола FastCGI, но руководство ВКонтакте пошло по более консервативному пути в этом вопросе, воспользовавшись самым проверенным временем решением. Никаких особых систем оптимизации производительности PHP-кода не используется (например, в Facebook написали свой компилятор из PHP в C под названием HipHop), единственной внешней оптимизацией является кэширование оп-кода посредством всем доступного решения XCache.

Ситуация с хранением данных выглядит достаточно размыто: с одной стороны, активно используется собственная система управления базами данных, написанная на C и созданная «лучшими умами» России, с другой — часто упоминалась MySQL в роли основного хранилища. Подробнее про собственную базу данных ВКонтакте я расскажу ниже. Говоря о хранении данных, нельзя не упомянуть о таком важном аспекте, как кэширование часто используемой информации (расположение её в оперативной памяти для быстрого доступа). Для этого используется очень популярный продукт в этой области — memcached. Если ты не слышал: эта система позволяет осуществлять очень простые атомарные операции, такие как расположение и получение произвольных данных по ключу. Основной фишкой является молниеносно быстрый доступ и возможность легкого объединения оперативной памяти большого количества серверов в общий массив для временного хранения «горячих» данных.

Сторонние проекты, не являющиеся ключевыми для ВКонтакте, часто реализуются либо с использованием довольно экзотических решений, либо, наоборот, на самых простых технологиях. Например, сервис мгновенного обмена сообщениями реализован на node.js (подробнее об этой разработке ты можешь прочитать в статье «Серверный JavaScript» в ][ 08/2010) с использованием протокола XMPP aka Jabber (мы еще к нему вернемся). Конвертирование видео реализовано на самой простой и эффективной библиотеке — ffmpeg, на ней же работает очень популярный видео-плеер VLC.

Основные используемые технологии

  • Debian Linux — основная операционная система
  • nginx — балансировка нагрузки
  • PHP + XCache
  • Apache + mod_php
  • memcached
  • MySQL
  • Собственная СУБД на C, созданная «лучшими умами» России
  • node.js — прослойка для реализации протокола XMPP, живет за HAProxy (haproxy.1wt.eu)
  • xfs — файловая система для хранения изображений и отдачи пользователю
  • ffmpeg — конвертирование видео

Популярность ВКонтакте

По данным последних исследований, ВКонтакте является самой популярной соц.сетью с самой платежеспособной аудиторией.

Вконтакте становится все более популярной с каждым днем, ею пользуются уже не только граждане России. Кроме физических лиц, огромное количество интернет-магазинов, салонов красоты, санаториев, гостевых домов и учебных центров имеют специальные аккаунты в этой сети помимо собственных веб-сайтов.

ВКонтакте зарегистрировано около 500 000 000 (пятьсот миллионов) человек. Ежедневно заходит около 100 000 000.

Но даже такая раскрученная соц.сеть подходит не под все виды бизнеса. Группы нужны тем видам бизнеса и в тех нишах, в которых бизнес напрямую взаимодействует с конечным потребителем.

Архитектура

Самым заметным отличием от архитектуры многих других крупных интернет-проектов является тот факт, что сервера ВКонтакте многофункциональны. Т.е. нет четкого разделения на серверы баз данных, файловые серверы и т.д. — они одновременно используются в нескольких ролях. При этом перераспределение ролей происходит в полуавтоматическом режиме с участием системных администраторов. С одной стороны, это оптимизирует эффективность использования системных ресурсов, что хорошо, но с другой — повышает вероятность конфликтов на уровне операционной системы в рамках одного сервера, что влечет за собой проблемы стабильности. Впрочем, несмотря на использование серверов в разных ролях, вычислительные мощности проекта обычно используются менее чем на 20%.

Балансировка нагрузки между серверами происходит по многоуровневой схеме, которая включает в себя балансировку на уровне DNS (домен обслуживается с помощью 32 IP-адресов), а также маршрутизацию запросов внутри системы, причем разные сервера используются для разных типов запросов. Например, генерация страниц с новостями (теперь это принято называть микроблогом) работает по хитрой схеме, использующей возможности протокола memcached по параллельной отправке запросов на получение данных по большому количеству ключей. В случае отсутствия данных в кэше, аналогичный запрос отправляется системе хранения данных, а полученные результаты подвергаются сортировке, фильтрации и отбрасыванию лишнего уже на уровне PHP-кода. Похожим образом этот функционал работает и в Facebook (они недавно обменивались опытом), только вместо собственной СУБД в Facebook используют MySQL.

В стенах ВКонтакте было разработано большое количество софта, который более точно удовлетворяет потребностям проекта, чем доступные opensource и коммерческие решения. Помимо упоминавшейся собственной СУБД у них есть система мониторинга с уведомлением по СМС (Павел сам помогал верстать интерфейс), автоматическая система тестирования кода и анализаторы статистики и логов.

В проекте используется достаточно мощное оборудование, ориентировочно были названы следующие характеристики серверов:

  • 8-ядерные процессоры Intel (по два на сервер, видимо);
  • 64 Гб оперативной памяти;
  • 8 жестких дисков;
  • RAID не используется (репликация и резервное копирование осуществляется на программном уровне).

Примечательно, что сервера не брендированные, а собираются специализированной российской компанией. Сейчас оборудование проекта расположено в 4 датацентрах в Санкт-Петербурге и Москве, причем вся основная база данных располагается в питерском датацентре, а в Москове хостится только аудио и видео. В планах сделать репликацию базы данных с другим датацентром в Ленинградской области, а также использовать Content Delivery Network для повышения скорости скачивания медийного контента в регионах.

Многие проекты, сталкивающиеся с большим количеством фотографий, часто изобретают собственные решения по их хранению и отдаче пользователям. Об этом был первый вопрос, заданный Павлу из зала: «Как вы храните изображения?» — «На дисках!». Так или иначе, представители ВКонтакте заявили, что вся эта куча фотографий всех цветов и размеров просто хранится и отдается с файловой системы (используют xfs) большого количества серверов, без дополнительных изысков. Смущает разве что тот факт, что у других крупных проектов такой подход не сработал — наверное, они не знали волшебного слова :).

Не менее волшебной представляется та самая собственная база данных на C. Этому продукту, пожалуй, было уделено основное внимание аудитории, но при этом почти никаких подробностей о том, что он, собственно говоря, собой представляет, так и не было обнародовано. Известно, что СУБД разработана «лучшими умами» России, победителями олимпиад и конкурсов TopCoder, а также что она используется в самых высоконагруженных сервисах ВКонтакте:

  • Личные сообщения
  • Сообщения на стенах
  • Статусы
  • Поиск
  • Приватность
  • Списки друзей

В отличие от MySQL используется нереляционная модель данных, а большинство операций осуществляется в оперативной памяти. Интерфейс доступа представляет собой расширенный протокол memcached. Специальным образом составленные ключи возвращают результаты сложных запросов (чаще всего специфичных для конкретного сервиса).

Система проектировалась с учетом возможности кластеризации и автоматической репликации данных. Разработчики хотели бы сделать из данной системы универсальную СУБД и опубликовать под GPL, но пока не получается из-за высокой степени интеграции с остальными сервисами.

Интересные факты о ВКонтакте

  • Процесс разработки близок к методологии Agile с недельными итерациями (циклами), в рамках которых проходят все этапы разработки: планирование, анализ требований, проектирование, разработка и тестирование.
  • Ядро операционной системы модифицировано (на предмет работы с памятью), есть своя пакетная база для Debian.
  • Фотографии загружаются на два жестких диска одного сервера одновременно, после чего создается резервная копия на другом сервере.
  • Есть много доработок над memcached, в.т.ч. для более стабильного и длительного размещения объектов в памяти; есть даже версия, обеспечивающая сохранность данных.
  • Фотографии не удаляются для минимизации фрагментации.
  • Решения о развитии проекта принимают Павел Дуров и Андрей Рогозов, ответственность за сервисы — на них и на реализовавшем его разработчике.
  • Павел Дуров откладывал деньги на хостинг с 1 курса :).

Особенности Фейсбука

Фейсбук – популярная социальная сеть, созданная несколько лет назад студентом Гарварда. Основная цель данной сети – организация взаимодействия между людьми посредством интернета. Пользователи могут обмениваться сообщениями, фотографиями, видеороликами, музыкой.

Фейсбук стал первой социальной сетью. Его создание потрясло буквально весь мир. Лишь спустя время появился ВК и возник Инстаграм. Отличительными особенностями платформы можно назвать:

  • отсутствие привычных аудиозаписей;
  • запрет на отслеживание статистики посещения страницы.

Остальные функции ничем не отличаются от того же ВК, хотя, скорее, последний является копией рассматриваемой социальной сети. Пользователи Фейсбука могут прослушивать музыку, меняться сообщениями, присылать фотографии, посещать сообщества. Также каждый может создать собственную группу по интересам, собрать аудиторию. Чем Фейсбук отличается от Инстаграмма?

Главная особенность платформы заключается в том, что она всемирно известна. Главное отличие, если хочется найти друга заграницей или попросить помощи, когда потребуется приют за границей.

Подпроекты

Сервисы аудио и видео являются побочными для социальной сети, на них создатели проекта особо не фокусируются. В основном это связано с тем, что они редко коррелируют с основной целью использования социальной сети — общением, а также создают большое количество проблем. Видеотрафик — основная статья расходов проекта, плюс всем известные проблемы с нелегальным контентом и претензиями правообладателей. 1000—1500 серверов используются для перекодирования видео, на них же оно и хранится. Медиа-файлы банятся по хэшу при удалении по просьбе правообладателей, но это неэффективно и планируется усовершенствовать этот механизм. Очевидно, речь идет о разработке более интеллектуального алгоритма распознавания аудио- и видео-контента по тегам, как это, к примеру, реализовано в YouTube, где загруженный видеоролик, нарушающий лицензию, может быть автоматически удален уже через несколько минут после загрузки.

Как известно, некоторое время назад появилась возможность общаться на ВКонтакте через протокол Jabber (он же XMPP). Протокол совершенно открытый и существует масса opensource реализаций. По ряду причин (среди которых проблемы интеграции с остальными сервисами ВКонтакте) было решено за месяц создать собственный сервер, представляющий собой прослойку между внутренними сервисами ВКонтакте и реализацией XMPP протокола. Реализован он на node.js — выбор обусловлен тем, что JavaScript знают практически все разработчики проекта, к тому же это хороший набор инструментов для реализации задачи. Сложным моментом стала работа с большими контакт-листами. У многих пользователей количество друзей ВКонтакте измеряется сотнями и тысячами, высока активность смены статусов: люди появляются и исчезают из онлайна чаще, чем в других аналогичных ситуациях. К тому же необходимо было реализовать тесную интеграцию с внутренней системой обмена личными сообщениями ВКонтакте. В результате на сервисе 60-80 тысяч человек онлайн, в пике — 150 тысяч. TCP/HTTP-балансировщик нагрузки HAProxy обрабатывает входящие соединения и используется для распределения запросов по серверам, а также развертывания новых версий.

При выборе системы хранения данных думали о нереляционных системах хранения данных (в частности, о MongoDB), но в итоге решили воспользоваться привычной MySQL. Сервис функционирует на 5-ти серверах разной конфигурации, на каждом из которых работает код на node.js (по 4 процесса на сервер), а на трех самых мощных — еще и MySQL. Интересной особенностью является отсутствие связи между группами друзей в XMPP с группами друзей на сайте — сделано по просьбе пользователей, которые не хотели, чтобы их друзья из-за плеча видели, в какой группе они находятся.

Важным подпроектом является также интеграция с внешними ресурсами, которую в условиях высоконагруженного сервиса реализовать далеко не так просто. Все чаще на страницах сторонних проектов можно увидеть виджеты «Мне нравится», позволяющими быстро поделиться интересным постом со своими друзьями, а также небольшие блоки «Мы ВКонтакте» с данными о пользователях внутри привязанной группы. Основные шаги, предпринятые в этом направлении, с небольшими комментариями:

  • Максимальная кроссбраузерность для виджетов и IFrame-приложений на основе библиотек easyXDM и fastXDM, обеспечивающих взаимодействие между сторонним ресурсом и программным интерфейсом ВКонтакте. Таким образом была решена проблема кроссдоменного взаимодействия и вопрос работы во всех браузерах.
  • Кросс-постинг статусов в Twitter, реализованный с помощью очередей запросов.
  • Кнопка «поделиться с друзьями», поддерживающая openGraph-теги и автоматически подбирающая подходящую иллюстрацию (путем сравнивания содержимого тега
  • Возможность загрузки видео через сторонние видео-хостинги (YouTube, RuTube, Vimeo, и т.д.).

Особенности Инстаграма

Изначально данная платформа создавалась, чтобы пользователи могли загружать фотографии со своих путешествий или важных событий. Но сервис не стоит на месте. Среди особенностей инстаграма сегодня можно отметить:

  • отправку сообщений. При этом участники платформы могут общаться как текстом, так и голосом;
  • ведение блога. Инстаграм стал продуктивной площадкой для множества блогеров. Они не только пишут информативные посты, но также зарабатывают на ведении блога деньги;
  • создание небольших историй. Истории в Инстаграме – это функция, позволяющая опубликовать фото или видео сроком на сутки, по истечении которых материал исчезнет или станет архивом. Недавно разработчики приложения добавили возможность сохранения историй в актуальном – разделе, представленном на главной странице профиля пользователя.

Нововведением стало создание специального канала. Он называется IGTV. Здесь пользователи могут размещать длительные видеоролики. Введение функции приблизило Инстаграм к такой видеоплатформе, как Youtube.

Не секрет

Завеса тайны насчет технической реализации ВКонтакте была немного развеяна, опубликовано куча интересных аспектов, но все же многие моменты по-прежнему остаются секретом. Возможно, в будущем появится более детальная информация о собственной СУБД ВКонтакте, которая, как оказалось, является ключом к решению всех самых сложных моментов в масштабируемости системы. Сейчас, как бы кто ни относился к ВКонтакте, сервис является очень интересным с точки зрения построения высоконагруженных систем. Все-таки 11 миллиардов запросов в день, высочайший аптайм и почти 100 миллионов пользователей — дорогого стоят.

Что популярнее и что лучше выбрать

Инстаграм, Фейсбук или Вконтакте – что выбрать? Сегодня популярной платформой считается Фейсбук. Это подтвердит множество пользователей сети.

Интересно! Сервис начинает уступать Инстаграму в связи с его развитием, усовершенствованием. Большая часть аудитории постепенно переходит на эту платформу, предпочитая просмотр коротких историй регулярному прокручиванию новостей в ленте Фейсбука.

Второй вопрос вызывает небольшие трудности, так как однозначного ответа нет. Участника сервиса нужно решить, какая платформа лучше для него самого и для чего ему регистрироваться. Если он хочет завести новые знакомства с представителями других стран, то подходящим сервисом станет Фейсбук. Для ведения блога, публикации фотографий, заработка денег стоит зарегистрироваться в Инстаграме.

Наконец, платформа, подходящая для комфортного времяпрепровождения, – это ВК. Выбор зависит от участника.

Рейтинг
( 2 оценки, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]