Странная проблема. У нас есть 6 узлов за балансировщиком нагрузки. Это высокопроизводительные VPS под управлением Ubuntu. На отдельном узле запускаем Redis. На других узлах работает MySQL. Вся установка LAMP содержит Magento.
Переходя от файлового кеша к центральному кешу Redis, мы начали изменять каждый узел Magento сначала один за другим, чтобы использовать Redis через Cm_Cache_Backend_Redis. Поскольку Redis используется двумя серверами, все работает нормально. Поэтому мы решили переключить и остальные 4 сервера. Но затем производительность начинает резко снижаться. По данным New Relic, снижение производительности достигает 300%. Время отклика приложения колеблется от разумных 900–1200 мс до 3 000 + мс. Время загрузки страницы становится ужасным, скачет минимум на 2 секунды, а часто и больше. При высокой пиковой нагрузке (200 пользователей на 6 серверов) регресс еще более значительный.
По трассировке мы начинаем видеть, что с Redis не все хорошо.
Category Slowest components Count Duration %
Custom Varien_Simplexml_Element::asNiceXml 578 19,200 ms 33%
Custom Varien_Simplexml_Element::extendChild 673 10,200 ms 18%
Custom Cm_RedisSession_Model_Session::read 1 5,070 ms 9%
Custom Varien_Simplexml_Element::extend 76 4,380 ms 8%
Custom Varien_Simplexml_Element::hasChildren 69 2,690 ms 5%
Custom Mage_Core_Model_Config::loadModulesConfiguration 1 2,270 ms 4%
Remainder Remainder 1 13,700 ms 24%
Total time 57,500 ms 100%
Загрузка модуля XML и основной конфигурации становится крайне медленной, сеансы Redis, которые обычно бывают быстрыми, теперь мгновенно становятся медленными. Вся партия скатывается до медленного ползания.
Сервер Redis - это установка Ubuntu по умолчанию, которую мы прямо сейчас не контролируем. Клиентская сторона на 6 узлах, которые мы контролируем. Прямо сейчас он использует встроенный автономный клиент Credis, который мы собираемся заменить клиентом phpredis PECL, что должно дать некоторый прирост производительности.
Все остальное по умолчанию согласно https://github.com/colinmollenhour/Cm_Cache_Backend_Redis
Надеюсь, обмен клиента будет иметь значение, но пока что мы хотим услышать дальнейшие предложения. Почему 2 узла работают нормально и быстро, а на 6 начинает подавляться? Для вас это похоже на проблему на стороне клиента или сервера?
Ваши мысли очень приветствуются.