Архитектура Digg
Опубликовано 1 апреля 2008, автор: Иван Блинков
Трафик, генерируемый более чем 1.2 миллионами пользователей , знаменитых своей жаждой информации, способен загнать любой невинный сайт за рамки его вычислительных ресурсов и пропускной способности канала. Как же сам Digg справляется с такой нагрузкой?
Источники информации
Этот текст — перевод , автор — .
Платформа
Статистика
- Проект стартовал в конце 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”
спасибо ...
всегда полезно знать архитектуру таких сервисов как digg ...
каждый раз с интересом читаю про архитектуры посещаемых порталов. (-: спасибо.
Удивляет, что ни один из проектов, которые Вы освещаете не использует Perl, Ruby, Python...
Складывается ощущение, что все крупные проекты написаны на php, а это совсем не так
[quote comment="464"]Удивляет, что ни один из проектов, которые Вы освещаете не использует Perl, Ruby, Python...
Складывается ощущение, что все крупные проекты написаны на php, а это совсем не так[/quote]Видимо Вы просто не все посты этого блога читали:
>30 GB данных.
У меня на винте и то больше. Опечатка ?
[quote comment="468"]>30 GB данных.
У меня на винте и то больше. Опечатка ?[/quote]
Если и опечатка, то не здесь, а в исходной публикации интервью.
А вообще сравнение с «у меня на винте» здесь мягко говоря неуместно, по сути же Digg — просто коллекция ссылок с описанием, маленьким thumbnail'ом, обсуждением и рейтингом. Могу предположить что это имелся ввиду суммарный размер баз данных на какой-то конкретный момент времени в прошлом. Хотя сложно сказать, я бы и в цифру, измеряемую терабайтами поверил...
[quote comment="465"]списочек можно найти на странице соответствующего тега[/quote]
Просто в облаке тегов упоминания упоминаний об этих языках нет...
Хотя тот же Яндекс использует около 100 серверов Apache+mod_perl для отдачи только главной страницы
Иван, отличный блог, многие нужные моменты прояснились, спасибо!
Вопрос оффтоп, отписал на почту!
[quote comment="470"][quote comment="465"]списочек можно найти на странице соответствующего тега[/quote]
Просто в облаке тегов упоминания упоминаний об этих языках нет...
Хотя тот же Яндекс использует около 100 серверов Apache+mod_perl для отдачи только главной страницы[/quote]Количество пространства на каждой странице несколько ограничено, так что приходится выводить только самые популярные метки, а не все ~250.
[quote comment="472"]Иван, отличный блог, многие нужные моменты прояснились, спасибо!
Вопрос оффтоп, отписал на почту![/quote]Пожалуйста, сейчас схожу почитаю.
[quote comment="472"]Вопрос оффтоп, отписал на почту![/quote]Какую именно? Может быть я слепой, но я ничего похожего там (на контактной почте со страницы «Об авторе») не вижу
[quote] Ни одна из проблем, с которыми пришлось столкнуться проекту не была связана с PHP, в основном они касались базы данных.
[/quote]
интересно узнать — какого рода были проблемы, почему проблем не было с php...что вообще они за проблему считают?:)
Архитектура Digg...
Трафик, генерируемый более чем 1.2 миллионами пользователей Digg, знаменитых своей жаждой информации, способен загнать любой невинный сайт ...
Очень интересный пост, меня давно интересовало как работают такие гиганты!