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

Поможет ли Memcached в этом случае?

Я работаю на большом интернет-сайте, где люди могут делиться друг с другом большими фрагментами текста. Мы храним большую часть информации в базах данных InnoDB, но фактические фрагменты текста хранятся где-то в текстовых файлах. Эти текстовые файлы имеют размер от нескольких КБ до 10 МБ каждый. Таких файлов миллионы, и мы установили хорошую структуру папок / файлов, чтобы в одной папке никогда не было слишком много файлов.

Веб-сервер (БД находится на другом), где хранятся эти файлы, представляет собой мощную машину с 4-мя дисками SAS по 15 КБ в RAID10 и оперативной памятью 24 ГБ. Мы запускаем Nginx как веб-сервер и Xcache для ускорения работы PHP. Все это работает отлично, а нагрузка обычно колеблется от 0,7 до 1,5.

Теперь я планирую использовать Memcached только для хранения «текстовых» файлов в оперативной памяти. Так что вместо того, чтобы читать их с диска каждый раз, когда кто-то запрашивает страницу, на которой должен быть загружен один из этих «текстовых» файлов. В PHP я использую file_get_contents (); чтобы загрузить "текстовые" файлы в переменную, а затем отобразить ее где-нибудь на странице.

Мой вопрос: действительно ли это снизит нагрузку, которую, по вашему мнению, реализует Memcached для этой конкретной функции, или в Linux уже есть какое-то внутреннее кеширование файлов, которое используется, когда я очень часто запрашиваю определенный файл через file_get_contents?

Я бы предположил, что чтение небольшого текстового файла с диска (или, для популярных файлов, из кэшированной ОЗУ) будет быстрее, чем разговор с memcached.

Вам придется это проверить, но помните, что Linux очень агрессивно кэширует файлы и структуры каталогов, поэтому, скорее всего, вы уже обслуживаете большую часть материала из ОЗУ.

Наблюдаете ли вы на своем веб-сервере тяжелый и медленный дисковый ввод-вывод?

Очевидный ответ заключается в том, что вы должны сами протестировать различные варианты в вашем конкретном сценарии.

Тем не менее, Linux использует всю доступную оперативную память в качестве дискового кеша, но только до тех пор, пока она не используется для других, более важных целей.

Я предполагаю, что у вас есть munin для мониторинга статистики сервера (через iostat / vmstat). Таким образом, вы можете проверить, использует ли ваша система много дискового ввода-вывода или нет. Если это так, то система неэффективна при кэшировании. Вы можете проверить Лак, если страницы, которые вы обслуживаете, в основном статичны.

Также обратите внимание на Linux-ftools. Это именно то, что вам нужно, когда вы хотите повозиться с кешированием файлов на системном уровне. Проверить это