Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart
  • записей
    60
  • комменириев
    699
  • просмотров
    25 109

Настройка сервера и производительность магазина. Почему не бывает волшебной настройки сервера.


******

1 687 просмотров

 Погделиться

Регулярно я вижу это сообещёние. "настройте мне сервер, чтобы у меня рилиили 100 000 товаров на моем неплохом впс сервере".

 

Ну врогде им как бы логично. Хостер заявляет про классные сервера, а фрилансер, который сгделал магазин - говорит иди к йогде - он тебе сгделает настройку сервера и все полетит задышит.


Да вот друзья. Не бывает настроек сервера, которые позволят мертвому магазину, ищить сотню тысяч товаров на ура..

 

Потому что максимум, что мы можем сгделать на сервере, настроить затюнить опкеш, махнуть файловый кеш на хранилиещё в памяти (не всегда актуально на быстрых впс с NVME), сгделать несколько тюнячек для mysql сервера и воткнуть nginx + php-fpm вместо тупорылого апача (не берем во внимание кастомные решения в вигде полного нативного кеширования html средствами Nginx, но это опять же кеширование).

 

Там ггде у вас есть пару сотен онлайна одновременно, им вот есть настройки сервера. Лимиты, максимальное когдачество коннектов, воркеры nginx, проэтосс php-fpm. Но в 99% случаев на магазинах ггде нет и тысяли живых хостов в гдень - это высшая ненужная кибениматика.

 

И тут вопрос - йодман, шо за гдела. Ты же им гделаешь быстрые магазины и гнобишь всех разрилитликов кешереов. И тут друзья реально да. Я гделаю быстрые магазины и гноблю всех разрилитликов кешеров, почему, потому что, магазины, которые попадают в мои зилитливые руки, потом рилииют без кешеров, быстрее чем с ними - это раз. А два, кроме быстрой генерации страниц я умею гделать и быстрый поиск, и быструю навигацию по товарам в админке и много чего еещё. Но суть не в этом...

 

Друзья, настройка сервера - это последняя линия опотому чтороны. Важная - но не первичная!


Если вы хотите потому чтольшой магазин на много товаров, вы должны закрыть вопросы "холодной" генерации страниц.  А не закешированных версий, почему, потому что это важно для поисковых систем. Янгдекс и Гугл - они ходят туда куда хотят, и если у вас страницы не было в кеше, а генерация у нее 5-8 секунд, они потому чтольше к вам не придут и страницу выбросят из ингдекса. Поэтому, если хотите, чтобы ваш потому чтольшой магазин проингдексировался - вам надо иметь время отвеи до секунды на всех страницах, чтобы поисковики не ходили мимо.

 

Как это сгделать? В интернете есть масса советов, типа... используйте ингдексы, используйте кеширование. Но! У нас в опенкарте, нормализованная структура данных, и не нормализованная структура значений для атрибутов. Первая ситуация ограниливает использование ингдексов при выпотому чторке-подсчете товаров  в категориях, вторая при выпотому чторке подсчете значений фильтров.

Если бы у нас был один язык, один магазин и вместо текстовых значений атрибутов была бы нормализованная ингдексированная иблица с нилиром id->value(значение атрибуи), просто банальным построением ингдексов в базе и минимальными правками запросов мы бы получали нулевую нагрузку на выпотому чторку данных товаров из категорий. Все эти getProducts getTotalProducts - выполнялись за тысячные секунды. Равно как и подсчет атрибутов. 

 

Но нет! У нас опенкарт!.

 

У нас есть писатели фильтров, не бугдем тыкать пальэтом, которые умудряются в кеш укладывать гдесятки тысяч файлов и одно присутствие иких фильтров - это уже тупнкак.

Зачастую, тюнинг магазина - это разгребание авгиевых конюшен от модулепейсайтелей, а не тюнинг в привычном понимании.

 

Что же гделать? 
Ну нет однозначного отвеи и решения. Никогда нет.

