Insight IT

Информационные технологии

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

Опубликовано 1 апреля 2008, автор: Иван Блинков

Трафик, генерируемый более чем 1.2 миллионами пользователей Digg, знаменитых своей жаждой информации, способен загнать любой невинный сайт за рамки его вычислительных ресурсов и пропускной способности канала. Как же сам Digg справляется с такой нагрузкой?

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

Этот текст — перевод статьи, автор — Todd Hoff.

Платформа

Статистика

  • Проект стартовал в конце 2004 года на одном сервере под управлением Linux с использованием Apache 1.3, PHP 4 и MySQL 4.0 (со стандартной системой хранения данных — MyISAM).
  • Более 1.2 миллиона пользователей.
  • Более 200 миллионов просмотров страниц в месяц.
  • 100 серверов расположены в нескольких датацентрах, из них:
    – 20 серверов баз данных;
    – 30 веб-серверов;
    – несколько поисковых серверов, использующих Lucene;
    – остальные используются для обеспечения избыточности.
  • 30 GB данных.
  • Ни одна из проблем, с которыми пришлось столкнуться проекту не была связана с PHP, в основном они касались базы данных.
  • Легковесная природа PHP позволила переместить вычислительные работы из базы данных в приложение для улучшения производительности.

Что внутри?

  • Балансировщик нагрузки равномерно распределяет запросы между PHP серверами.
  • MySQL используется по принципу master-slave:
      Сервера, обрабатывающие большое количество транзакций, используют движок InnoDB.
      Сервера, выполняющие аналитическую обработку данных в реальном времени, используют MyISAM.
      Снижения производительности при переходе с MySQL 4.1 на версию 5 замечено не было.
  • Для кэширования используется Memcached.
  • Используется сегментирование баз данных.
  • Особенности использования Digg существенно облегчают процесс масштабирования. Большинство посетителей просто просматривают главную страницу и уходят. Это приводит к тому, что 98% запросов к базе данных являются операциями чтения. Такое соотношение операций чтения и записи позволяет не беспокоиться о комплексной работе по проектированию операций записи, что позволяет намного проще масштабировать проект.
  • Возникали проблемы, связанные с системой хранения данных, которые сообщали, что данные уже записаны на диск, когда на самом деле это было не так. Контроллеры делали это для создания впечатления более высокой производительности. Но на практике это приводило лишь к проблемам с целостностью данных. Это достаточно распространенная проблема, которую порой не так уж просто решить, правда все зависит от используемого оборудования.
  • Для облегчения нагрузки на базы данных используется кэшрование и APC PHP Accelerator.
  • С использованием рабочих потоков Apache2, FastCGI и PHP акселератора возможно избежать необходимости каждый раз заново интерпретировать и компилировать PHP скрипты: скрипт компилируется только при первом обращении, что существенно ускоряет скорость его выполнения при последующих обращениях.

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

  • Используйте возможность выбора движка для MySQL. Если Вам нужны транзакции — используйте InnoDB, если нет — MyISAM. Например, если на master сервере расположены транзакционные таблицы, то для slave серверов можно использовать и MyISAM.
  • В определенный момент рост стал невозможен путем добавления дополнительной оперативной памяти, пришлось продолжать рост путем изменения архитектуры.
  • Люди часто жалуются, что Digg медлителен. Скорее это вызвано их огромными JavaScript библиотеками, чем работой их серверной системы.
  • Стоит тщательно выбирать какие именно приложения развертывать. Они приложили все усилия, чтобы не использовать приложения, требующие больших вычислительных мощностей. Очевидно, что Digg работает на совершенно стандартной LAMP архитектуре, но тем не менее реализована она достаточно интересно. У инженеров часто возникает желание реализовать какой-либо дополнительный функционал, но всегда стоит иметь ввиду, что они могут разрушить инфраструктуру, если она не сможет расти теми же темпами. Так что с этим стоит повременить до тех пор пока система сможет выдерживать все необходимые нагрузки. Это приводит к планированию ресурсов, особенно большое внимание этому аспекту уделяет Flickr.
  • Вам остается лишь догадываться, сможет ли Digg удержать свои позиции, если и дальше будет ограничивать добавление новых возможностей, или уступит более активно развивающимся сервисам социальных закладок? Возможно если бы была возможность увеличивать масштабы более простыми методами, более быстрое добавление новых функций и возможностей позволило бы более эффективно конкурировать на этом рынке? С другой стороны, просто добавление новых возможностей может и не поменять ситуацию кардинальным образом.
  • Основные проблемы с масштабируемостью и производительностью связаны с обработкой данных и в большинстве случаев они не зависят от используемого языка программирования. Вы столкнетесь с ними при работе с Java, PHP, Ruby, или подставьте сюда Ваш любимый язык программирования.

