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

8 февраля 2008 41 комментарий Иван Блинков

Flickr является мировым лидером среди сайтов размещения фотографий. Перед Flickr стоит впечатляющая задача, они должны контролировать обширное море ежесекундно обновляющегося контента, непрерывно пополняющиеся легионы пользователей, постоянный поток новых предоставляемых пользователям возможностей, а делается все это при постоянной поддержке отличной производительности. Как же они это делают?

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

Как и предыдущий пост «Архитектура Google», этот тоже является переводом статьи от Todd'а Hoff'а. Возможно читателям Google был более интересен, но подход Flickr к масштабируемости тоже более чем заслуживает внимания. Далее привожу источники информации из оригинальной статьи:

Платформа

  • PHP
  • MySQL
  • Сегментирование (прим.: разбиение системы на части, обслуживающие каждая свою группу пользователей; называть можно было по-разному, но давайте остановимся на этом варианте перевода слова «Shards»)
  • Memcached для кэширования
  • Squid в качестве обратной-прокси для html и изображений
  • Linux (RedHat)
  • Smarty в роли шаблонизатора
  • Perl
  • PEAR для парсинга e-mail и XML
  • ImageMagick для обработки изображений
  • Java для узлового сервиса
  • Apache
  • SystemImager для развертывания систем
  • Ganglia для мониторинга распределенных систем
  • Subcon хранит важные системные конфигурационные файлы в SVN-репозитории для легкого развертывания на машины в кластере.
  • Cvsup для распространения и обновления коллекций файлов по сети

Статистика

  • Более четырех миллиардов запросов в день
  • Примерно 35 миллионов фотографий в кэше Squid
  • Около двух миллионов фотографий в оперативной памяти Squid
  • Всего приблизительно 470 миллионов изображений, каждое представлено в 4 или 5 размерах
  • 38 тысяч запросов к memcached (12 миллионов объектов)
  • 2 петабайта дискового пространства
  • Более 400000 фотографий добавляются ежедневно

Архитектура

Симпатичное изображение архитектуры Flickr можно увидеть на этом слайде. Краткое ее описание выглядит следующим образом:
–– Два ServerIron
–––– Squid кэши
–––––– Системы хранения NetApp
–––– Серверы PHP-приложений
–––––– Менеджер хранения данных
–––––– Master-master сегменты
–––––– Центральная база данных, структурированная по принципу Dual Tree
–––––– Memcached кластер
–––––– Поисковая система