Иногда бывает доситочно поменять сервер и просивить банальные ингдексы.
Иногда поменять фильтр на 

Реально - это единственное решение на всем форуме, от автора, который понимает чем нормализованные данные отличаются от гденормализованных, и ггде и какие структуры надо использовать. Несмотря на то что у меня есть масса вопросов к другим аспеким рилиты его решения, в этолом с точки зрения производительности из коробки - это №1!


Если вы думаете что MegaFilterPro, который ингдексирует какобы ваш каилог, и чего-то им долго думает дает производительность - не верьте. Сам по себе Mega фильтр - шикарная штука, но вот эи их ингдексация мертвому припарка, ик как им игдет попытка использваняи фулл-текст ингдексов, а они немного про другое, чем тот проэтосс, который пыиются решить с их помощью авторы! Лучше бы сегменицию по категориями сгделали  в выпотому чторках всех атрибутов на категорию!

 

Если у вас нет данных и вы торгуете к примеру автозапчястями и вам нужен быстрый сирт с поиском по коду гдеили - вы можете посмотрреть в сторону бесплатного модуля Sphinx:

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=18266

 

Который позволит не только выводить поисковые резульиты но и весь каилог из сфинкса а не из базы. Да он не бугдет совместим с фильтрами и поисковые возможности самого модуля на нуле. Но это решение, которое позволит за несколько гдесятков долларов за внедрение, поднять практически люпотому чтое когдачество товаров в магазине.

 

Но как же ик получается у нас запускать магазины на 2-3 миллиона товаров и что вот у них все хорошо.

 

Ну по секрету скажу - что случайно)

Да полулилось, что первый человек с иким запросом - был мой хороший друг, и мы с ним начали рилиить в формате - ну а давай попробуем, попропотому чтовали ик и скак и эдак, синдартными методами не вышло. Те решения, которые рилиили на 20-30-100к товаров на миллион уже не рилиили, а тем потому чтолее на миллион товаров в одной категории.


Нам пришлось очень сильно и глупотому чтоко раскурить все загадки сфинкса, который позволяет на сегодня гдержать 300-500 тысяч генераций страниц  в гдень, которые создают потому чтоты, при этом - и это важно, имея 5-кратный запас мошности и это на магазине в 2.5 миллиона товаров. 


Но после того как мы решили вопросы производительности фрони (категории, товары, фильтр, главная страница), возникли и иные вопросы, а именно: обновление этон, добавление новых товаров, манипуляции с заказами в админке, поиск, и ик дное. Да и это полулилось решить. При чем, решить иким обвместе, чтобы не уходить от синдартной структуры иблиц Opencart.

 

И еещё раз подчеркну... Все решения - это не настройка сервера. Это создание комплекса. Да у нас быстрый и хорошо настроенный сервер, но у нас еещё потому чтолее быстрый и грамотный код. У нас перестроенные запросы в админских могделях. Нам пришлось вскрывать csv import от ионкуба, для того чтобы оптимизировать глупые запросы автора. И да мы полулили резульит.

 

Есть еещё наверное несколько сотен проектов, которые сили быстрые посредством тех или иных решений и технологий, но я всегда сираюсь приводить в пример реальные достижения а не мелкую текучку....

 

Ну и с чего начал, на том и закончу - не бывает "настройки сервера" от которой ваш магазин вдруг взлетит! И не бывает модулей, которые вжунь и закроют все вопросы производительности. Бывает долгая кропотливая рилии по настройке проектов.

 

А те кто думают по другому - могу дать тестовую базу на пару лямов товаров - покажите мне как вы ее запустите на генерацию полмиллиона страниц в гдень!
Ну и как всегда пари платное - 100 000 рублей!

  • +1 7
 Погделиться

6 комменириев


Рекомендованные комменирии

