Мы уже рассказывали, на чем работает MySpace и как устроены дата-центры Google, а теперь посмотрим на более мелкие проекты, такие, как Digg. Здесь нет ничего особо уникального и сделанного "по спецзаказу", как в первых двух случаях, но все равно интересно.
В момент запуска проект размещался на единственном Linux-сервере с Apache 1.3 и PHP 4.x. Для управления базами данных использовались MySQL 4.0, таблицы MyISAM и встроенный поиск MySQL. Разработчики специально старались использовать как можно больше продуктов open source, чтобы гарантировать быстрое развитие проекта без финансовых затруднений. Кроме вышеперечисленных, нашли применение свободные пакеты ImageMagick, Ispell, prototype/scriptaculous и другие. Вскоре к одному серверу добавился другой и начался бурный рост проекта.
С появлением второго сервера таблицы MyISAM пришлось дополнить таблицами InnoDB. После появления третьего сервера были установлены Apache 2.x и система master-slave репликации в MySQL, начали использовать memcached, перешли на PHP 5.x и наняли администратора баз данных.
Сейчас система серверов Digg состоит из двух относительно независимых кластеров. Отдельные PHP-серверы, которые находятся за своим распределителем нагрузки, взаимодействуют с серверами MySQL и генерируют страницы в реальном режиме времени.
Важную роль в процессе генерации страниц отводится модулю кэширования memcached, который сильно снижает нагрузку на серверы. Чтобы повысить эффективность его работы на специфичном контенте социального СМИ, был написан дополнительный программный код специально для сайта Digg.
Группа серверов MySQL подразделяется на специализированные кластеры: основной, поисковый, операционный.
Понятно, что в такой ситуации можно прибегнуть к разделению базы данных (sharding). Такой подход имеет как плюсы, так и минусы. К преимуществам шардинга относятся рост производительности и повышение управляемости/настраиваемости СУБД, а к недостаткам - повышенная нагрузка на PHP, сложное программирование и потеря поддержки SQL. Хотя MySQL поддерживает несколько видов шардинга, но Digg не использует ни один из них, потому что все эти технологии, по мнению разработчиков, были довольно сырыми на тот момент.
На сегодняшний день базы данных Digg представляют собой довольно разнородную структуру из MySQL версий 5.0.22, 5.0.27, 5.0.30 и 5.0.32, есть еще MySQL 4.1 для поддержки Cacti. Инсталляция и поддержка баз осуществляется через операционную систему Debian.
Для онлайновой OLTP-обработки транзакций используются таблицы InnoDB (они к тому же быстрее восстанавливаются после хардверных сбоев), а для аналитической OLAP-обработки - таблицы MyISAM (более быстрая загрузка и обновление версий).
Рост Digg достиг такой стадии, что перед инженерами встал целый ряд новых проблем, связанных с масштабированием инфраструктуры. Покупка и установка все больших объемов RAM перестала приносить эффект.
Анатолий АЛИЗАР
Горячие темы