Ускоряем MailWizz

Перевод сборки оригинальных статей опубликованных

https://kb.mailwizz.com/articles/performance-improvements/

Улучшения производительности MailWizz

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

  1. Убедитесь, что у вас достаточно ОЗУ / ЦП на вашем сервере. В самом деле, вы не можете ожидать, что будете отправлять миллионы писем с вашего 4 ГБ ОЗУ и с сервера, чтобы он всегда был мгновенным.
  2. Попробуйте использовать сервер с SSD вместо обычных жестких дисков.
  3. Попробуйте использовать nginx вместо apache. Или комбинация, в которой apache обслуживает статические файлы, а nginx — динамические.
  4. Настройте mysql / mariadb. Это чрезвычайно важно, так как конфигурация сервера базы данных по умолчанию, будь то mysql или mariadb, потребует внимания, чтобы извлечь из этого максимум. Смотрите эту статью, которая объясняет, что делать.
    Спойлер

    В этой статье описываются различные настройки конфигурации MySql / MariaDB, которые ускорят работу MailWizz.
    Как всегда, MailWizz пытается получить доступ к базе данных как можно более оптимально, но, тем не менее, бывают случаи, когда единственный способ ускорить доступ — это настроить конфигурацию сервера базы данных.
    Ниже приведены изменения, которые необходимо применить к файлу конфигурации сервера базы данных, обычно это /etc/my.cnf

    1. Размер пула буферов InnoDB
    innodb_buffer_pool_size = XXX
    Где XXX обычно составляет не менее 70% доступной оперативной памяти на сервере, поэтому, если у вас 4 ГБ ОЗУ на вашем сервере, это значение будет установлено на 2867M, поэтому мы имеем:
    innodb_buffer_pool_size = 2867M
    Хорошее чтение, связанное с этим настройки можно найти здесь .

    2. InnoDB Flush Log At Transaction Commit.
    innodb_flush_log_at_trx_commit = X
    Для полного соответствия ACID требуется значение по умолчанию 1. С этим значением содержимое буфера журнала InnoDB записывается в файл журнала при каждой фиксации транзакции, и файл журнала записывается на диск.
    В зависимости от ваших требований вы можете ослабить это и установить значение 2, что означает, что содержимое буфера журнала InnoDB записывается в файл журнала после каждой фиксации транзакции, а файл журнала сбрасывается на диск примерно один раз в секунду. Промывка раз в секунду не гарантируется на 100% каждую секунду из-за проблем с планированием процесса. Поскольку операция сброса на диск происходит только примерно раз в секунду, вы можете потерять до одной секунды транзакций в случае сбоя операционной системы или отключения питания.
    innodb_flush_log_at_trx_commit = 2
    Хорошее прочтение, связанное с этим параметром, можно найти здесь .

    3. Число разрешенных соединений.
    max_connections = X
    Значение по умолчанию для этого параметра обычно слишком мало для того типа работы, который выполняет почтовая программа. Лучше всего сохранить его на более высоком уровне:
    max_connections = 500
    хорошее чтение, связанное с этим параметром, можно найти здесь

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

  5. Убедитесь, что вы понимаете, как работает отправка в mailwizz и как это влияет на производительность. Эта статья объясняет это подробно.
  6. Спойлер
    Поскольку, похоже, существует огромное недопонимание, связанное с тем, как должны выглядеть настройки доставки, я думаю, что нужно хорошее объяснение.Давайте посмотрим на это:
    Снимок экрана 2016-02-24 12.24.36
    у нас есть 10 кампаний одновременно и 100 подписчиков одновременно.
    Это означает, что при запуске задания cron, то есть каждую минуту, оно загружает из базы данных 10 кампаний, готовых к отправке, и последовательно, для каждой кампании, загружает 100 подписчиков, отправляет 100 писем за первую затем выберите следующую кампанию и загрузите 100 подписчиков и т. д. до завершения 10-й кампании.
    Имейте в виду, что для каждого обрабатываемого электронного письма существует определенное использование памяти, которое зависит от размера шаблона, используемого в кампании, от числа настраиваемых полей для списка, используемого в кампаниях, и от других факторов, таких как определения полей кэшированного списка памяти и т. д.Теперь, помните, как я сказал, что каждую минуту запускается задание cron и подбирает кампании для отправки?
    Если мы посмотрим на настройки ниже:
    Снимок экрана 2016-02-24 12.37.02
    представим, что на 1-й минуте запускается задание cron, которое подбирает кампании и начинает отправку 1000 писем для первой кампании (остальные все еще ждут отправки).Пока первая кампания все еще обрабатывается, задание cron на второй минуте также запускается и начинает отправку для второй кампании, то есть еще 1000 подписчиков для обработки, и мы переходим к заданию cron № 10, которое обрабатывает 1000 подписчиков одновременно. Таким образом, в какой-то момент мы обрабатываем около 10 тыс. Подписчиков, поскольку загружаем большое количество подписчиков для каждой кампании, и эта кампания не завершила отправку, в то время как другие кампании начали отправлять.
    Теперь, это должно стать очень очевидным из числа проблем, которые он может создать на медленном сервере (или медленном SMTP-сервере), поэтому вы должны быть очень осторожны с этими настройками, а не только с тем, сколько использования памяти делает один запуск cron, но это также касается количества заданий cron, которые выполняются одновременно.Затем, если мы включим отправку PCNTL, скажем, как:

    Означает, что при выполнении задания cron он будет обрабатывать 5 кампаний одновременно.
    Для каждой кампании будет загружено 5 партий по 1000 подписчиков.

    Быстрая математика, 5 кампаний * 5 групп подписчиков * 1000 подписчиков = 25000 подписчиков одновременно. Теперь учтите использование памяти для 25 тыс. Подписчиков одновременно и учтите сетевые подключения, а также примите во внимание, когда следующий хрон запускается и начинает делать 25 тыс. Подписчиков сразу, если первый хрон еще не закончил и так далее.

    Суть в том, что вы действительно должны принять во внимание все вышеперечисленное.

    Не устанавливайте высокие значения, если вы не знаете, что они делают.

    Так как mailwizz управляет партиями, всегда лучше запускать небольшие числа, чем огромные.

  7.  
    Спойлер
    Основная проблема, которую мы имеем с огромными приложениями mailwizz, состоит в том, что таблица campaign_delivery_log становится огромной (я видел установки с сотнями ГБ данных только в этой таблице), и мы используем эту таблицу для объединения при отправке кампаний, чтобы мы могли видеть какому подписчику мы должны отправить электронные письма, фильтруя те, которые уже получили электронные письма.
    Присоединение таблиц sql само по себе является дорогостоящей операцией, объединение таблицы с миллионами записей обходится еще дороже, что в итоге приводит к снижению скорости отправки для кампаний.Чтобы решить эту проблему, начиная с версии 1.3.7.9 мы ввели опцию, которая, если включена, когда кампания начинает отправлять, вместо присоединения к таблице campaign_delivery_log, она фактически создаст новую таблицу базы данных, она скопирует все подписчик идентифицирует, что он должен отправить в эту новую таблицу, затем он начнет обработку на основе этой новой таблицы.
    Каждый раз, когда отправляется электронное письмо, запись из этой новой таблицы удаляется, и в конце концов, когда доставка заканчивается, таблица удаляется навсегда.Прежде чем включить этот метод, вы должны убедиться, что все ваши кампании закончили отправку, иначе вы в конечном итоге отправите дубликаты электронных писем. После завершения отправки всех кампаний вы можете включить эту функцию, добавив следующий параметр конфигурации в файл конфигурации:

    'send.campaigns.command.useTempQueueTables' => true,

    Если вы не уверены, как это сделать, прочитайте эту статью, в которой объясняется, как обрабатывать параметры конфигурации в приложении.
    После этого начните отправку новой кампании и просмотрите свою базу данных, вы должны увидеть новую таблицу базы данных, добавленную во время отправки, которая будет называться: tmp_cmp_queue_X (где X — идентификатор кампании), и она будет удалена после завершения отправки.

    .
  8. Ознакомьтесь с этой статьей, в которой показано, как отключить некоторые из самых интенсивных проверок в mailwizz. Если вы не используете mailwizz в качестве приложения saas, возможно, вы сможете отключить некоторые из этих проверок.
    Спойлер
    Есть некоторые флаги, которые вы можете определить, чтобы отключить некоторые функции приложения (например, ведение журнала), чтобы повысить производительность.
    Если вы создадите файл с именем performance-levels-custom.php в папке apps / common / config со следующим содержимым:

    <?php
    define('MW_PERF_LVL', MW_PERF_LVL_DISABLE_DS_LOG_USAGE | MW_PERF_LVL_DISABLE_CUSTOMER_QUOTA_CHECK | MW_PERF_LVL_DISABLE_DS_QUOTA_CHECK | MW_PERF_LVL_DISABLE_DS_CAN_SEND_TO_DOMAIN_OF_CHECK | MW_PERF_LVL_DISABLE_SUBSCRIBER_BLACKLIST_CHECK);

    Затем он отключит все функции, как описано ниже в определениях:

    'MW_PERF_LVL_DISABLE_DS_LOG_USAGE' => 2, // disable delivery server log usage
    'MW_PERF_LVL_DISABLE_CUSTOMER_QUOTA_CHECK' => 4, // disable customer quota check
    'MW_PERF_LVL_DISABLE_DS_QUOTA_CHECK' => 8, // disable delivery server quota check
    'MW_PERF_LVL_DISABLE_DS_CAN_SEND_TO_DOMAIN_OF_CHECK' => 16, // disable checking if can send to domain of the email address
    'MW_PERF_LVL_DISABLE_SUBSCRIBER_BLACKLIST_CHECK' => 32, // disable checking emails against blacklist

    Вам не нужно отключать все, вы можете только «отключить использование журнала сервера доставки» и «отключить проверку квот сервера доставки»:

    define('MW_PERF_LVL', MW_PERF_LVL_DISABLE_DS_LOG_USAGE | MW_PERF_LVL_DISABLE_DS_QUOTA_CHECK);
    

    Или любая другая комбинация флагов.

    Обратите внимание, что вы должны отключить их только в том случае, если вас не волнует, например, сколько писем отправляет клиент, или если вас не интересуют проверки в черном списке и все такое.

  9. Включите удаление журналов доставки кампании. Перейдите в «Бэкэнд»> «Настройки»> «Cron» и установите «Удалить журналы доставки» на «Да»
  10. Если вы не используете Mailwizz в качестве приложения SAAS, вам может потребоваться уменьшить количество дней, в течение которых мы сохраняем журналы сервера доставки, в разделе «Бэкэнд»> «Настройки»> «Cron» и установить для «Дни удаления журналов серверов доставки» меньшее значение.
  11. Смотрите эту статью, чтобы включить Redis для кеша и мьютексов. Обратите внимание, что на вашем сервере должен быть установлен redis.
    Спойлер
    Начиная с Mailwizz 1.5.0 возможно использование Redis для компонентов кеша и мьютекса.Для этого после установки и настройки Redis необходимо открыть файл apps / common / config / main-custom.php и добавить в него следующие компоненты:
    'components' => array(
    	'db' => array(
    	    'connectionString'  => 'mysql:host=...;dbname=...',
    	    'username'          => '...',
    	    'password'          => '...',
    	    'tablePrefix'       => '...',
    	),
    	// ADD REDIS FOR CACHE/MUTEX START
    	'cache' => array(
    	    'class' => 'common.components.cache.RedisCache',
    	),
    	'mutex' => array(
    	    'class' => 'common.components.mutex.RedisMutex',
    	),
    	// ADD REDIS FOR CACHE/MUTEX END
    ),

     

  12. Мы проводим проверку кампаний практически в реальном времени на предмет их статуса, чтобы определить, когда кампания была приостановлена. Это может привести к значительным накладным расходам, поэтому вы можете отключить его, добавив следующий параметр в ваш файл apps / common / config / main-custom.php:
    'campaign.delivery.sending.check_paused_realtime' => false,

    Вы можете прочитать больше о параметрах приложения в этой статье .

0

my-mails.ru

Всегда On-Line

Добавить комментарий

Авторизация
*
*

Капча загружается...


Регистрация
*
*
*
*

Капча загружается...


Генерация пароля

Капча загружается...


51276208