Не так давно я запустил магазин Magento с более чем 400 тысячами товаров, более 7 000 категорий, более 2000 наборов атрибутов и более 4 миллионов атрибутов для этих продуктов.
Нам нужно было время загрузки ~ 500 мс, и оно должно было работать на одном экземпляре памяти Amazon EC2 Extra Large (около 360 долларов в месяц).
Наше решение? Реализовать Solr. Поиск теперь осуществляется с помощью Solr, при просмотре каталога мы используем фасеты, чтобы пользователи могли сузить свои результаты по нашим 4 миллионам атрибутов. Проблема с этим заключалась в том, что Magento не позволяет вам сузить результаты, если вы используете значения атрибутов "varchar". Поэтому я изменил страницу каталога, чтобы использовать фасеты Solr вместе с изменением страницы каталога, чтобы вообще не выполнять никаких запросов к БД, кроме одного. Этот запрос получит список идентификаторов, которые вернул Solr, и выполнит прямой запрос по ним. Этот плагин занял несколько дней, в основном потому, что я никогда раньше не использовал Magento.
Последнее изменение, которое мы сделали, это изменило страницу представления продукта, чтобы атрибуты были намного быстрее. Когда у вас есть миллионы атрибутов, как Magento выполнял запрос, это было очень медленно, простая модификация, и она была исправлена.
Самое замечательное, что все это было сделано с помощью пользовательских плагинов, это совсем не заняло много времени, и магазин прекрасно работает.
Редактировать: Кроме того, не забудьте установить APC (или альтернативный вариант) и настроить Magento для использования в своем бэкэнде. Это значительно увеличивает скорость, так как не только ускоряет PHP, Magento был создан для работы с определенными бэкэндами, чтобы ускорить его. Вы также можете сделать что-то вроде хранения кэша Magento в памяти (tmpfs в linux). Хранение статического контента на CDN или просто на статическом контент-сервере очень поможет, поскольку веб-сервер, обрабатывающий Magento, вообще не должен будет обрабатывать эти запросы. Вы знаете, основные вещи для запуска приложения.
Вы также можете указать Magento сохранять сеансы в Memcache, чтобы ваши сеансы находились в памяти и распределялись. После того, как вы измените Magento, чтобы избавиться от всех этих «неприятных» запросов, все остальное будет таким же, как и на любом веб-сайте. Есть множество инструментов, которые помогут вам «масштабировать» вашу систему. Просто помните, что у нас было много продуктов, и мы собирались купить около 1 000 000 продуктов. Так что, если вы делаете около 40 000 продуктов, вам, вероятно, не придётся столько хлопот.