Jump to content

Recommended Posts

Продвинутое кэширование - BrainCache


Продвинутое кэширование - BrainCache


ИНСТРУКЦИЯ ПО УСТАНОВКЕ

Что такое кэш запросов?

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

В OpenCart уже есть поддержка кэша! Зачем мне нужен BrainCache?

Использование стандартного метода кэширивания предполагает под собой работу со всеми файлами, где нужно кэширивание со всеми вытекающими отсюда последствиями:

  1. децентрализованный доступ к параметрам кэшеривания
  2. наличие множественных вызовов методов работы с кэшом в рамках всего MVC
  3. отсутствие правил и исключений кэшеривания для каждого запроса
  4. отсутствие фильтрации запросов, т.е кэшиются запросы без анализа строк
  5. отсутствие фильтрации прав доступа вызовов кэшеривания по Имени файла, Классу и Методу

Что умеет BrainCache?


  • 1.0 beta
  • поддержка профилей настроек кэшеривания;
  • централизованный контроль и обработка всех вызовов и обращений к БД MySQL;
  • выводить часто изменяющиеся данные в отдельный массив и устанавливать для каждого элемента время кэша, где 0 — запрет кэшеривания. Для удобства добавлены константы с предопределенным значением времени: МИНУТА, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, ГОД, ВИСОКОСНЫЙ ГОД;
  • устанавливать стандартное значение времени кэша, при отсутвии удовлетворяющих правил кэшеривания (если правила для запроса отсутствуют или не подошли);
  • установка ограничений доступа к таблицам БД не относящихся к магазину, но находящихся в рамках одной базы (Сценарий выдаст предупреждение и завершит работу);
  • установка пути директории кэшеривания для текущего профиля;
  • установка ограничения доступа к кэшу по времени для Классов, Методов классов, Метода Класса выполняющих запрос
  • установка ограничения доступа к кэшу по времени для пути и имени выполняющих запросов скриптов;

Фиксы:

  • Исправлена ошибка доступа к админ-панели
  • Оптимизирован цикл поиска по ассоционному массиву, разделена логика условий
  • Добавлен редирект на страницу 404, в случае срабатывания блокирующего условия

Совместимость:

Проверялось на v1.5.4.1, но должен быть совместим со всеми версиями, потому, что для установки не нужно вносить множественные изменения.


 

  • +1 2

Share this post


Link to post
Share on other sites

Можно ли получить более подробную инфу? Цена модуля копейки конечно, но все равно.

Share this post


Link to post
Share on other sites

Какой прирост производительности? Цифры

Share this post


Link to post
Share on other sites

да, совершенно непонятное описание..

сколько было запросов- сколько стало, и прочее, тема не раскрыта

  • +1 2

Share this post


Link to post
Share on other sites

порезал ссылку:

[нет_пиару.поддерживайте здесь или через другие контакты, указанные в доках архива дополнения]

Share this post


Link to post
Share on other sites

куплю . ради пощупать.

купил

инструкции нет. понятия не имею что с купленным делать .АФТОР. ау

а зачем тогда покупал ? сначала купил сам не зная что а теперь думаешь )) во народ

Share this post


Link to post
Share on other sites

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

Производительность зависит от составленного Вами профиля кэшеривания, которую можно замерить, например тут http://gtmetrix.com/ . В след. версиях добавлю возможность смены профиля в авто-режиме по времени суток.

Установка:

открыть /system/startup.php

в конце добавить

require_once(DIR_SYSTEM . 'library/qcache.php');

открыть /system/library/db.php

после

	private $driver;

добавить

	private $cacher;

после

$this->driver = new $driver($hostname, $username, $password, $database);

добавить

$this->cacher = new QCache();

заменить

public function query($sql) {
	return $this->db->query($sql);
}

на

public function query($sql, $cache_ttl = NULL)
{
	return $this->cacher->query($sql, $this->driver, debug_backtrace(), $cache_ttl);
}

Настройка профиля /system/library/qcache.php


