Блог веб-разработчика: в помощь программистам

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

В этой статье мне немного хотелось бы рассказать про архитектуру, которую мы используем в нашей компании. Проект, над которым я работаю, является видео-порталом с большим количеством посещений в день (16 миллионнов уникальных пользователей). Ну вот, перейдет к архитектуре:

Вебсервера

клювокрлллопатый web-разработчик опыт разработки напригскоклтиту mysql базы данных

На данном проекте используется 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 сервера. Они кстати синхронизируются с нашим мастер сервером, на котором хранится весь статический контент.

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

  • Спасибо, очень интересно! Давно интересуюсь архитектурой и конкретными решениями для высоконагруженных проектов. Могли бы вы посоветовать какую-то литературу по этому?

  • Реально книг особо нет, из-за этого стоимость специалистов в данным опытом зашкаливает. Очень часто даже читая про структуру какого либо проекта не получается найти в ней что либо “особенного”, что бы можно было применить в своем. Много мелочей, которые порой сильно влияют.
    Есть конференция HiLoad, но она не всем доступна по цене или по иным причинам.

    В целях самообразования можно прямо здесь придумать проект и обсудить его реализацию.

  • офффтопик несколько: а в чем фича облачного хостинга? решает ли он проблемы с хайлоадом проектами?

  • Облачный хостинг на текущий момент удобен много чем и много для кого:
    для простого проекта – опата по факту пользования ресурсами. т.е. если на сайте посещаемость максимальная вечером, а в остальное время суток 0 человек, то плата будет намного ниже, чем арендовать сервер с мощностью под максимальную нагрузку.
    Простой факт: арендовали сервер за 11500, перешли в “облако” стали платить по факту менее 3 тыс, хотя в периоды максимальной посещаемости мощности были выше, чем исходный сервер.
    Для крупных проектов: если мы говорим про облако без ограничения по верхней планки, то тут ситуация простая – расти можно до бесконечности и только из-за прочих причин (не мощность) надо переходить на своё оборудование (безопасность, особые условия). Аренда обычно всегда дешевле покупки своего оборудования. Яркий пример “Скалакси” – аренда 64 слотов с диском на 750Гб будет стоить около 26 тыс. + отдельный дисковый массив с бешенной скоростью – это мощность сервера в 3-4U c ценой в 90-150 тыс рублей + аренда 3-4 юнитов – это 9-12 тыс рублей + трафик + установка + диск не супербыстрый (или собирать raid, что еще +20-30-50 тыс рублей + 3-6 тыс за аренду стойки). Выгода есть, но под каждый проект надо просто садиться, рисовать схему и считать.

  • Очень понравилась статья. Меня тоже всегда интересовала архитектура высоко нагруженных порталов. Но признаться даже не думал, что используются такие мощности.

  • Кроме memcached имели ли опыт с иными nosql?

  • У вас VOD медиасерверы? Если да, то какие?

  • а ссылка на проект есть??
    можно по подробнее про сфинкс и мемкеш?
    заранее спс

You can follow any responses to this entry through the RSS 2.0 feed.