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

Redis Performance Tanks по мере увеличения количества узлов

Странная проблема. У нас есть 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 начинает подавляться? Для вас это похоже на проблему на стороне клиента или сервера?

Ваши мысли очень приветствуются.