13 комментариев на запись “Архитектура Digg”

mult2 апреля 2008 в 18:06

каждый раз с интересом читаю про архитектуры посещаемых порталов. (-: спасибо.

Green2 апреля 2008 в 21:09

Удивляет, что ни один из проектов, которые Вы освещаете не использует Perl, Ruby, Python...

Складывается ощущение, что все крупные проекты написаны на php, а это совсем не так

Иван Блинков2 апреля 2008 в 21:38

[quote comment="464"]Удивляет, что ни один из проектов, которые Вы освещаете не использует Perl, Ruby, Python...

Складывается ощущение, что все крупные проекты написаны на php, а это совсем не так[/quote]Видимо Вы просто не все посты этого блога читали:

  • Python: YouTube'а мало?
  • Ruby: из той, информации, что мне удалось найти могу назвать лишь одно из популярнейших Facebook-приложений.
  • Perl: самое крупное, что приходит в голову из проектов полностью на Perl — www.livejournal.com, пока о нем я лишь упоминал в «Обзоре memcached». Свою лепту этот язык внес и в некоторые другие проекты, о которых я упоминал, списочек можно найти на странице соответствующего тега.
  • Иван Блинков3 апреля 2008 в 10:35

    [quote comment="468"]>30 GB данных.

    У меня на винте и то больше. Опечатка ?[/quote]

    Если и опечатка, то не здесь, а в исходной публикации интервью.

    А вообще сравнение с «у меня на винте» здесь мягко говоря неуместно, по сути же Digg — просто коллекция ссылок с описанием, маленьким thumbnail'ом, обсуждением и рейтингом. Могу предположить что это имелся ввиду суммарный размер баз данных на какой-то конкретный момент времени в прошлом. Хотя сложно сказать, я бы и в цифру, измеряемую терабайтами поверил...

    Green3 апреля 2008 в 18:13

    [quote comment="465"]списочек можно найти на странице соответствующего тега[/quote]

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

    Хотя тот же Яндекс использует около 100 серверов Apache+mod_perl для отдачи только главной страницы

    Smen4 апреля 2008 в 8:53

    Иван, отличный блог, многие нужные моменты прояснились, спасибо!

    Вопрос оффтоп, отписал на почту!

    Иван Блинков4 апреля 2008 в 9:35

    [quote comment="470"][quote comment="465"]списочек можно найти на странице соответствующего тега[/quote]

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

    Хотя тот же Яндекс использует около 100 серверов Apache+mod_perl для отдачи только главной страницы[/quote]Количество пространства на каждой странице несколько ограничено, так что приходится выводить только самые популярные метки, а не все ~250.

    [quote comment="472"]Иван, отличный блог, многие нужные моменты прояснились, спасибо!

    Вопрос оффтоп, отписал на почту![/quote]Пожалуйста, сейчас схожу почитаю.

    Иван Блинков4 апреля 2008 в 9:47

    [quote comment="472"]Вопрос оффтоп, отписал на почту![/quote]Какую именно? Может быть я слепой, но я ничего похожего там (на контактной почте со страницы «Об авторе») не вижу :(

    Гвидон Маляров28 апреля 2008 в 18:59

    [quote] Ни одна из проблем, с которыми пришлось столкнуться проекту не была связана с PHP, в основном они касались базы данных.

    [/quote]

    интересно узнать — какого рода были проблемы, почему проблем не было с php...что вообще они за проблему считают?:)

    digg.kz15 апреля 2009 в 3:58

    Архитектура Digg...

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

    Aracool19 января 2010 в 11:26

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

    Оставить комментарий