Архитектура YouTube

1 марта 2008 40 комментариев Иван Блинков

Рост YouTube был феноменально быстр, количество просмотров видео превысило 100 миллионов в сутки при том, что только около пяти человек работало над масштабированием проекта. Как им удается управлять предоставлением всех этих видеороликов своим посетителям? Как они развивались с тех пор, как были приобретены Google?

Платформа

Что внутри?

Статистика

  • Поддержка обработки более 100 миллионов видеороликов в сутки
  • Сервис был запущен в феврале 2005 года
  • В марте 2006 года в среднем производилось около 30 миллионов просмотров видео в день
  • К июлю 2006 года эта цифра достигла 100 миллионов просмотров в день
  • Над проектом работают: 2 системных администратора, 2 архитектора масштабируемости программного обеспечения, 2 разработчика новых возможностей, 2 инженера по сетям, 1 архитектор баз данных

Рецепт управления огромными темпами роста

while (true)
{
   identify_and_fix_bottlenecks();
   drink();
   sleep();
   notice_new_bottleneck();
}

Этот цикл проходит далеко не одну итерацию ежедневно.

Веб-серверы

  • NetScalar используется для балансировки нагрузки и кэширования статического контента.
  • Apache работает с включенным mod_fast_cgi
  • Запросы отправляются на обработку с помощью серверного приложения на Python.
  • Приложение взаимодействует с различными базами данных и другими источниками информации для формирования финальной HTML-страницы.
  • Масштабирование обычно происходит просто добавлением дополнительных компьютеров.
  • Код на Python обычно не является узким местом системы, он проводит большую часть времени заблокированным RPC.
  • Python предоставляет быстроту и гибкость в процессе разработки и развертывания. Этот факт является очень актуальным, если учесть кто является их конкурентами.
  • На формирование страницы обычно уходит не более 100 миллисекунд.
  • psyco, динамический компилятор PythonC, использует JIT подход к компилированию для оптимизации внутренних циклов
  • Для интенсивных вычислений, таких как шифрование, используются расширения, написанные на C.
  • Какая-то часть заранее сгенерированного HTML хранится в кэше.
  • Кэширование данных в СУБД на уровне строк.
  • Кэшируются полностью сформированные объекты Python.
  • Некие данные вычисляются и отправляется каждому серверу для кэширования в локальной оперативной памяти. Эта стратегия годится далеко не всегда, чаще всего более эффективен другой метод: самым быстрым кэшем является само серверное приложение, а отправка уже готовых данных остальным серверам для дальнейшей обработки обычно не занимает так много времени. Для организации такого подхода необходимы агенты, осуществляющие отслеживание изменений, предварительную обработку и отправку данных.

Управление видео

  • Издержки включают в себя затраты на пропускную способность каналов связи, приобретение нового оборудования и оплату огромных счетов за электроэнергию.
  • Каждый видеоролик расположен на мини-кластере, что означает управление работой с ним группой из нескольких компьютеров.
  • Использование кластеров влечет за собой:
    – увеличение производительности пропорционально количеству дисков, на которых расположен контент;
    – возможность поддержания функционирования всей системы даже в случае прекращения работоспособности части компьютеров;
    – возможность организации создания резервных копий online.
  • В роли HTTP-сервера для работы с видео используется lighttpd:
    – Он способен дать фору Apache в плане производительности предоставления статического контента;
    – Для работы с событиями ввода-вывода используется epoll;
    – Многопоточная конфигурация способна обрабатывать большее количество соединений одновременно;
  • Самая популярная часть контента размещается в CDN
    CDN реплицирует весь контент в разных частях системы;
    – Компьютеры CDN в основном предоставляют данные напрямую из кэша в оперативной памяти, так как ассортимент популярного видео с течением времени меняется достаточно медленно.
  • Менее популярный контент, количество просмотров в день которого варьируется в диапазоне от одного до двадцати, обычно размещается на серверах YouTube, расположенных в датацентрах на colocation:
    – Не смотря на тот факт, что такое видео может быть просмотрено всего несколько раз за день, количество таких роликов велико, что приводит к случайным блокировкам данных на жестких дисках;
    – В такой ситуации кэширование практически бесполезно, инвестиции в кэширование контента с низкой вероятностью востребованности обычно является пустой тратой средств;
    – Более детальная настройка низкоуровневых компонентов системы, таких как, например, RAID-контроллеры, в этой ситуации может достаточно положительно повлиять на производительность;
    – Выбор оптимального размера оперативной памяти на каждой машине также очень важен: как недостаточное, так и излишнее ее количество не являются эффективными решениями.

