Мне нужно обслуживать большое количество очень маленьких статических файлов (например, 1 миллион, ~ 1 КБ) с VPS. В настоящее время я предпочитаю Nginx, но меня больше всего беспокоит проблема с медленными дисками VPS.
Могу ли я использовать подход, который бы обслуживал эти файлы из локальной памяти, а не на диск? Я понимаю, что ОС (в данном случае Debian) будет хранить «горячие» файлы в памяти, но я беспокоюсь, что это будет сложно контролировать или влиять на них. Может, есть способ заставить Nginx работать по памяти? Или какой-то другой подход совсем?
Вы можете поместить папку, в которой они находятся, в память, смонтировав ее как раздел tmpfs.
Например: mount -t tmpfs -o size = 128m tmpfs / mnt / tmp
Ramdisk - хорошая идея. Вы также можете получить рад, и попробуйте vmtouch чтобы заблокировать каталог в кеше файловой системы. Это более элегантно, поскольку его можно демонизировать и устранить проблему непостоянных RAM-дисков.
Lock all files in a directory into physical memory:
vmtouch -dl /var/www/html/directory-of-small-static-files/
Я понимаю, что ОС (в данном случае Debian) будет хранить «горячие» файлы в памяти, но я беспокоюсь, что это будет сложно контролировать или влиять на них.
Это верно. Вы можете повлиять на это, настроив параметры виртуальной памяти;
Читайте о swappiness Вот. Установите его в 1 или 0 в вашем случае:
echo 0 > /proc/sys/vm/swappiness
# This will set it permanently, to continue after reboot
sysctl -w vm.swappiness=1
Вы можете убедиться, что давление в кэше составляет 100 или более;
echo 100 > /proc/sys/vm/vfs_cache_pressure
# Set permanently for after restart
sysctl -w vm.vfs_cache_pressure=100
Прочтите обо всех этих вариантах и многом другом Вот.
Другой вариант - поместить все ваши файлы на ramdisk; раздел, который существует в памяти вашего VPS. См. Инструкции Вот и Вот. Очевидно, что для этой опции имейте в виду, что RAM-диск уничтожается при перезагрузке. Он будет воссоздан пустым, поэтому при запуске создайте и смонтируйте RAM-диск, а затем скопируйте на него файлы. Не делайте это единственной их копией :)
Ненавижу быть наоборот, но не делай этого. Предполагая, что вы используете Linux, операционная система в любом случае будет кэшировать часто используемые файлы в памяти, которая не требуется ОС более срочно. Если вы попытаетесь переосмыслить этот процесс, например, используя ramdisk, как предлагает Джерун, вы будете правы или неправы в отношении того, что ваши файлы должны находиться в памяти больше, чем то, что в противном случае могло бы сохранить там ядро.
Если вы правы, то все, что вы сделали, это то, что система ВМ и так собиралась делать за вас.
Если вы ошибаетесь, тогда какая-то другая часть памяти, которая сместила бы ваши файлы, вместо этого будет сброшена для обмена, и получение этих страниц из подкачки приведет к большей нагрузке на производительность на вашем сервере, чем получение ваших файлов из ФС сделал бы.
Код ВМ в Linux тщательно и интенсивно настраивается. Он не всегда делает это правильно, но имеет тенденцию делать это правильно настолько большую часть времени, что вам нужна действительно веская причина, чтобы отменить это.