$this->setting = array(
/* Запрещенные функции в запросе */
'disable_functions' => array(
	'sys_exec',
	'sys_get',
	'sys_set',
	'load_file'
),
/* Запрещенные таблицы в запросе */
'disable_tables' => array('forum', 'dle', 'blabla'),
/* Кэшеривание запроса содержащего ИМЯ ТАБЛИЦЫ => ВРЕМЯ КЭША */
'tables_cache' => array(
	'language' => DAY,
	'country' => DAY
),
/* Кэшеривание классов и методов
КЛАСС::МЕТОД - Кэшеривание запросов выполняемых из метода класса
КЛАСС::NULL - Кэшеривание всех запросов выполняемыми классом
NULL:МЕТОД - Кэшеривание всех запросов выполняемыми методами
*/
'methods_cache' => array(
	'Customer::getBalance' => MINUTE
),
/* Кэшеривание запросов по пути и имени скрипта */
'scripts_cache' => array(
	'/index.php' => MINUTE
),
/* Максимальное кол-во записей кеша на одно соединение */
'max_query' => 3,
/* Время кеша по умолчанию */
'default_ttl' => HOUR,
/* Папка кэша */
'dir_cache' => DIR_CACHE . 'selects/'
);

Share this post


Link to post
Share on other sites

Удалил текст в связи с отсутствием контекста

Успехов автору.

Share this post


Link to post
Share on other sites

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

Зря так думали, КЭШ и его обработка, это уже больная тема.

Можно ли более подробное описание, функционал. т.к. очень интересно.

Share this post


Link to post
Share on other sites

1. Работает только с синтексом SQL

2. Предоставляет отладочную информацию по запросам

3. Предотвращает выполнение небезопасных функций SQL

4. Расширенная работа с кешом. В одном файле, можно контролировать все обращения к БД и выставлять им время кэшеривания по критериям обработки строки запроса

Полное описание будет завтра.

На gtmetrix.com обратите внимание на Page load time и вкладку History , загрузка статики тут не причем.

Для наглядности установите два OpenCart без изменений, один с моим кэшом, но тоже без других изменений, установить соответственно в ./shop1 и ./shop2 , сделайте пустые шаблоны без CDN-вызовов, настройте файл профиля под Ваши нужды, наберите хотя бы 20 посещений (F5), потому, что на одного пользователя приходится за раз 3 записи кэша по умолчанию, чтобы он не томился в ожидании, когда сервер отдаст ему контент. Сравните на gtmetrix.com оба URL site.ru/shop1 и site.ru/shop2

Результаты не будут впечатляющими, т.к все зависит от многих других факторов, но дополнительный прирост производительности вашего магазина за 150 руб. гарантирован :-)

Далее все тех. подробности реализации обговариваются после покупки в ЛС.

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

Share this post


Link to post
Share on other sites

Я просто оставлю это здесь на всякий случай.

Тут я убрал текст т.к. он потерял актуальность.

Edited by cmd
  • +1 1

Share this post


Link to post
Share on other sites

В конфиге прописана папка selects/ а в архиве для заливки папка select/ - так и должно или это ошибка?

Профили кэширования для образца будут когда?

Share this post


Link to post
Share on other sites

Я просто оставлю это здесь. Вдруг кому пригодится.

ИМХО, полезность данного конкретного модуля пока вызывает большие сомнения.

1) Хранение данных в кеш файлах перекладывает нагрузку с MySQL сервера на процессор и ОЗУ. Получение больших объемов данных из файлов будет только повышать общую нагрузку на сервер. В конце-концов, MySQL и PostgreSQL тоже не дураки придумали.

2) Фраза ".... все зависит от Вашего профиля кеширования...." наводит на мысль, что Вы просто скачали где-то какую-то библиотеку PHP и присобачили её к OpenCart. Почему не провели исследование с разным количества товаров и разной нагрузке и не подготовили оптимальные профили?

3) Разницу "до и после" почему не показали? Статистики нет. Вместо этого предложение выполнить PHP сценарий и посчитать секунды на каком-то сервисе...

P.S. Boriskin, Вашего кота в мешке я буду обсуждать тут хотите Вы того или нет.

Ок. Какие вопросы Вас интересуют и как лучше Вам предоставить статистику? Я замерял ее на данном ресурсе, тк руководствовался мануалам клиентской оптимизации webo.in на хабре. Чтобы распределить нагрузку между ресурсами, там есть условия не позволяющие пользователю с помощью flood-атак повесить сервер.

Share this post


Link to post
Share on other sites

В конфиге прописана папка selects/ а в архиве для заливки папка select/ - так и должно или это ошибка?

Профили кэширования для образца будут когда?

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