– Структура Dual Tree является индивидуальным набором модификаций для MySQL, позволяющим масштабировать систему путем добавления новых мастер-серверов без использования кольцевой архитектуры. Эта система позволяет экономить на масштабировании, так как варианты мастер-мастер требовали бы удвоенных вложений в оборудование.
– Центральная база данных включает в себя таблицу пользователей, состоящую из основных ключей пользователей (несколько уникальных идентификационных номеров) и указатель на сегмент, на котором может быть найдена остальная информация о конкретном пользователе.
  • Использование выделенных серверов для статического контента
  • Все, за исключением фотографий, хранится в базе данных
  • Отсутствие состояний заключается в том, что в случае необходимости они имеют возможность передать пользователей от сервера к серверу, что стало намного проще для них после создания своего API
  • В основе масштабируемости лежит репликация, но этот факт помогает лишь при обработке операций чтения
  • Для поиска по определенной части базы данных создается отдельная копия этого фрагмента
  • Использования горизонтального масштабирования для того чтобы можно было проще добавлять новые машины в систему
  • Обработка изображений, полученных от пользователей по электронной почте, происходит с помощью PHP
  • Раньше система страдала от задержек связанных с организацией по принципу мастер-слуга. При слишком большой нагрузке они имели одну точку, которая теоретически могла дать сбой.
  • Им было необходимо иметь возможность проводить технические работы во время непрерывной работы сайта, не прекращая его функционирование.
  • Были проведены отличные работы по планированию распределения дискового пространства, более подробную информацию можно найти по ссылкам в разделе «Источники информации».
  • Для обеспечения возможности масштабирования в будущем, они пошли по федеративному пути развития:
    Сегменты системы: Мои данные хранятся на моем сегменте, но запись о Вашем комментарии хранится на Вашем сегменте.
    Глобальное кольцо: Принцип работы схож с DNS, Вам необходимо знать куда Вы хотите пойти и кто контролирует то место, куда Вы собираетесь пойти.
    – Логика на PHP устанавливает соединение с сегментом и поддерживает целостность данных (10 строк кода с комментариями!)
  • Сегменты:
    – Срез основной базы данных
    – Активная репликация по принципу мастер-мастер: имеет несколько недостатков в MySQL 4.1. Автоматическое инкрементирование идентификационных номеров используется для поддержания системы в режиме одновременной активности обоих серверов в паре
    – Привязывание новых учетных записей к сегментам системы происходит случайным образом
    – Миграция пользователей проводится время от времени для того, чтобы избавиться от проблем, связанных с излишне активными пользователями. Необходима сбалансированность в этом процессе, особенно в случаях с большим количеством фотографий… 192 тысячи фотографий, 700 тысяч тэгов, может занять несколько минут. Миграция выполняется вручную.
  • Нажатие на Favorite:
    – Получается информация об учетной записи владельца из кэша для того, чтобы узнать к какому сегменту он привязан (допустим на shard-5)
    – Получается информация о моей учетной записи из кэша, более конкретно — мой сегмент (например shard-13)
    – Начинается «распределенная трансакция» для определения ответов на вопросы: Кто добавил эту фотографию в избранное? Как изменился список избранных фотографий?
  • Подобные вопросы могут задаваться любому сегменту, информация на них абсолютно избыточна.
  • Для избавления от задержек, связанных с репликацией…
    – при каждой загрузке страницы, пользователю предоставляется список серверов
    – если сервер не в состоянии ответить на запрос, запрос переходит к следующему серверу в списке; если список кончился — выводится сообщение об ошибке. При этом не используются постоянные соединения, каждый раз создаются и разрываются новые соединения.
  • Запросы на чтение и запись от каждого пользователя ограничиваются рамками одного сегмента. Задержки репликации исчезают из поля зрения пользователей.
  • Каждый сервер в рамках одного сегмента в обычном состоянии нагружен ровно на половину. Выключите половину серверов в каждом сегменте и система продолжит функционировать без изменений. Это значит, что один сервер внутри сегмента может взять на себя всю нагрузку второго, в то время как второй сервер может по каким либо причинам быть отключен от системы, например для проведения технических работ. Обновление оборудования производится очень просто: отключается половина сегмента, она же обновляется, подключается обратно, процесс повторяется для оставшейся половины.
  • Периоды пиковой нагрузки также нарушают правило 50% нагрузки. В такие моменты система получает 6-7 тысяч запросов в секунду, в то время как на данный момент система может работать на пятидесятипроцентном уровне нагрузки только при четырех тысячах запросов в секунду.
  • В среднем при загрузке одной страницы выполняется 27-35 SQL-запросов. Списки избранных фотографий обрабатываются в реальном времени, ровно как и доступ через API к базе данных. Все требования к нагрузке в реальном времени выполняются без каких-либо недостатков.
  • Более 36 тысяч запросов в секунду может выполняться не выходя за рамки возможностей системы, даже при резком росте трафика.
  • Каждый сегмент содержит данные о более чем 400 тысячах пользователей.
    – Многие данные хранятся в двух местах одновременно. Например, комментарий является частью между комментатором и автором комментируемого контента. Где его хранить? Как насчет обоих мест? Трансакции используются для предотвращения рассинхронизации данных: открывается первая трансакция, выполняется запись, открывается вторая трансакция, выполняется запись, подтверждается первая трансакция если все нормально, после чего вторая подтверждается только в случае если первая прошла успешно.
  • Поиск:
    — Используется два варианта поиска: поиск в рамках сегмента, поддерживающий до 35 тысяч запросов в секунду, а также проприетарный веб-поиск от Yahoo!
    — В 90% случаев используется система от Yahoo!, за исключением поиска по тэгу фотографий одного пользователя и массовых изменений тэгов.
    — Эту систему стоит рассматривать как аналог Lucene.
  • Оборудование:
    — EMT64 под управлением RHEL 4 с 16 Gb оперативной памяти.
    — 6 жестких дисков с 15000rpm, объединены в RAID-10.
    — Размер для пользовательских метаданных достигает 12 терабайт (это не включает фотографии, для них цифры существенно больше).
    — Используются 2U корпуса.
  • Процедура резервного копирования данных:
    — ibbackup выполняется регулярно посредством cron daemon'а, на каждом сегменте настроен на разное время.
    — Каждую ночь делается снимок со всего кластера баз данных.
    — Запись или удаление нескольких больших файлов с резервными копиями одновременно на реплицирующую систему хранения может сильно сократить производительность системы вцелом на последующие несколько часов из-за процесса репликации. Выполнение этого на активно работающей системе хранения фотографий было бы не самой лучшей идеей.
    — Содержание нескольких резервных копий всех Ваших данных требует существенных материальных затрат, но оно того стоит. Особенно это актуально для тех ситуаций, когда Вы понимаете, что что-то пошло не так только спустя несколько дней после того как это случилось, в таких случаях неплохо иметь, например, резервные копии 1, 3, 10 и 30-дневной давности.
  • Фотографии хранятся в системе хранения данных. После загрузки изображения система выдает различные его размеры, на чем ее работа заканчивается. Метаданные и ссылки на файловые системы, где расположены фотографии, хранятся в базе данных.
  • Аггрегация данных проходит очень быстро, так как она ограничена пределами сегмента.
  • max_connections = 400 соединений на каждый сегмент, неплохой запас. Значение для кэша потоков установлено равным 45, так как не бывает ситуаций когда более 45 пользователей одновременно выполняют какие-либо действия с одним конкретным сегментом.
  • Тэги:
    — Тэги плохо вписываются в традиционную нормализованную схему реляционной базы данных. Денормализация или активное кэширование — единственные способы сгенерировать облако меток для сотен миллионов тэгов в течении миллисекунд.
    Некоторые данные обрабатываются отдельными вычислительными кластерами, которые сохраняют результаты своей работы в MySQL, так как иначе вычисление сложных отношений заняло бы все процессорное время основных серверов баз данных.
  • Направления для развития: ускорение работы с помощью создания организационного плана для непрерывной работы всей системы на уровне нескольких датацентров, таким образом чтобы все датацентры имели возможность получать запросы на общий уровень данных (как сами БД, так и memcache и прочее) все вместе одновременно. Если все части системы постоянно активны — время простоя оборудования будет сведено к минимуму.

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

  • Старайтесь думть о своем приложении как о чем-то большем, чем просто веб-приложении, тогда у Вас возможно появятся поддержка различных API, RSS и Atom ленты и многие другие возможности.
  • Отсутствие состояний системы позволяет более легко выполнять модернизации не моргнув и глазом.
  • Реструктуризация базы данных — не самое лучшее занятие.
  • Планирование нагрузок должно проводиться уже на ранних этапах развития проекта
  • Начинайте медленно. Не покупайте сразу много оборудования просто из-за того, что Вы рады/боитесь, что ваш сайт взорвется.
  • Измеряйте реально, планирование нагрузок должно базироваться на реальных вещах, а не абстрактных.
  • Внедряйте ведение логов и индивидуальные измерения для оценки реальных показателей на основе серверной статистики, статистика использования не менее важна чем серверная.
  • Кэширование и оперативная память может стать ответом на все вопросы.
  • Создавайте четкие уровни абстракции между работой базы данных, бизнес-логикой, логикой страниц, разметкой страниц и презентационным уровнем. Это позволяет ускорить циклы итеративной разработки.
  • Разделение приложения на уровни позволяет каждому заниматься своим делом: разработчики могут строить логику страниц, в то время как дизайнеры работают с удобством работы для пользователей.
  • Делайте релизы как можно чаще, пускай даже это будет происходить каждые полчаса.
  • Забудьте о всех небольших эффективных вещах, предварительная оптимизация является корнем всего зла в примерно 97% всех случаев.
  • Тестируйте в работе. Постройте архитектурные механизмы (флаги конфигурации, балансировку нагрузки, и так далее), которые позволят Вам разворачивать новое оборудование в (и из) работу.
  • Забудьте об искусственных тестах, они годятся только для получения общего представления о нагрузках, но не для планирования. Искуственные тесты дают искусственные результаты, для настоящих тестов все же стоит пользоваться реальным временем выполнения задач.
  • Найдите максимальное значения для всех показателей:
    — Какой максимум чего-то, что может выполнять каждый сервер?
    — Как близко параметр находится к максимуму и каковы тенденции?
    MySQL (дисковый ввод/вывод?)
    Squid (дисковый ввод/вывод? или процессорное время?)
    Memcached (процессорное время? или пропускная способность сети?)
  • Старайтесь учесть особенности использования Вашего приложения.
    — Возможен ли резкий рост нагрузки, связанный с каким-либо событием? Например: какое-либо бедствие, или может быть новость?
    — Flickr получает на 20-40% больше новых фотографий в первый рабочий день нового года, чем в любой пик в предыдущем году.
    — По воскресеньям нагрузка в среднем на 40-50% выше, чем в любой другой день недели.
  • Учтите возможность экспонентациального роста. Больше пользователей означает больше контента, больше контента означает больше соединений, больше соединений означает более активное использование.
  • Планируйте возможные варианты управления работой системы в периоды пиковых нагрузок.

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

  • proforg

    > — 16 жестких дисков с 15000rpm, объединены в RAID-10.

    > — Используются 2U корпуса.

    не догоняю, как в 2 юнита помешается 16 дисков. 6 — ещё куда ни шло. 12 — да, наверное реально, но тогда они не хотсвоп. но 16 ??? что там будет с охлаждением у таких корпусов ?

  • proforg

    [quote]— Содержание нескольких резервных копий всех Ваших данных требует существенных материальных затрат, но оно того стоит. Особенно это актуально для тех ситуаций, когда Вы понимаете, что что-то пошло не так только спустя несколько дней после того как это случилось, в таких случаях неплохо иметь, например, резервные копии 1, 3, 10 и 30-дневной давности.[/quote]

    Зачем держать несколько копий то ? Особенно если данных много ?

    Инкрементальный бэкап придуман уже очень давно :) Даже rsync умеет это делать — сохранять удаляемы / изменяемые файлы в отдельное место.

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

    [quote comment="91"]> — 16 жестких дисков с 15000rpm, объединены в RAID-10.

    > — Используются 2U корпуса.

    не догоняю, как в 2 юнита помешается 16 дисков. 6 — ещё куда ни шло. 12 — да, наверное реально, но тогда они не хотсвоп. но 16 ??? что там будет с охлаждением у таких корпусов ?[/quote]

    С полной уверенностью не могу сказать какой вариант имелся ввиду, но у меня есть предположение, что «секрет» в том, что диски просто 2,5", со всеми вытекающими последствиями — по крайней мере мне доводилось видеть в Москве в продаже 1U серверные платформы с потенциальной возможностью поместить туда 8 таких жестких дисков. Был бы он 2U — мне кажется с тем же успехом могло бы влезть все 16.

    [quote comment="92"]Зачем держать несколько копий то ? Особенно если данных много ?

    Инкрементальный бэкап придуман уже очень давно :) Даже rsync умеет это делать — сохранять удаляемы / изменяемые файлы в отдельное место.[/quote]Спорный достаточно вопрос, особенно если речь идеь об огромном количестве небольших файлов: для ведения подобного бэкапа требовалось бы больше вычислений, связанных с анализом изменений в файлах, плюс полный бэкап обеспечивает дополнительную избыточность, которая лишней в такого масштаба проектах не бывает.

  • proforg

    [quote comment="93"]«секрет” в том, что диски просто 2,5″[/quote]

    2.5» ? 15000rpm ? так не бывает по моему :)

    [quote comment="93"]Спорный достаточно вопрос, особенно если речь идеь об огромном количестве небольших файлов[/quote]

    Количество файлов не так уж и велико, на каждом отдельном сервере и примерно понятно: 16 дисков по 300 Gb, RAID10, т.е. 2.4Тб на сервер. Оценить можно.

    Впрочем предлагаю подойти с другой стороны: полный бэкап данных будет делаться на 100 мегабитной сети 56 часов, на гигибитной — 6 часов, уже долго. Но это в идеальных условиях. При этом не стоит забывать и про то что в этот же момент эти же данные весьма активно читаются клиентами, которым этот бэкап будет очень сильно мешать Мне кажется прощще вначале обработать метаданные и потом сливать только изменённые файлы. Или вообще получать списоко добавленных с момента последнего бэкапа файлов их БД. Удалённые же можно не учитывать вообще :)

    Или даже лучше класть в бэкап полученные от пользователей файлы сразу после обработки.

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

    [quote comment="95"][quote comment="93"]«секрет” в том, что диски просто 2,5″[/quote]

    2.5» ? 15000rpm ? так не бывает по моему :) [/quote]

    Бывает, SAS называются — Serial Attached SCSI

    [quote comment="95"]

    Впрочем предлагаю подойти с другой стороны: полный бэкап данных будет делаться на 100 мегабитной сети 56 часов, на гигибитной — 6 часов, уже долго. Но это в идеальных условиях. При этом не стоит забывать и про то что в этот же момент эти же данные весьма активно читаются клиентами, которым этот бэкап будет очень сильно мешать Мне кажется прощще вначале обработать метаданные и потом сливать только изменённые файлы. Или вообще получать списоко добавленных с момента последнего бэкапа файлов их БД. Удалённые же можно не учитывать вообще :)

    Или даже лучше класть в бэкап полученные от пользователей файлы сразу после обработки.[/quote]

    Рассуждать на тему «как же было бы лучше» можно конечно достаточно долго, но тем не менее гигабитным Ethernet'ом пропускная способность Сети не ограничивается — можно вспомнить еще и про оптоволокно, а так как они держат постоянно достаточно весомый запас производительности и пропускной способности системы, не вижу ни одной помехи для возможности проведения даже полных бэкапов данных в периоды спада нагрузки.

  • SergeySilaev

    Вопрос с «16 дисками в 2U сервере», на мой взгляд очень прост, в оригинале:

    — 6-disk 15K RPM RAID-10.

    — 2U boxes. Each shard has~120GB of data.

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

    [quote comment="97"]Вопрос с «16 дисками в 2U сервере», на мой взгляд очень прост, в оригинале:

    — 6-disk 15K RPM RAID-10.

    — 2U boxes. Each shard has~120GB of data.[/quote]

    Ой... реально просто жестко опечатался и не обратил внимания, когда текст проверял. Спасибо!

    Хотя все же 16 по 2.5" тоже было бы вполне реалистично :)

  • SergeySilaev

    [quote comment="98"]Ой... реально просто жестко опечатался и не обратил внимания, когда текст проверял. Спасибо!

    Хотя все же 16 по 2.5" тоже было бы вполне реалистично :) [/quote]

    Ну хорошо, что опечатка уже случилась здесь, а не в заказе поставщику например :) Хотя на мой взгляд, 16 hdd — это уже storage, а не сервер. Даже HP в серии Proliant насколько я видел более 8 2,5 SAS HDD не запихивают.

    У меня возник другой вопрос: под Net App's точно подразумевалось Network Application, а не Network Appliance? Потому что в презентации (www.slideshare.net/techdu...d-approaches/138) NetApp`s сделаны тем же символом, что и Disks на следующем слайде. А NetApp это известная марка серверов хранения. Но тут возможно меня преследуют устройства с работы, т.к. совсем недавно при чтении документации я как раз допустил подобную неточность :)

  • SergeySilaev

    И на 135-том слайде NetApp используется именно в значении серверов хранения:

    «The big appliances self heal

    -NetApp, StorEdge, etc»

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

    [quote comment="102"]И на 135-том слайде NetApp используется именно в значении серверов хранения:

    "The big appliances self heal

    -NetApp, StorEdge, etc[/quote]"

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

    Исправил на, надеюсь, более соответствующий истине вариант :)

  • Unatine

    имхо вполне нормальные точки для бэкапа (правда там не указан какой бэкап делается в 1,3 и так далее дней :) ). между ними может быть и инкрементальный.

    нетапы ****** :( наши админы с мучаются хронически... то одно отвалится не понятно по какой причине, то другое. теже хитачи получше будут в этом плане... правда и дороже :/

  • Pingback: Веб-обзор #10 - бизнес, бизнес, немного РНР, совсем немного PostgreSQL и архитектуры Flickr и Google на русском. | Alpha-Beta-Release Blog

  • CM

    ServerIron, как мне кажется, это не сервер, а лоадбалансинговый коммутатор от Extreme Networks

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

    [quote comment="111"]ServerIron, как мне кажется, это не сервер, а лоадбалансинговый коммутатор от Extreme Networks[/quote]

    Да, согласен, слово «сервер» в этой фразе я сам придумал, видимо в попытках избавиться от варианта «Пара ServerIron'ов». Сверился с оригиналом, исправил.

  • Ilya Tyshchenko

    не догоняю, как в 2 юнита помешается 16 дисков. 6 — ещё куда ни шло. 12 — да, наверное реально, но тогда они не хотсвоп. но 16 ??? что там будет с охлаждением у таких корпусов ?

    sunfire x4500 — 48 дисков в 4-х юнитах . никаких специальных требований к охлаждению ...

  • http://www.nest.org.ru Ilya Tyshchenko

    А по теме — отлично , спасибо за перевод !

  • proforg

    [quote comment="96"]Бывает, SAS называются — Serial Attached SCSI[/quote]

    ух ты ! и правда есть уже 73 гиговые такие. остал от жизни :) стоят правда от $500 штучка — то есть считай в 2 раза дороже чем 3.5 ".

  • proforg

    sunfire x4500 — в 4х юнитах куда прощще всё остальное скомпоновать, чем в 2х юнитах. это относится и к охлаждению.

    но вообще такое расположение — количество дисков на юнит, это скорее исключение из правил. Обычно для 1 юнита 3 диска, для 2х — 6-9.

  • http://www.nest.org.ru Ilya Tyshchenko

    Сейчас «ковыряю» машинку x4150 — в ней в одном юните восемь дисков . Так что исключений все больше .

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

    [quote comment="122"]Сейчас «ковыряю» машинку x4150 — в ней в одном юните восемь дисков . Так что исключений все больше .[/quote]

    2.5"? или 3.5", но не hotswap?

    Я что-то плохо себе представляю как в 1U может 8 по 3,5" hotswap влезть, разве что с двух сторон...

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

    Посмотрел только что в Google, оказалось, что 8 по 2,5" там.

  • http://udobnee.net/ удобно

    Хорошая статья. Спасибо за материал и за все комментарии

  • http://www.ozti.org Георгий

    Спасибо за перевод, очень интересно. Также простым пользователям хочется почитать о чем то более близком к нам, как устроены аналогичные сервисы, которые под силу создать простым людям

  • http://chasinggoogle.blogspot.com spectator

    Сложно-то все как...

  • http://sovety.blogspot.com/ jetxee

    Спасибо за перевод весьма любопытной статьи. И вообще блог интересный. Подписался :)

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

    Спасибо всем за отзывы! Очень рад, что вы не пожалели о том, что заглянули ко мне в блог :)

  • Minor

    Спасибо!

  • Денис

    Очень интересно.

    Радуюсь, когда вижу новую статью на этом сайте

  • Nop

    Отсутствие состояний системы позволяет более выполнять модернизации не моргнув и глазом.

    Что подразумевается под состояниями системы? Можно пример?

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

    [quote comment="147"]Что подразумевается под состояниями системы? Можно пример?[/quote]Сомневаюсь, что я обладаю достаточной компетенцией в этом вопросе, чтобы приводить примеры, да и вообще я до сих пор сомневаюсь в адекватности своего перевода некоторых моментов (вот эта история со «stateless» — один из них).

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

    P.S.: Кстати спасибо за цитату — я в ней ошибку увидел очередную :)

  • Nop

    Спасибо. Попробую разобраться с этим в оригинале.

  • http://darchik.com darchik

    Спасибо! Очень позновательно :) )) Пригодиться в будущем, уверен :)

  • http://www.romero.ru Студент в Америке

    Иван, не хочешь написать про facebook? Тема нынче интересная :)

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

    [quote comment="164"]Иван, не хочешь написать про facebook? Тема нынче интересная :) [/quote]Дело скорее не в желании, а в наличии соответствующей информации и достаточного количества свободного времени, с которым в последнее время у меня туговато...

  • http://www.webcreator.kiev.ua Yevhen

    Это бы почитать однокласиникам.ру. А то недавно видел статью где они говорят, что у низ задействовано почти 200 машин и типа на это тратят миллионы в год )

  • http://neuronus.blogspot.com Neuronus

    Иван, когда то, Вы спрашивали меня о деталях репликации базы данных и на чем построен наш центральный реестр пользователей... Отвечаю на Ваши вопросы neuronus.blogspot.com/200...picturetown.html

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

    [quote comment="1078"]Иван, когда то, Вы спрашивали меня о деталях репликации базы данных и на чем построен наш центральный реестр пользователей... Отвечаю на Ваши вопросы neuronus.blogspot.com/200...e]Спасибо, было интересно почитать :)

    Жалко правда, что «секреты» выданы далеко не все, да и те что «выданы» — лишь в общих чертах.

    Впрочем, ожидать чего-то большего было бы глупо ;)

  • Neuronus

    [quote comment=\\\"1080\\\"]Жалко правда, что \\\"секреты\\\" выданы далеко не все, да и те что \\\"выданы\\\" — лишь в общих чертах.

    Впрочем, ожидать чего-то большего было бы глупо ;) [/quote]

    Благодарю за понимание!

  • Pingback: Flickr хранит фотографии на NetApp | about NetApp

  • Pingback: Сравнение архитектур крупных интернет проектов | DD Home

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