Назад | Перейти на главную страницу

Большой, высокопроизводительный объект или хранилище ключей / значений для обслуживания HTTP в Linux

У меня есть служба, которая предоставляет изображения конечным пользователям с очень высокой скоростью, используя простой HTTP. Образы варьируются от 4 до 64 Кбайт, а всего их 1.300.000.000. Размер набора данных составляет около 30 ТиБ, а изменения (новые объекты, обновления, удаления) составляют менее 1% запросов. Количество запросов на пр. вторые варьируются от 240 до 9000 и рассредоточены практически по всему телу, при этом некоторые предметы особенно «горячие».

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

Я бы хотел, чтобы демон:

Я немного поэкспериментировал с riak, redis, mongodb, kyoto и varnish с постоянным хранением, но у меня еще не было возможности углубиться в это.

Нет волшебного решения для ваших нужд. База данных noSQL на самом деле не поможет; вам необходимо принять некоторые базовые решения относительно архитектуры вашего приложения.

а некоторые демоны обычно используют stat () / readdir () через структуру каталогов

Перемещение данных в какую-либо базу данных не поможет, если только эти демоны не должны считывать данные в первую очередь. Разве не было бы проще их перенастроить или отключить?

Если ничего не знать о вашем приложении (нет, это не приглашение к подробному описанию требований), то, вероятно, лучше использовать гибридный подход - с метаданными, хранящимися в базе данных, в то время как сам контент сохраняется в файловой системе (и есть несколько очень конкретных причин, по которым реляционная база данных может быть намного более подходящей, чем база данных NoSQL). Если бы это был я, я бы также смотрел на распределение хранилища, а не на его репликацию.

Индекс должен оставаться в памяти

Если у вас 1,3 миллиарда записей, каждая, скажем, с 300 байтами метаданных, вам потребуется около 6 ГБ памяти. Большинство из них никогда не будут доступны, но будут препятствовать доступу памяти для кэширования контента.

кеш inode / dentry изменчив в Linux

Вы пробовали его настроить?