В настоящее время мы работаем с требованием, чтобы первый ответ от веб-сервера был в Великобритании менее чем за 200 мс. В настоящее время под 2 выделенными веб-серверами под балансировщиком нагрузки и 1 дБ-сервером мы находимся на 800 мс.
На данный момент сайт имеет менее 5 клиентов, 2 продукта, 4 категории, на данный момент на сайте нет внешнего интерфейса, он свободен от стиля и изображений.
Он также запускается на nginx с Varnish.
Кто-нибудь может дать мне какой-нибудь совет по настройке веб-сервера? Почему наши приходят медленно? Что вы можете порекомендовать для оптимизации этого? Нужно быстрее на 400%!
configuration
performance
lukefowell
источник
источник
Ответы:
Я укушу
Вы не достигнете этих показателей без помощи Varnish или FPC (или обоих). Я бы, конечно, надеялся, что фигура также не должна включать статический контент (всякий раз, когда вы решите добавить его) - так как его почти невозможно достичь (если не считать практически никаких изображений / js / css).
Вы неправильно настроили лак.
Правильно настроенная установка Varnish обеспечит <100 мс времени загрузки страницы (мы видим ближе к <10 мс).
На самом деле, для Magento, вы должны ожидать что-то подобное,
Когда клиент не залогинен ...
Т.е. Не создав уникальный сеанс (добавление в корзину / список желаний, вход в систему и т. Д.)
Когда клиент вошел в систему ...
Т.е. Создав уникальный сеанс (залогиненный, товары в корзине и т. Д.). В этот момент лак, скорее всего, будет выключен. И если вы решили использовать ESI - в зависимости от обратных вызовов, он может поддерживать время загрузки страницы, аналогичное кешу FPC (из-за издержек начальной загрузки), или фактически увеличивать время загрузки страницы сверх того, что не кэшировано.
Это не случай настройки Varnish, это случай "вы вообще ничего не кешируете" .
Идеальные файлы конфигурации сервера Magento
Нет, ну, не совсем.
Мы работаем более 400 серверов, все чисто магазины Magento - разных размеров и емкости. И редко когда файлы конфигурации у нас на одном - будут совпадать с файлами другого. Это потому, что не все предприятия одинаковы.
Узкие места могут образовываться по разным причинам:
Так что с магазинами по всему этому спектру у каждого свой подход к более оптимальной производительности.
Решить проблемы, изложенные выше; мы намеренно избегаем просто указывать «больше / лучше оборудования»
Итак, помня об этом, вы увидите, что, вероятно, не будет конфигурационного файла Nginx, конфигурационного файла пула PHP fcgi, конфигурационного файла MySQL или конфигурационного файла Varnish, которые будут одинаковыми. Соедините это с аппаратными изменениями; доступная память, производительность ввода-вывода (HDD и сеть) и ЦП - и вы обнаружите, что есть тонкие вариации, которые приводят к желаемому увеличению производительности на 400%, но ни одного быстрого ответа вы не найдете в Интернете.
Вы можете скопировать + вставить спонсируемую Peer 1 белую бумагу Magento по производительности (мы не рекомендуем); Надеемся, что настройки не превысят вашу доступную память, ограничения потоков, состояния TCP / IP, емкость ввода-вывода и приведут к меньшей производительности, чем обычная конфигурация Apache / mod_php.
Итак, давайте продолжим.
Идеальный серверный стек Magento
Это с большей вероятностью приблизит вас к реальности. Хороший пример для демонстрации этого - показать, как настроена выделенная ОС Magento, MageStack.
Возьмите отдельные подкомпоненты, и у вас будет список наиболее оптимального / критического программного обеспечения, при правильной настройке для запуска магазина Magento. В частности:
Брандмауэр, фильтр DOS, балансировщик нагрузки, лак, Nginx, PHP, Redis, Memcached, MySQL
Поэтому, когда вы спрашиваете:
Какова ваша цель?
Достаточно лекций, как бы мы это сделали
Чтобы частично отразить ответ, данный по вине сервера , сходным образом. В вашем распоряжении 3 сервера - поэтому сначала ориентируйте их как можно более оптимально. Мы избежим высокодоступного решения, поскольку оно далеко выходит за рамки этого ответа.
Подкомпоненты, необходимые для конфигурации с несколькими серверами:
Так что мы будем многоцелевым использовать некоторые системы. Соответствие PCI-DSS диктует роль для каждого сервера. Так что с 5 ролями и 3 серверами - вы сразу нарушите правила. MageStack решает эту проблему с помощью виртуализации - вы можете сделать то же самое.
Сервер 1: балансировщик нагрузки + веб-сервер
Сервер 2: веб-сервер
Сервер 3: сервер базы данных
Без малой задержки и значительной пропускной способности сети (> 1 Гбит / с, <125 мкс), а не с общим хранилищем - вам лучше просто хранить корневой каталог хранилища на каждом компьютере и реплицировать данные либо в режиме реального времени,
ionotify
либо с использованием упущеннойcron
работа. Опять же, мы будем избегать сетевых файловых систем, таких как NFS, или реплицированных блочных устройств, таких как Gluster или DRBD, - так как требуется обширная настройка и приемлемая пропускная способность сети.Лак должен сидеть как можно ближе к передней части. Но Varnish не может расшифровать SSL. Так что объедините его с терминатором SSL; Nginx, Pound, Stunnel, Stud и т. Д. Встроенный балансировщик нагрузки в Varnish не очень хорош, но его вполне достаточно для установки двух серверов.
Nginx + PHP-FPM - это хорошо, но не пейте слишком много помощи от Nginx. Он будет работать почти так же, как и в традиционной конфигурации Apache / mod_php, вот несколько хороших прочтений о том, почему не использовать Nginx . Nginx - это хороший, очень хороший факт, но он определенно не является узким местом магазина Magento - и учитывая его сложность и отсутствие поддержки Magento. Большинство начинающих системных администраторов выиграют от использования Apache / mod_php над всем остальным. Это может показаться архаичной рекомендацией по использованию PHP-FPM, но наши тесты производительности показали, что при использовании решения Nginx производительность всего на 7% выше - при правильной настройке, Настройка и опыт, необходимые для высокопроизводительной и надежной установки Nginx / PHP-FPM, достаточно велики, чтобы превзойти Apache / mod_php. Какой бы выбор вы ни выбрали, это ваш звонок.
Сервер базы данных прост, MySQL. Но, как уже упоминалось ранее, если у вас сайт с высоким уровнем конверсии, рекомендуется конфигурация Master / Slave. Следует ли вам следовать этому подходу, можно узнать, прочитав эту статью .
Затем ваши периферийные внутренние кэши, Memcached и Redis. В небольших хранилищах хранение сессий в одном экземпляре Memcache и быстрое внутреннее кэширование в другом даст хорошие преимущества в производительности. Мы не рекомендуем хранить теги кеша в медленном бэкэнде - так как это вызывает больше проблем, чем дает. Таким образом, с настройкой Memcached вам придется отказаться от тегов кэширования . Вместо этого мы используем конфигурацию , как это .
Redis не является родным для Magento, но с расширением от Colin Mollenhour - это лучшее решение, чем Memcache, поддерживает теги кеша, хранилище сессий и даже постоянное хранилище кеша - это не так изменчиво, как Memcache . Но у него есть свои недостатки. Мы обнаружили, что в крупных производственных магазинах (> 500 заказов / час,> 30 000 уникальных единиц / час), что кэш (и теги) могут заполняться очень быстро, и как только точка насыщения была достигнута, механизм LRU несколько выходит из строя ( несмотря на различные настройки) и вызывает массивное непосредственное узкое место. Поэтому целесообразно регулярно удалять старые записи вручную.
Так какое оборудование должно быть использовано для чего?
Веб-серверы: самый быстрый ЦП, большинство ядер ЦП, соотношение 2 ГБ ОЗУ /
сервер основной БД: быстрый ЦП, самый быстрый дисковый ввод-вывод, большая часть ОЗУ
Таким образом, при многоцелевом использовании ваших 3-х машин наилучшим макетом будет:
Сервер 1: SSL Terminator -> Varnish -> Nginx / Apache> PHP
Сервер 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Сервер 3: MySQL
Что касается конкретной конфигурации каждого приложения. Ну, это зависит от технических характеристик вашего оборудования, сложности вашего магазина, вашего типа и характера посетителя, а также количества посетителей.
источник
Вы находитесь на отличном пути с этой конфигурацией кластера. Я рекомендую добавить выделенный хост кеша для Redis; выберите один с высокой мощностью процессора и большим количеством оперативной памяти (~ 64 ГБ).
Вот полный список конфигураций, которые я использовал для кластера LEMP высокой доступности, отказоустойчивого, распределенного и с балансировкой нагрузки. Он включает
app/etc/local.xml
в себяcore_config_data
таблицу и конфигурации для MySQL, php-fpm, nginx и Redis. Все работают Ubuntu 12.04 LTS 64-bit. Конфигурации включают в себя множество оптимизаций без недостатков.Особенности
Август 2013 трафик:
Веб-хосты
За резервными высокодоступными аппаратными брандмауэрами и аппаратными балансировщиками нагрузки стоят 10 хостов. Большинство статических ресурсов выгружаются в CDN.
Модули
Хост кеша
Существует два хоста, на которых выполняется Redis в конфигурации главный-подчиненный с автоматическим переключением при сбое. Три экземпляра Redis (сеансы, серверная часть и FPC) используются для увеличения пропускной способности и обеспечения точной настройки поведения постоянства.
База данных хостов
Существует два хоста, на которых работает MySQL 5.6.11 в конфигурации «главный-подчиненный» с горячим переключением при сбое.
источник
Другой должен иметь подсказку для сервера, чтобы Magento устанавливал PHP 5.4 или 5.5 с OPcache . PHP 5.4 намного быстрее, чем 5.3 ( http://www.eschrade.com/page/magento-performance-on-php-5-3-5-4-and-5-5rc3/ ).
источник
Я хочу добавить еще один важный совет, который улучшил скорость страницы magento, когда не кэшируется лаком и не включен по умолчанию (время загрузки страницы корзины изменилось с 6 до 1.5sc).
Активируйте кеш запросов mysql в /etc/mysql/my.conf
cache_type включает его, размер кеша - это значение, используемое кешем в памяти, а ограничение кеша - это максимальный размер результата запроса к кешу.
источник
С нашей текущей конфигурацией мы получаем начальный ответ за 400 мс и завершение документа за 2 секунды (используя стандартное соединение 5 Мбит / с). Размер нашей домашней страницы составляет 1 МБ.
Наша установка основана на AWS следующим образом: у нас есть экземпляр ec2 с балансировщиком нагрузки, подключенным к базе данных RDS (с аварийным переключением). Мы также реализовали полностраничный кеш с бэкэндом Redis-кеша как для хранения кеша, так и для хранения сессий.
В среднем у нас есть 300-400 посетителей в день, но с включенным кэшированием redis у нас было минимальное использование ресурсов ec2 при сохранении скорости и снижении затрат.
Причина, по которой у нас есть балансировщик нагрузки, заключается в том, что ec2 настроен на автоматическую загрузку нового экземпляра, если при редком случае у нас возникают всплески трафика, которые не могут быть обработаны текущей установкой.
источник