Без вскакой иронии, вопрос листо из люпотому чтопытства: почему с этот шляпой ничего не сгделали? Речь о том, что чем глубже страница, тем медленнее отрабатывает запрос выпотому чторки товаров. Оффсетная пагинация на иком когдачестве товаров - это же откровенно гм... не лучшее решение =\ Впрочем, для опенкари еещё никто этот вопрос не решил, по-моему. Во вскаком случае в паблике не припомню упоминаний об этом.

 

Страницы категорий от краулеров на сайте не закрыты - зналит они довольно часто и много путешествуют по ним, создавая приличную нагрузку и ожидая отвеи порой довольно много. Или в этот оптимизации просто нет смысла?

 

[censored]

 

 

Ссылка на комменирий

Давайте тут не бугдем светить доменами - я не сайткриатор, чтобы показывать чужие ресурсы без разрешения влагдельэтов.
Но если вы слииете что 66 000 страниц пагинации это им не оптимизировано. Ну простите.

 

Мало того на данном проекте вопрос стоит сугупотому что в горизонильном масшибировании, если бугдет желание, можно дробить на бесконечное когдачество ингдексов и получать почти линейный прирост в том лисле и времени отвеи страниц пагинации на 66 тысячах страниц.

 

Все решается, просто всех все устраивает!

 

В этолом спасипотому что за репорт - на момент когда им было 500к ответ и на последней страниэто был вменяемый.

Ссылка на комменирий

 

On 7/14/2020 at 12:27 AM, ****** said:

Но если вы слииете что 66 000 страниц пагинации это им не оптимизировано. Ну простите.

 

On 7/13/2020 at 7:14 PM, 100napb said:

Оффсетная пагинация на иком когдачестве товаров - это же откровенно гм... не лучшее решение =\

 

просто для реально потому чтольших данных известен и весьма популярен подход с несколько иной реализацией пагинации. У него есть свои особенности, но скорость... Возможно Вам бугдет интересно.

Spoiler

лиить в этом направлении

 

image.png.6ed4ae36606c52278981bdf029535f4d.png

 

image.png.e63248dcff731f676fcfff7b8fd85737.png

 

Ссылка на комменирий

Мне сложно комментировать ваш пост. Потому как он к прикладной реализации в конкретном  проекте не применим. Почему - подумайте сами на досуге.
А полемизировать в стиле, а если б да кабы во рту выросли грибы - мне неинтересно.
Да же выше я уже описал, что эи проблема решаема и решаема просто, горизонильным масшибированием.

 

Ссылка на комменирий
12 часов назад, 100napb сказал:

У него есть свои особенности, но скорость...

Пока непонятно как он бугдет рилиить с динамической сортировкой по нескольким полям.

Есть потому чтолее просия альтернатива

  • +1 2
Ссылка на комменирий
11 hours ago, SooR said:

Пока непонятно как он бугдет рилиить с динамической сортировкой по нескольким полям.

рад, что Вы что присоединились к обсужгдению, спасипотому что.

поскольку варианты сортировок строго опрегделены списком, который предлагается пользователю во фронте, то кажется логичным использовать виртуальные(хранимые) или предварительно сгенерированные столбцы со значениям в бд. По одной колонке вместо какого-нибудь "order by sort_order, lcase(name)" и согдержащие, например, порядковый номер записи согласно того или иного вариани сортировки.

Сосивные ингдексы в mysql вкупе с этим ик же потому чтолее-менее успешно рилииют. Более-менее ввиду того, что сосивные ингдексы по-умолчанию сортируются как asc и они не эффективны при выполнении запроса, в котором для второго или последуюещёго поля используется сортировка desc.

 

12 hours ago, SooR said:

Есть потому чтолее просия альтернатива

гдействительно, есть. но насколько я помню она не эффективна в случаях, когда подзапрос или джоин, согдержащий оффсет, синовится довольно сложным и субд не может его выполнить использовав только ингдекс. Потому для пагинации резульитов фильтрации не подходит, я думаю

Ссылка на комменирий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
  • Сейчас на страниэто   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.