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

Стратегия кеширования

У меня есть 5 выделенных серверов, на каждом из которых работает одна и та же версия приложения. Я хочу значительно улучшить нашу стратегию кеширования, чтобы немного снизить нагрузку на MySQL, поскольку это наше основное узкое место. Все сайты являются LAMP, и каждый сервер имеет примерно 20 размещенных сайтов. Я планирую использовать Zend_Cache для запуска кеширования, и у него есть несколько адаптеров, которые я могу использовать - основные из них - Memcached / APC / File и SQLlite. У меня есть ряд вещей, которые я хочу кэшировать, но в основном они попадают в область либо больших наборов результатов БД, либо фрагментов HTML. Для фрагментов HTML решение на основе файлов могло бы показаться идеальным, но ряд людей упомянули, что это может привести к значительным накладным расходам ввода-вывода, особенно если это было сделано на большом количестве сайтов, как это было бы. Мне также нравится идея Memcached из-за ее скорости - у меня была смутная идея попробовать и настроить выделенный сервер Memcached исключительно для обработки кеширования, и все мои другие серверы будут использовать это, хотя я не уверен, сколько из это хорошая идея, и какая часть ее скорости будет потеряна из-за того, что ОЗУ не будет локально непосредственно для машины, выполняющей запрос.

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

Спасибо.

Похоже, вы уже выбрали решение и теперь просто пытаетесь разобраться в деталях.

У меня 5 выделенных серверов ... ЛАМПА

Итак, у вас уже есть циклическая репликация mysql master-master, запущенная на всех 5 хостах, HTTP-контент обслуживается с соответствующими инструкциями кеширования через обратные прокси в общем кластере?

большие наборы результатов БД или фрагменты HTML

И вы оптимизировали схему для больших наборов результатов и используете что-то вроде кэширования ESI для фрагментов HTTP.

У меня была смутная идея попробовать настроить выделенный сервер Memcached исключительно для обработки кеширования

Не говоря уже о том, что это приведет к возникновению единой точки отказа, насколько это более эффективно, чем один сервер СУБД с большим количеством кэширования набора результатов?

какая часть его скорости будет потеряна из-за того, что ОЗУ не будет непосредственно локальным

Почему бы тебе не измерить это и не узнать?

Любое решение для кэширования на основе памяти не принесет большой (какой-либо?) Выгоды по сравнению с кешем результатов mysql - и если вы пытаетесь кэшировать большие наборы данных, вы быстро очистите небольшой кеш памяти.

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