Ключевые моменты

  • Чем проще — тем лучше;
  • Старайтесь минимизировать количество устройств (маршрутизаторов, коммутаторов и тому подобных) между контентом и пользователями: далеко не факт, что все они будут способны выдерживать интенсивную нагрузку;
  • Старайтесь использовать самое обыкновенное оборудование. Hi-end оборудование обычно влечет за собой рост издержек, связанных с сопутствующими процессами, например технической поддержкой, а также уменьшает вероятность нахождение решения той или иной проблемы с оборудованием в Сети;
  • Используйте самые простые распространенные утилиты. YouTube использует идущий в комплекте с Linux набор утилит для построения системы именно на их основе;
  • Не забывайте о случайных доступах к жестким дискам, эту, казалось бы, мелочь тоже стоит настроить.

Управление миниатюрами видео

  • На удивление сложно решаемая задача, особенно если необходима эффективность;
  • Для каждого видео хранится 4 миниатюры, что приводит к существенному преобладанию количества миниатюр над количеством видеороликов;
  • Миниатюры хранятся всего на нескольких компьютерах;
  • Некоторые проблемы наблюдаются в связи с работой с большим количеством маленьких объектов:
    – Проблемы на уровне операционной системы, связанные с большим количеством запросов на поиск данных, а также кэшем страниц и inode'ов файловой системы;
    – Ограничение на количество файлов в одной директории (особенно актуально для ext3), возможно частичное решение в виде перехода к более иерархической структуре хранения данных, а также переходе к ядру Linux версии 2.6, что может привести к более чем стократному росту производительности, но в любом случае хранение такого огромного количества файлов в локальной файловой системе — не самая лучшая идея;
    – Большое количество запросов в секунду, так как одна страница может содержать до 60 миниатюр различных видеороликов;
    – В условиях таких нагрузок Apache показывает плохую производительность;
    – Проводились эксперименты с использованием squid (обратной proxy) между Apache и посетителями. Какое-то время такой вариант казался работоспособным, но с ростом нагрузки производительность начала падать. С обработки 300 запросов в секунду она упала до 20;
    – Попытки использовать lighttpd также не завершились успехом: однопоточный режим не справлялся с задачей, а многопоточный требовал отдельного кэша для каждого потока, что сводило на нет его эффективность;
    – С таким количеством изображений добавление в систему нового компьютера могло занимать более 24 часов;
    – Перезагрузка занимала 6-10 часов, так как кэш должен был «разогреться» прежде чем перестать использовать данные с жестких дисков.
  • Решением всех описанных выше проблем стала распределенная система хранения данных BigTable от Google:
    – Она позволяет избежать проблем, связанных с большим количеством файлов, так как объединяет маленькие файлы вместе.
    – Она работает быстро и устойчива к сбоям, помимо этого она прекрасно приспособлена для работы по ненадежной сети.
    – Уменьшает задержки, так как использует распределенный многоуровневый кэш, который способен работать даже между удаленными датацентрами.

Базы данных

  • Раньше:
    MySQL использовалась для хранения данных: пользователей, тэгов, описаний и так далее.
    – Данные хранились на монолитном RAID 10 массиве, состоящем из 10 жестких дисков;
    – Оборудование арендовалось, что негативно сказывалось на состоянии их кредитных карточек. В случае необходимости нового оборудования, на оформление заказа и доставку мог уходить далеко не один день.
    – Они прошли через весь путь эволюции: сначала был один сервер, затем добавилось несколько дополнительных серверов, обслуживающих операции чтения, после чего они решили разбить базу данных на части, и, наконец, они пришли к полноценной распределенной архитектуре.
    – Поначалу их система страдала от задержек, связанных с реплицированием. Основной сервер, обрабатывающий операции записи, являлся мощным сервером, работающим в многопоточном режиме, это было необходимо для своевременного выполнения большого объема работы. Второстепенные сервера, которые обрабатывали только операции чтения, асинхронно реплицировали данные в одном потоке, что влекло за собой возможность серьезного отставания некоторых из них.
    – Обновления были причиной частого отсутствия необходимой информации в кэше, что заставляло сервера читать данные с жестких дисков. Этот факт сильно замедлял процесс чтения и репликации.
    – Реплицирующая архитектура требует немалых вложений в оборудование, необходимого для поддержания постоянно растущих темпов записи информации.
    – Основным из кардинальных решений, принятых в архитектуре системы было отделение обеспечения процесса просмотра видео от основного кластера. Основной целью посетителей является просмотр видео, а второстепенные задачи можно возложить и на менее производительный кластер.
  • Сейчас:
    – Используются распределенные базы данных;
    – Сегментированная система (прим.: по аналогии с Flickr);
    – Распределенные чтение и запись;
    – Более эффективное расположение кэша, что ведет к уменьшению работы с жесткими дисками;
    – Такая архитектура привела к 30%-й экономии на оборудовании;
    – Задержки в реплицировании сведены к нулю;
    – Размеры базы данных могут расти практически неограниченно

