Когда не следует использовать memcache - PullRequest
4 голосов
/ 04 июня 2011

В настоящее время у нас есть сайт, который выполняет множество вызовов API с нашего родительского сайта для получения сведений о пользователе и других данных.Мы планируем кэшировать все детали на нашей стороне.Я планирую использовать memcache для этого.так как это живой сайт, и поэтому мы ожидаем более интенсивный трафик в ближайшие дни (не так, как FB, но опять же мой сервер тоже не похож на них;)) поэтому мне нужно ваше мнение, с какими проблемами мы можем столкнуться, если мы собираемся использовать memcacheвстречайте ваше мнение, почему бы нам не пойти на это.Любая другая альтернатива также поможет.

Ответы [ 4 ]

14 голосов
/ 04 июня 2011

https://github.com/steveyen/community-site/blob/master/db_doc/main/WhyNotMemcached.wiki

Memcached потрясающий!Но не для каждой ситуации ...

  • У вас есть объекты размером более 1 МБ.
    • Memcached не для больших медиа и потоковых огромных объектов.
    • Рассмотрим другие решения, такие как: http://www.danga.com/mogilefs
  • У вас есть ключи размером более 250 символов.
    • Если это так, возможно, вы делаете что-то не так?
    • И, посмотрите этот список рассылки на размер ключа для предложений.
  • Ваш хостинг-провайдер не позволит вам запустить memcached.
    • Если вы работаете на низкоуровневом виртуальном частном сервере (часть компьютера), технология виртуализации, такая как vmware или xen, может оказаться не лучшим местом для запуска memcached.Memcached действительно хочет захватить и контролировать кусок памяти - если эта память выгружается ОС или гипервизором, производительность снижается.Однако использовать виртуализацию просто для облегчения развертывания через выделенные блоки.
  • Вы работаете в небезопасной среде.
    • Помните, что любой может просто подключиться к любому серверу memcached.Если вы находитесь в общей системе, будьте осторожны!
  • Вы хотите настойчивости.Или база данных.
    • Если вы действительно хотите, чтобы memcached имел интерфейс SQL, то вам, вероятно, нужно переосмыслить свое понимание кэширования и memcached.
2 голосов
/ 04 июня 2011

Memcache работает быстро, но он также может использовать много памяти, если вы хотите получить максимальную отдачу от него. Всякий раз, когда вы нажимаете на диск для ввода-вывода, вы увеличиваете задержку вашего приложения. Потяните предметы, к которым часто обращаются, и поместите их в memcache. Для моих крупномасштабных развертываний мы кешируем там сессии, потому что БД медленная, а также хранилище сессий файловой системы

Рекомендуется добавить в свой стек APC. Он кэширует файлы PHP и уменьшает общее использование памяти на страницу.

2 голосов
/ 04 июня 2011

Альтернатива: Redis

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

2 голосов
/ 04 июня 2011

Сначала вы должны реализовать общий уровень кэширования для вызовов API.В домене уровня кэширования вы можете изменить стратегию, которую вы хотите использовать.Если вы затем видите, что memcache не подходит, вы можете переключиться (и / или тестировать, как он работает по сравнению с другими бэкэндами).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...