Пример архитектуры, используемой на высоконагруженном видео портале

В этой статье мне немного хотелось бы рассказать про архитектуру, которую мы используем в нашей компании. Проект, над которым я работаю, является видео-порталом с большим количеством посещений в день (16 миллионнов уникальных пользователей). Ну вот, перейдет к архитектуре:
Вебсервера
На данном проекте используется 17 вебсерверов, использующих Apache. Код проекта написан на PHP. Сервера выбираются случайным образом (у нас пока нет лоад балансера, но мы идем к этому), поэтому нагрузка на всех серверах приблизительно одинаковая, если говорить про CPU (8 ядер), то это около 40% в пиковое время. На каждом сервере также имеется локальная версия MySQL для счетчиком просмотра видео. Для PHP используется eAccelerator.

Базы данных
У нас имеется два кластера баз данных MySQL, каждый содержит определынный набор таблиц. Первый содержит: 1 мастер и 4 слейва (нагрузка в пиковое время 30%); Второй: 1 мастер и 6 слейвов (нагрузка в пиковое время 25%). Слейвы успешно синхронизируются с мастером, на который происходит запись данных. Слейвы служат только для чтения. Сервера выбираются случайным образом (лоад балансер не помещал бы). На каждом сервере так же имеется по одному инстансу Sphinx, который активно используется для поиска.

Кэширование
Для кэширования используется Memcached, который так же разнесен на 4 сервера. Каждый сервер содержит по три инстанции Memcache по 2 Гб каждый. Первая инстанция используется для кеширования данных, полученных с первого кластера БД. Вторая соответственно для второго кластера БД. А третью, мы стали недавно использовать для HTML кеширования страниц, что дало ощутимый прирост производительности, и сняло нагрузку c вебсерверов. Первая инстанция почти всегда заполнена, и мы наблюдаем постоянные evictions, но мы над этим работаем. Нагрузка на серверах около 10% в пиковое время.

Медиа сервера
Не могу сказать точно, сколько серверов используется, но порядка 45, которые находятся в Штатах и Нидерландах. Есть мастер сервер, с которым остальные синхронизируются, но слейвы содержат не все файлы, а только те, что недавно использовались. Если запрошенного файла нет на слейве, он перенаправляет на мастера, а сам тем временем скачивает этот файл себе.

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

Жду вопросов, критику, и обсуждения каждого пункта.


0 комментариев

avatar
а ссылку на проект можно увидеть?)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.