Стратегия размещения в датацентрах

  • Поначалу использовались хостинг провайдеры, предоставляющие услуги colocation. Не самый экономичный подход, но тогда не было другого выхода.
  • Хостинг провайдеры не могут поспеть за темпами роста проекта. Не всегда получается получить контроль над необходимым оборудованием или сделать необходимые соглашения о предоставлению сетевых услуг.
  • Решением этой проблемы стало создание собственной базы для размещения оборудования. Появилась возможность настраивать абсолютно все и подписывать свои собственные контракты такого рода.
  • Было использовано 5 или 6 разных датацентров в дополнение к CDN.
  • Видео поступает из случайного датацентра, никаких специальных проверок не проводится. Если ролик становится достаточно популярным — он перемещается в CDN.
  • Основным фактором, влияющим на доступность того или иного ролика является пропускная способность канала связи.
  • Для изображений же более актуальны задержки, особенно если на одной страницы должно быть размещено под 60 изображений.
  • Репликация изображений производится средствами BigTable. В этом случае используются различные меры для определения ближайшего места, откуда можно получить необходимые данные.

Подводим итоги

  • Остановитесь на секунду. Креативные и рискованные трюки могут помочь справиться с задачей в краткосрочном периоде, но со временем понадобятся более продуманные решения.
  • Расставьте приоритеты. Определите какие части Вашего сервиса являются более важными и стройте систему обеспечения ресурсами и усилиями именно в соответствии с поставленными приоритетами.
  • Выбирайте свои битвы. Не бойтесь пользоваться аутсорсингом в некоторых ключевых сервисах. YouTube использует CDN для распределения своего наиболее популярного контента. Создание своей собственной подобной сети стоило бы им слишком много и потребовало бы слишком много времени. Возможно у Вас появятся подобные возможности в отношении Вашей системы.
  • Будьте проще! Простота позволяет изменять архитектуру более быстро, что позволяет своевременно реагировать на возникающие проблемы. Никто на самом деле не знает что такое простота, но если Вы не боитесь делать изменения, то это неплохой знак что вашей системе свойственна та самая простота.
  • Сегментирование. Сегментирование позволяет изолировать и ограничить дисковое пространство, процессорное время, оперативную память и ввод-вывод. Оно выполняется не только для повышения производительности операций записи.
  • Постоянная работа над поиском и устранением узких мест в системе:
    – на программном уровне это чаще всего бывает кэширование и работа с СУБД;
    – на уровне операционной системы — операции ввода-вывода;
    – на уровне оборудования — оперативная память и RAID массивы.
  • Залог Вашего успеха — командная работа. Хорошая команда разного рода специалистов должна понимать принцип системы вцелом и того, что лежит под ней. Каждый должен знать свое дело: настраивать принтеры, подключать к системе новые компьютеры, строить сети и так далее. С отличной командой Вам по силам все что угодно.

Источники информации

В отличии от остальных, этот перевод статьи от Todd Hoff'а уже был выполнен до меня (при желании можно найти в любой поисковой системе), но я все равно решил опубликовать свою версию просто для собственного развития и полноты коллекции, да и многим читателям, возможно, покажется интересным. Что ж, перейдем к источнику информации оригинала:

