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

Memcache - проблемы в распределенной среде с множеством узлов

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

По сути, у нас уже более двух лет работает многоузловое memcached-кольцо, и по большей части без проблем. Установка memcache была недавно перенесена на выделенные серверы, и ее емкость была увеличена втрое (с 2x 1 ГБ до 2x3 ГБ). Сначала у нас были проблемы с тем, что я считаю проблемами с тем, как библиотеки php общались с серверами, либо проблемы с упорядочением списка серверов, либо их неправильный запуск.

Серверы «казались» работающими правильно, но казалось, что ключи хранятся на нескольких серверах, и истечение срока действия не приведет к истечению срока действия всех экземпляров значения.

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

Тем не менее, я наблюдал за событиями в течение последних нескольких недель и заметил, что первый сервер, похоже, подвергается атакам намного, намного чаще, чем второй (инструмент мониторинга кэша памяти PHP сообщает об одном усреднении 1200 просмотров второй, а второй только на 500).

Кто-нибудь может объяснить:

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

заранее спасибо

Вы уверены, что внешние интерфейсы, которые взаимодействуют с Memcached, правильно синхронизировали записи конфигурации для вашего пула?

Могут ли все серверы установить чистое соединение с узлом Memcached, у которого есть проблемы с подключением?

Убедитесь, что у вас также включен Memcached :: OPT_LIBKETAMA_COMPATIBLE.

По поводу конфигурации; если вы храните большие объекты, сжатие / igbinary ускорит работу на конце сетевого ввода-вывода, очевидно, что может быть недостаток, поэтому каждый случай отличается. Бенчмаркинг - ключ к успеху.

Если ваши ключи имеют неравные шаблоны доступа, вы увидите неравный трафик для каждого узла memcached. например Если у вас есть 2 ключа, один из которых a получение / установка 500 раз в секунду и один b который получает / устанавливает 250 раз в секунду, тогда узел, содержащий a будет иметь в два раза больше трафика, чем узел, содержащий b.

В моем случае у нас было 8 узлов memcached с несколькими тысячами ключей. Один из этих ключей выполнял около 800 операций доступа в секунду при пиковом трафике, а почти все другие ключи выполняли менее 1 операций загрузки в секунду. Узел memcached, у которого был занят ключ, демонстрировал значительно больший трафик, чем другие.

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

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