Выбор подходящего механизма кэширования - PullRequest
5 голосов
/ 01 марта 2010

Моя настройка:

  • 4 веб-сервера
  • Статический контент-сервер (монтирование NFS)
  • 2 дБ серверов
  • 2 сервера "сотвори магию"
  • Дополнительные 8 машин обозначены как многоцелевые.

Я пишу оболочку для трех механизмов кэширования, чтобы их можно было использовать в несколько нормализованной форме: Файловая система, Memcached и APC. Я пытаюсь придумать примеры для использования (и что на самом деле положить в каждый кеш).

Файловая система

Обрабатывает контент, который мы генерируем, а затем статически обслуживаем. RSS-каналы, старые данные отчетов, пользовательские страницы и т. Д. ... Все это кэшируется на статическом сервере.

Memcached

Данные сеанса PHP, результаты запросов MySQL, как правило, вещи, которые должны быть доступны в наших системах. У нас есть 8 машин, которые могут быть включены в пул серверов.

APC

Понятия не имею. Два сервера «сделай магию» не являются частью какой-либо распределенной системы, поэтому вполне вероятно, что они могут кешировать результаты запросов в APC и работать оттуда. После этого я не могу думать ни о чем.

Кэширование запросов

Учитывая характер нашего использования SQL, кэширование запросов снижает производительность . Я отключил это.

В общем, какие типы данных должны храниться где? Имеет ли смысл эта настройка?

Есть ли какое-либо применение для кэширования данных APC в распределенной системе (я не могу вспомнить ни одного)?

Я что-то упускаю, что могло бы сделать вещи проще или эффективнее?

Редактировать: Я наконец понял, что говорил Паскаль. У меня застряло в голове, что я буду перемещать только часть моей конфигурации / что угодно в APC и все равно загружать оставшуюся часть файла с диска. Любые другие предложения?

1 Ответ

3 голосов
/ 01 марта 2010

Я использую тот же самый механизм кэширования для некоторых проектов; и мы используем APC + memcached в качестве систем кэширования.

Существует два / три основных различия между APC и memcached, когда дело доходит до кэширования данных:

  • Доступ к APC немного быстрее (примерно в 5 раз быстрее, чем memcached, если я правильно помню) , поскольку он только локальный - то есть сеть не задействована.
  • Используя APC, ваш кэш дублируется на каждом сервере; используя memcached, дублирование между серверами отсутствует
    • , что означает, что memcached обеспечивает одинаковую версию данных на всех серверах; в то время как данные, хранящиеся в APC, могут отличаться на каждом сервере


Мы обычно используем:

  • APC для данных, к которым нужно обращаться очень часто, быстро генерировать и:
    • либо часто не изменяется
    • или не имеет значения, если он не идентичен на всех серверах
  • memcached для данных, создание которых занимает больше времени и / или используется меньше.
    • Или для данных, для которых изменения должны быть видны немедленно (т. Е. При записи в БД кэшированная запись также регенерируется)

Например, мы могли бы:

  • Используйте APC для хранения переменных конфигурации:
    • Не часто меняются
    • Доступ очень часто
    • малы
  • Использовать memcached для содержимого статей (например, для приложения CMS) :
    • Не так уж и мало, и их много, что означает, что может потребоваться больше памяти, чем у нас на одном сервере
    • Довольно сложно / тяжело генерировать


Пара сиденотов:

  • Если несколько серверов пытаются записать в один и тот же файл, который используется совместно с NFS, могут возникнуть проблемы, так как в NFS нет механизма блокировки (насколько я помню)
  • APC можно использовать для кеширования данных, да, но наиболее важной причиной его использования является функция кэширования кода операции (может сэкономить большое количество ЦП на серверах PHP)
  • Записи в memcached ограничены по размеру: вы не можете хранить записи, которые больше 1M (я иногда сталкиваюсь с этой проблемой - редко, но это не хорошо, когда это происходит ^^)
...