Метки: , , , , , , , , , , , , , ,

  • http://blog.kovyrin.net/ Alexey Kovyrin

    Второстепенные сервера, которые обрабатывали только операции чтения, обычно работали в однопоточном режиме — уберите слово «обычно» — mysql не умеет многопоточного выполнения запросов при репликации и именно отсюда и replication lag на больших нагрузках.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="287"]Второстепенные сервера, которые обрабатывали только операции чтения, обычно работали в однопоточном режиме — уберите слово «обычно» — mysql не умеет многопоточного выполнения запросов при репликации и именно отсюда и replication lag на больших нагрузках.[/quote]Спасибо, в оригинале оно было, но относилось к используемому оборудованию, а не к режиму работы. Не достаточно хорошо вчитавшись в фразу поставил это слово в неправильное место. Исправил.

  • http://v-kostin.blogspot.com Lamer

    «обычно не занимает не так много времени» наверное, где-то лишнее «не»... да и вообще абзац мутный... если честно, я не въехал и поскипал.

    P.S. Тема отличная, спасибо, оч. познавательно.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="292"]«обычно не занимает не так много времени» наверное, где-то лишнее «не»... да и вообще абзац мутный... если честно, я не въехал и поскипал.[/quote]Спасибо, соглашусь, попробую как-нибудь по-адекватнее перефразировать.

    [quote comment="292"]P.S. Тема отличная, спасибо, оч. познавательно.[/quote]Рад, что тема все же оказалась не совсем бесполезной :)

  • http://neuronus.blogspot.com Neuronus

    Спасибо за очередную хорошую статью! Очень полезно и по существу.

    P.S. Кстати, одна из статей в этой же серии привела к появлению сравнения нашей архитектуры и Flickr — neuronus.blogspot.com/2008/02/flickr.html

  • http://www.insight-it.ru Иван Блинков

    [quote comment="295"]Спасибо за очередную хорошую статью! Очень полезно и по существу.

    P.S. Кстати, одна из статей в этой же серии привела к появлению сравнения нашей архитектуры и Flickr — neuronus.blogspot.com/200...ickr.html[/quote]

    И Вам спасибо, этот пост я прочитал еще когда Вы его только написали (благодаря blogsearch.google.com) — достаточно интересно было ознакомиться с еще одним проектом, некоторые упомянутые Вами решения очень к месту в такого рода сервисах, особенно хорошим выбором был по-моему PostgreSQL. Жалко правда, что в тех местах, где присутствуют «самописные» компоненты, не дано никаких подробностей о их реализации, было бы очень интересно.

  • Kristy

    Похоже им повезло что их купил Google, получили BigTable на халяву, а так пришлось бы разрабатывать что-то аналогичное самим

    А что такое CDN?

  • http://www.insight-it.ru Иван Блинков

    [quote comment="304"]Похоже им повезло что их купил Google, получили BigTable на халяву, а так пришлось бы разрабатывать что-то аналогичное самим[/quote]Скорее открытым аналогом под названием Hadoop пришлось бы пользоваться, либо да, самим разрабатывать.

    [quote comment="304"]А что такое CDN?[/quote]Content Delievery Network, сеть компьютеров, соединенных через интернет, предназначенная для предоставления контента (как раз в основном медиа-данных, вроде видео) конечным пользователям. Много компаний предоставляют этот сервис, услугами какой из них пользуется YouTube — сложно сказать, из текста не ясно, но если покопаться в Google, то при желании можно найти скорее всего.

  • Madshall

    Еще одно доказательство того что даже самые раскрученные и объемные проекты «рукотворны» и делаются «простыми смертными»

  • Alex Filatov

    Интересно, насколько правда, что команда разработчиков всего 9 человек? В википедии у них на картинке приличный хедквотер...

    ... Не уверен, насколько правильный перевод Database partitioning — как «распределенная» БД?

  • http://www.insight-it.ru Иван Блинков

    [quote comment="315"]Интересно, насколько правда, что команда разработчиков всего 9 человек? В википедии у них на картинке приличный хедквотер...[/quote]Естественно в тексте не весь персонал перечислен, а только те, кто работают над масштабированием проекта (если повнимательнее вчитаться — можно это увидеть), наверняка там есть еще масса разномастных менеджеров и прочих должностей.[quote comment="315"]Не уверен, насколько правильный перевод Database partitioning — как «распределенная» БД?[/quote]

    Это не дословный перевод естественно, но мне показалось, что синоним достаточно близкий, можно было конечно написать что-нибудь вроде «разбиение базы данных на части», но стоило ли?

  • Sergey

    Не понял какую всетаки СУБД они сейчас используют? Сегментирование данных и в MySQL делают, а «Используются распределенные базы данных» не очень внятно об этом говорит :)

  • http://lovata.com Krylatij

    Спасибо, очень интересная тема. Хотелось бы продолжения.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="321"]Не понял какую всетаки СУБД они сейчас используют? Сегментирование данных и в MySQL делают, а «Используются распределенные базы данных» не очень внятно об этом говорит :) [/quote]О BigTable от Google.

    [quote comment="322"]Спасибо, очень интересная тема. Хотелось бы продолжения.[/quote]Пожалуйста.

    Если Вам пришелся по душе этот материал — взгляните на остальные.

  • http://www.wegroup.org _Andrey_

    Спасибо, было интересно почитать о внутренностях ютубы.

  • sk

    Thanks

  • sk

    geoip облажался походу. Я из UA, а не UK

  • http://neuronus-javax.blogspot.com Neuronus

    «...Жалко правда, что в тех местах, где присутствуют “самописные” компоненты, не дано никаких подробностей о их реализации, было бы очень интересно.»

    Я открыл новый блог neuronus-javax.blogspot.com

    в котором последовательно буду публиковать некоторые «подробности» реализации :)

  • http://www.insight-it.ru Иван Блинков

    [quote comment="362"]geoip облажался походу. Я из UA, а не UK[/quote]Бывает... у меня не самая свежая база данных (вроде).

  • http://www.insight-it.ru Иван Блинков

    [quote comment="363"]«...Жалко правда, что в тех местах, где присутствуют “самописные” компоненты, не дано никаких подробностей о их реализации, было бы очень интересно.»

    Я открыл новый блог neuronus-javax.blogspot.com

    в котором последовательно буду публиковать некоторые «подробности» реализации :) [/quote]Спасибо, прочитал первый пост — подписался :)

    Надеюсь и моим читателям Ваш новый блог покажется полезным.

  • http://anvaka.blogspot.com anvaka

    Сергей, спасибо за качественный перевод!

    Однако информация о репликации данных все равно не похожа на правду и вводит в заблуждение. В оригинале статьи Тодд сказал очень двусмысленно о том, что заметил в самом начале Alexey Kovyrin: mysql не поддерживает многопоточного обновления данных во время репликации.

    Суть проблемы заключается вот в чем: на второстепенном сервере за репликацию отвечает только один поток, выполняя операторы обновления данных последовательно. Eсли в рамках одной реплики должно было произойти три update'a: update1, update2 и update3, то update3 будет выполнен только после завершения update2. Вот здесь и появляется узкое место: выполнение update2 (потенциально) может занять много времени.

    Я бы перефразировал это так:

    «... Второстепенные сервера, которые обрабатывали только операции чтения, реплицировали данные в одном потоке...».

    Впрочем, можете просто посмотреть первоисотчник: доклад Cuong'a на Tech Talk'e. Эта тема затронута на 29-й минуте. Уверен, у вас получится лучше перефразировать проблему :) .

  • http://www.insight-it.ru Иван Блинков

    [quote comment="366"]Сергей, спасибо за качественный перевод![/quote]Видимо этот комментарий все же адресовался мне, хоть я вовсе и не Сергей, пожалуйста!

    [quote comment="366"]Однако информация о репликации данных все равно не похожа на правду и вводит в заблуждение. В оригинале статьи Тодд сказал очень двусмысленно о том, что заметил в самом начале Alexey Kovyrin: mysql не поддерживает многопоточного обновления данных во время репликации.

    Суть проблемы заключается вот в чем: на второстепенном сервере за репликацию отвечает только один поток, выполняя операторы обновления данных последовательно. Eсли в рамках одной реплики должно было произойти три update'a: update1, update2 и update3, то update3 будет выполнен только после завершения update2. Вот здесь и появляется узкое место: выполнение update2 (потенциально) может занять много времени.

    Я бы перефразировал это так:

    «... Второстепенные сервера, которые обрабатывали только операции чтения, реплицировали данные в одном потоке...».

    Впрочем, можете просто посмотреть первоисотчник: доклад Cuong'a на Tech Talk'e. Эта тема затронута на 29-й минуте. Уверен, у вас получится лучше перефразировать проблему :) .[/quote]Постараюсь в ближайшее время попытаться разобраться по-подробнее в этом вопросе, правда видимо уже не сегодня — уже собирался идти спать...

    Спасибо за конструктивную критику :)

  • http://anvaka.blogspot.com anvaka

    Вань, спасибо, действительно Вам :) !

    Ума не приложу, откуда взялся Сергей — прошу прощения :) .

  • http://www.insight-it.ru Иван Блинков

    [quote comment="368"]Вань, спасибо, действительно Вам :) !

    Ума не приложу, откуда взялся Сергей — прошу прощения :) .[/quote]

    Да ничего страшного :)

    Очередной раз перефразировал то предложение в статье. Надеюсь так совсем правильно ;)

  • Дмитрий Тимохов

    Иван.

    Не буду оригинален, но Ваши ссылки на самого себя (полагаю, что это некий плугин делает, а не Вы руками) не есть хорошо. Я по ним более не кликаю.

    Вот Вы пишете разные термины. Ну приведите ссылку на wiki какое-нибудь. А то все на себя и на себя... Не дело это.

    В остальном статья интересная. Продолжаю читать.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="378"]Иван.

    Не буду оригинален, но Ваши ссылки на самого себя (полагаю, что это некий плугин делает, а не Вы руками) не есть хорошо. Я по ним более не кликаю.

    Вот Вы пишете разные термины. Ну приведите ссылку на wiki какое-нибудь. А то все на себя и на себя... Не дело это.

    В остальном статья интересная. Продолжаю читать.[/quote]

    Соглашусь, на данный момент от них толку практически нет (за редким исключением), но собственно говоря причины по которым я их пишу (Вы не правы — руками) две:

    Потенциальное развитие блога. По прошествии какого-то периода времени (полгода, год, два...) на сайте появится достаточно информации (надеюсь), чтобы читатель, нажав на такую ссылку реально мог увидеть относительно полезную информацию, а не просто страницу со ссылкой обратно на ту же статью.

    Поисковые системы. Хочется банально взглянуть как прореагирует Google (не ужели эта ссылка существенно более информативна, чем, допустим, на Архитектуру Google) прореагиурет на такую перелинковку сайта (по крайней мере сайт, откуда я эту мысль почерпнул очень неплохо представлен в SERP, возможно не из-за этого конечно, но все же).

    Минусов у этих ссылок конечно предостаточно, в основном это конечно недовольные читатели, которые привыкли нажимать на ссылки не посмотрев куда они ведут и попадающие на полупустые страницы.

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

    Кстати полезность ссылок на wiki тоже если честно достаточно спорная: не знаю как у всех, но я (поставив себя на место читателя) скорее наберу слово в поисковом плагине Firefox, чем буду искать ссылку в тексте статьи. А ссылки же просто на какие-либо сайты «в тему» конечно же тоже присутствуют местами в блоге, но видимо они просто «растворяются в толпе» и по ним никто не ходит (хотя сложно сказать, может быть просто я не в курсе)...

  • Pingback: Блог Зеника » Blog Archive » Архітектура YouTube

  • http://anton.shevchuk.name Anton Shevchuk

    Еще статейка по теме создания клона YouTube

  • http://govnosite.info/ Стёпыч

    Отличная статья. Особенно понравилось решение размещать малопопулярные ролики на, грубо говоря, обычном хостинге

  • Андрон

    Добрый день Иван. Не могли бы Вы написать про архитектуру наших Веб проектов:mamba.ru, sape.ru?

    • http://www.insight-it.ru Иван Блинков

      > Добрый день Иван. Не могли бы Вы написать про архитектуру наших Веб проектов:mamba.ru, sape.ru?

      Если Вы уговорите их предоставить соответствующую информацию — запросто ;)

  • tym83

    Иван, очень хорошо пишете! Интересно и полезно:)

    И главное — очень интеллигентно себя ведете и на острые замечания, даже провокационные местами, реагируете спокойно. Так держать!

    P.S. Уже подписываюсь:-)

  • http://iteplyakov.ru Иван

    9 человек в штате такую работу проделали. Молодцы однако!

  • Pingback: Архитектура высоконагруженных систем

  • Pingback: Архитектура высоконагруженных систем « IT-безопасность

  • Pingback: Сервис YouTube.com « www.blogproobzor.ru

  • Pingback: Паутина фриланса » Blog Archive » Архитектура сайтов с высокой нагрузкой

  • Jack

    У меня так сервер умер

  • http://s-kak.ru/ Oluysya

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

  • Pingback: Архитектура YouTube 2012 | Insight IT