Спасение 6 млн. файлов в условиях полного Хецнера

Доклад принят в Программу конференции
Дмитрий Симонов (Drimsim)Дмитрий Симонов
Noam Tenne (AnchorFree)Noam Tenne

1. Введение: Setup.ru — система быстрого создания сайта по шаблону.

1.1. Быстрое создание означает взрывной рост.

1.2. Так и есть — 300К зарегистрированных пользователей за год.

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

1.4. Горизонтальная масштабируемость проще всего достигается публикацией в виде статического контента.

1.5. Горизонтальное масштабирование означает ориентацию на дешевое (относительно) железо.

2. Основная часть: неочевидные грабли.

2.1. Байка про неочевидные проблемы из собственного опыта.

2.1.1. 300К пользователей создали 300К сайтов по шаблонам. Шаблоны эти не слишком простые — иначе кого они порадуют?!

2.1.2. Не слишком простой шаблон означает примерно 20 файлов типа картинка/js/css на каждый сайт.

2.1.3. Разбивка по директориям нескольких уровней для ускорения поиска файла на файловой системе.

2.1.4. Результат: 6М файлов, распределенных по 6М директорий. Поиск файла на файловой системе происходит быстро, отдача происходит быстро, все довольны.

2.2. Однако: чемодан без ручки.

2.2.1. Дешевый SATA жесткий диск — 80 iops.

2.2.2. 12М files / 80 iops = 6 часов на обход дерева директорий, 20 часов на клонирование.

2.2.3. Файловый кэш малоэффективен из-за большого объема данных: каждая директория занимает 4К, 6М * 4К = 24Г.

2.2.4. Результат: хранить и отдавать можем, управлять — нет.

2.3. Поиск решения.

2.3.1. Источник проблемы — иерархическая файловая система.

2.3.2. Решение проблемы — индексированная файловая система.

2.4. СУБД как индексированная файловая система.

2.4.1. Опробованы.

2.4.2. Hypertable: быстр, но падуч.

2.4.3. PostgeSQL: стабилен и предоставляет stream-интерфейс к blob.

2.4.4. Выбран PostgeSQL.

2.4.4.1. База с метаинформацией — 800М.

2.4.4.2. База с контентом — 500Г.

2.4.4.3. Результаты нагрузочного тестирования.

3. Выводы: планирование управления данными — это очень важно.