Профили сегодня в течении дня будут.

Share this post


Link to post
Share on other sites

Совершенно непонятно зачем кешировать то, что уже и так кешируется?

ИМХО не дополнение а бред!

Share this post


Link to post
Share on other sites
оно по другому кешируется. порционно. ну я думаю толку визуально не будет. Только хостеры вздохнут с облегчением увидив понижение нагрузки на пару процентов... хотя хз

Камент Топорчило - перечитайте и ветку про Memcached, я думаю поймете все сами.

Share this post


Link to post
Share on other sites

Итак , тесты.

Конкурирующих запросов - 100., всего 5000 запросов.

Тестилась морда сайта на opencart 1.5.5.1

1 тест C КЭШЕМ: запросы выполнились за 80 секунд, среднее время ожидания ответа сайта - 1,477 сек

post-7225-0-02571500-1363217985_thumb.png

2 тест БЕЗ кэша: запросы выполнились за 207 секунд, среднее время ожидания ответа сайта - 3,900 сек :(

post-7225-0-65118800-1363217984_thumb.png

Нагрузка на VPS

post-7225-0-91181000-1363216986_thumb.jpg

Тест с кэшем оперативки и процессора жрет несколько больше, но на диск нагрузка меньше.

PS: админка отвалилась, копать наверное нужно в сторону установленого вкмод.

UPD: прогнал те-же тесты на другом сервере (более мощном).

результат противопложен:

с КЭШЕМ 1,700 сек

без КЭША 1,400 сек

Edited by pashast
  • +1 1

Share this post


Link to post
Share on other sites

Итак , тесты.

Конкурирующих запросов - 100., всего 5000 запросов.

Тестилась морда сайта на opencart 1.5.5.1

1 тест C КЭШЕМ: запросы выполнились за 80 секунд, среднее время ожидания ответа сайта - 1,477 сек

post-7225-0-02571500-1363217985_thumb.png

2 тест БЕЗ кэша: запросы выполнились за 207 секунд, среднее время ожидания ответа сайта - 3,900 сек :(/>/>/>

post-7225-0-65118800-1363217984_thumb.png

Нагрузка на VPS

post-7225-0-91181000-1363216986_thumb.jpg

Тест с кэшем оперативки и процессора жрет несколько больше, но на диск нагрузка меньше.

PS: админка отвалилась, копать наверное нужно в сторону установленого вкмод.

Спасибо большое Вам за тесты! Админку поправил, перезалил. Версия модуля не окончательная оптимизация на данный момент минимальная, т.к. пока наращивается функционал.

Memcached прикручу позже, когда логика приложения будет окончательной.

Share this post


Link to post
Share on other sites

Исправил все описанные баги. Оптимизировал циклы и условия, теперь выдача одного запроса из кэш-файла занимает 0.00016-0.00024 ms (пишу на старом железе, цифры на серверах будут меньше), эти цифры постоянны и не зависят от запроса, главное условие, чтобы запрос был в кэше.

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

Share this post


Link to post
Share on other sites

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

залил и забыл ))) - реально ли такой сделать ?

  • +1 1

Share this post


Link to post
Share on other sites

ufo, в /system/startup.php проверьте наличие в конце файла

require_once(DIR_SYSTEM . 'library/qcache.php');

структура изменилась классы анализа запроса теперь лежат в /system , достаточно заменить файлы и отредактировать /system/library/db.php и /system/startup.php

kint, сделать реально, в общем и сделаю позже, сейчас пишу другой модуль для проекта по оптимизации кода OpenCart, чтобы как-то сэкономить такты

Попробуйте vQmod для установки, должен работать

<modification>
<id></id>
<version>1.0.0</version>
<vqmver>2.1.1</vqmver>
<author></author>
<file name="system/startup.php">
 <operation>
  <search position="bottom"><![CDATA[]]></search>
  <add><![CDATA[require_once(DIR_SYSTEM . 'library/qcache.php');]]></add>
 </operation>
</file>
<file name="system/library/db.php">
 <operation>
  <search position="after"><![CDATA[private $driver;]]></search>
  <add><![CDATA[private $cacher;]]></add>
 </operation>
</file>
<file name="system/library/db.php">
 <operation>
  <search position="after"><![CDATA[$this->driver = new $driver($hostname, $username, $password, $database);]]></search>
  <add><![CDATA[$this->cacher = new QCache();]]></add>
 </operation>
