Выбор соответствующего механизма кэширования

Моя установка:

  • 4 веб-сервера
  • Статический сервер содержания (NFS монтируются),
  • Серверы на 2 дб
  • 2 "делают волшебные" серверы
  • Еще 8 машин, определяемых многоцелевой.

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

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

Содержание дескрипторов, которое мы генерируем и затем статически служим. Каналы RSS, старые данные отчета, пользователь определенные страницы, и т.д... Это все кэшируется к статическому серверу.

Memcached

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

APC

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

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

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

В целом, какие типы данных должны быть сохранены где? Это устанавливает, даже имеют смысл?

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

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

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

5
задан jasonbar 2 March 2010 в 18:13
поделиться

1 ответ

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

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

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


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

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

Например, мы можем:

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


Пара попутных замечаний:

  • Если несколько серверов пытаются записать в один и тот же файл, который совместно используется через NFS, могут возникнуть проблемы, поскольку в NFS нет механизма блокировки (насколько я помню)
  • APC можно использовать для кэширования данных, да - но самая важная причина использовать его - это возможность кэширования опкодов (может сэкономить большое количество CPU на серверах PHP)
  • Записи в memcached ограничены в размере: вы не можете хранить записи размером более 1M (я иногда сталкивался с этой проблемой - редко, но это не очень хорошо, когда это происходит ^^ )
3
ответ дан 15 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: