Я укушу
Этот первый ответ от веб-сервера должен быть получен в Великобритании менее чем за 200 мс.
В настоящее время на сайте нет внешнего интерфейса, он свободен от стиля и изображений.
Вы не достигнете этих показателей без помощи Varnish или FPC (или обоих). Я бы, конечно, надеялся, что фигура также не должна включать статический контент (всякий раз, когда вы решите добавить его) - так как его почти невозможно достичь (если не считать практически никаких изображений / js / css).
Мы входим в 800 мс.
Он также запускается на Nginx с Varnish.
Вы неправильно настроили лак.
Правильно настроенная установка Varnish обеспечит <100 мс времени загрузки страницы (мы видим ближе к <10 мс).
На самом деле, для Magento, вы должны ожидать что-то подобное,
Когда клиент не залогинен ...
Т.е. Не создав уникальный сеанс (добавление в корзину / список желаний, вход в систему и т. Д.)
--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
Uncached Mage default cache Partial FPC cache Total FPC cache Varnish
Когда клиент вошел в систему ...
Т.е. Создав уникальный сеанс (залогиненный, товары в корзине и т. Д.). В этот момент лак, скорее всего, будет выключен. И если вы решили использовать ESI - в зависимости от обратных вызовов, он может поддерживать время загрузки страницы, аналогичное кешу FPC (из-за издержек начальной загрузки), или фактически увеличивать время загрузки страницы сверх того, что не кэшировано.
--1.4s--------0.8s-----------------0.6s--------------
Uncached Mage default cache Total FPC cache
Это не случай настройки Varnish, это случай "вы вообще ничего не кешируете" .
Идеальные файлы конфигурации сервера Magento
Нет, ну, не совсем.
Мы работаем более 400 серверов, все чисто магазины Magento - разных размеров и емкости. И редко когда файлы конфигурации у нас на одном - будут совпадать с файлами другого. Это потому, что не все предприятия одинаковы.
Узкие места могут образовываться по разным причинам:
- Большое количество одновременных посетителей, с активными сессиями
- Жертвы «плохих» роботов-ползунов, генерирующие необходимую, бесценную нагрузку
- Высокая доля многоуровневых навигационных хитов
- Большое количество поисковых запросов
- Большой объем транзакций в час
- Плохо построенный шаблон
- Слишком много / медленных / громоздких сторонних расширений
- Устаревшие входящие ссылки, приводящие к высокой доле 404 обращений
- Пропускная способность сетевого интерфейса на пределе
- Большой / сложный каталог (много товаров / категорий / атрибутов)
Так что с магазинами по всему этому спектру у каждого свой подход к более оптимальной производительности.
Решить проблемы, изложенные выше; мы намеренно избегаем просто указывать «больше / лучше оборудования»
- Используйте FPC за пределами Varnish
- Отфильтровывать / блокировать плохих ботов на границе сети - или перенаправлять все запросы в Varnish независимо от состояния куки / URL
- Измените фондовую многоуровневую навигацию на SOLR, сделайте зависимыми многоуровневые навигационные фильтры
- Изменить поиск акций на SOLR
- Распределите нагрузку MySQL по конфигурации Master / Slave - делайте это только тогда, когда вы гарантируете, что нагрузка при просмотре поглощается Varnish / FPC
- Пересобрать шаблон
- Раздеть их
- Постоянно отслеживайте доступ к журналам и переписывайте URL-адреса в Nginx / Varnish перед доставкой. Если вы делаете это на уровне Nginx - убедитесь, что Varnish кеширует 301/302 редиректа.
- Выделите статический контент в CDN или улучшите соединение
- Добавьте больше оборудования (ну, мы должны были сказать это в какой-то момент)
Итак, помня об этом, вы увидите, что, вероятно, не будет конфигурационного файла 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
Поэтому, когда вы спрашиваете:
Какова лучшая настройка сервера Magento?
Какова ваша цель?
- Высокая доступность
- надежность
- Простота администрирования
- Представление
- Масштабируемость
Достаточно лекций, как бы мы это сделали
Чтобы частично отразить ответ, данный по вине сервера , сходным образом. В вашем распоряжении 3 сервера - поэтому сначала ориентируйте их как можно более оптимально. Мы избежим высокодоступного решения, поскольку оно далеко выходит за рамки этого ответа.
Подкомпоненты, необходимые для конфигурации с несколькими серверами:
- Брандмауэр
- Балансировщик нагрузки
- Веб сервер
- MySQL Server
- Общее хранилище
Так что мы будем многоцелевым использовать некоторые системы. Соответствие 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
Что касается конкретной конфигурации каждого приложения. Ну, это зависит от технических характеристик вашего оборудования, сложности вашего магазина, вашего типа и характера посетителя, а также количества посетителей.