</file>
<file name="system/library/db.php">
 <operation>
  <search position="replace"><![CDATA[public function query($sql) {]]></search>
  <add><![CDATA[public function query($sql, $cache_ttl = NULL)]]></add>
 </operation>
</file>
<file name="system/library/db.php">
 <operation>
  <search position="replace"><![CDATA[return $this->db->query($sql);]]></search>
  <add><![CDATA[return $this->cacher->query($sql, $this->driver, debug_backtrace(), $cache_ttl);]]></add>
 </operation>
</file>
</modification>

  • +1 1

Share this post


Link to post
Share on other sites

Итак , тесты.

Конкурирующих запросов - 100., всего 5000 запросов.

Тестилась морда сайта на opencart 1.5.5.1

1 тест C КЭШЕМ: запросы выполнились за 80 секунд, среднее время ожидания ответа сайта - 1,477 сек

2 тест БЕЗ кэша: запросы выполнились за 207 секунд, среднее время ожидания ответа сайта - 3,900 сек :(

Нагрузка на VPS

Тест с кэшем оперативки и процессора жрет несколько больше, но на диск нагрузка меньше.

Я вот не понял, нагрузка на VPS выросла аж до 60% при росте скорости выполнения запросов в 2 с копейками раза?Или это рост нагрузки из-за запуска толпы запросов?

Share this post


Link to post
Share on other sites

Я вот не понял, нагрузка на VPS выросла аж до 60% при росте скорости выполнения запросов в 2 с копейками раза?Или это рост нагрузки из-за запуска толпы запросов?

Думаю, Ваш вопрос содержит ответ — 5000 запросов. Но по графикам видно, что есть две волны, первая волна отчётливо видна на графике CPU — она пиковая, вторая волна сглажена. Т.е сначала сработала запись кэша, т. к. его не было, на следующие запросы, когда записывать уже нечего, пошла вторая волна — выдача кэша новым посетителям. В принципе сгладить первую волну можно сделав очередь заданий, со второй можно только, отказаться от десереализации данных и использоваться include и var_export для чтения/записи кэша, но это чревато, если не проверять файлы кэша на наличие выполняемого кода.

  • +1 2

Share this post


Link to post
Share on other sites

ufo, это бето-версия модуля. Коллективный допилинг имеет смысл, т. к. изначально стоимость модуля занижена, впрочем не исключение, что после допилинга модуль вырастет в цене, как готовое решение с установкой One Click.

Модуль перезаливался с полной заменой, все работает. Проверяйте файлы согласно инструкции на первой странице.

Опишите ход своих действий.

UPD.: попробуйте снова vqmod, отредактировал предыдущее сообщение, возможно не соответствовали пути

  • +1 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By SergeTkach
      Допустим, есть файл cache.sticker.bestseller.1560966030, который создал модуль из комплектации шаблона.
      И в другом модуле стикеров, идет запрос кеша через
      $sticker_cache = $this->cache->get('sticker'); В итоге, данные из файла cache.sticker.bestseller.1560966030 оказываются в переменной $sticker_cache...
      А вот так все ок
      $sticker_cache = $this->cache->get('prefix_sticker'); Ситуация наблюдается в OpenCart 2.1.0.2 - в других, еще не пробовал. Если что - опишусь.
    • By MisterUnknown
      Здравствуйте, дорогие читатели.
      Можете подсказать что можно сделать для оптимизации сайта?
      Бывает грузит более 5-и секунд.
      Может модули какие ненужные знаете, или что-то где-то отредактировать.
      Почитал, что из-за категорий может нагрузка идти.
      P.S места на хостинге хватает сполна.
      В прикрепленном фото оставил модули
       

    • By p0v1n0m
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
    • By p0v1n0m
      Скачать/Купить дополнение


      Чистильщик кэша и логов
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
      Добавил p0v1n0m Добавлено 15.08.2016 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика  
    • By vetalkurilenko
      Всем доброго времени суток. Имеется вот такой вот сайт на Opencart 3 - https://molli.com.ua/ 
      Проблемой на сайте является долгое время ответа сервера (прилагаю скрин). Пробовал выключать модули и т.д. но не особо помогает(
      Прошу совета специалистов, как решить данную проблему ? В какую сторону копать )? 
      Буду рад вашему совету.

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.