Оптимизация производительности

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

Хороший сервер

Эти рекомендации уже учтены в нашем скрипте настройки сервера. Настройте свой сервер максимально эффективно. Вот некоторые рекомендации:

  • Используйте средства мониторинга серверов, например, Zabbix, для определения моментов сильной загрузки и слабых мест вашего серверного парка.
  • Используйте выделенный сервер вместо виртуального. Так все ресурсы мощной машины будут под вашим контролем.
  • Перейдите с жестких дисков на SSD и NVMe накопители. Это позволит ускорить работу с файловой системой и даст прирост производительности базы данных.
  • Откажитесь от использования панели управления на сервере. Любая панель управления забирает на себя часть ресурсов и может служить лишней дырой в безопасности.
  • Откажитесь от любых лишних компонентов на сервере. Отдельный FTP-сервер, лишние службы - всё это потребляет ресурсы.
  • Настройте MySQL сервер, выделив ему большой объём кеш-памяти. Подробнее о настройке MySQL вы можете узнать на просторах интернета.
  • Перейдите на MariaDB вместо MySQL.
  • Обновите PHP до самой свежей версии. Использование PHP версии ниже 7.2 не рекомендуется.
  • Используйте легковесный веб-сервер nginx вместо Apache2.

Кеширование MemCached

Сеть работает со встроенными механизмами кеширования часто запрашиваемых данных. При классической установке используются механизмы кеширования на уровне файловой системы или встроенный кеш APCu. Вы можете переключить кеширование на MemCached и снизить нагрузку на файловую систему (кроме того, ещё и повысить безопасность). Убедитесь, что у вас установлен MemCached и сооветствующий модуль PHP на сервере.

В файле конфигурации панели управления config.php добавьте или раскомментируйте следующие строки:

define ( 'MC_HOST', '127.0.0.1' );
define ( 'MC_PORT', '11211' );
define ( 'MC_PREF', 'mycpa' );

Чаще всего, эти параметры подойдут вам без изменений. При работе с несколькими сетями на одном сервере, измените MC_PREF.

Облачное кеширование

Нагрузку на серверы с лендингами и прокладками можно значительно снизить, подключив их к облачному кешу. Бесплатным решением может быть CloudFlare. Инструкции по интеграции вы найдёте на их сайте.

Рекомендуется добавить IP-адреса всех своих серверов и серверов контрагентов в белый список, чтобы исключить потери API-запросов.

Дополнительно рекомендуется добавить правило Page Rule для пропуска трафика со статистикой кликов, поскольку оно может быть распознано как попытка атаки. Для этого зайтиде в Page Rules, нажмите кнопку Create page rule и укажите в поле ввода адрес:

http://landing.ru/*/?good=*

Где landing.ru - адрес подключаемого домена. Кнопкой Add setting добавьте следующие настройки:

  • Browser integrity check: Off
  • Security level: Essentially off
  • Cache level: Bypass

Распределение ресурсов по нескольким серверам

Платформа изначально разрабатывалась с поддержкой распределённой работы на нескольких независимых серверах. Оптимальным распределением нагрузки является использование двух отдельных серверов:

  • Сервер панели управления, на котором располагается основная платформа, модуль перенаправления и сервер подсчёта кликов
  • Сервер хранилища сайтов

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

Важно! Серверам требуется вести обмен данными между собой, поэтому для увеличения производительности все они должны располагаться в одном дата-центре!

Сервер для сайтов

Вы можете использовать отдельный сервер для сайтов, или целый парк серверов с синхронизацией файлов через rsync. Технические требования к ним при этом не меняются:

  • ОС: чистый Linux без панели управления и лишних модулей
  • Веб-сервер: nginx + PHP-FPM версии 7.2 и выше
  • PHP-модули: json, curl, sockets
  • MySQL и ionCube - не требуется

При использовании нескольких серверов для сайтов, рекомендуется само хранилище сайтов размещать на основном сервере, а на фронт-серверы передавать данные по rsync. К основному хранилищу сайтов припаркуйте отдельный скрытый домен (например, поддомен r.domain.com основгого домена сети), укажите его URL управления в настройках. Используйте стороннее решение для генерации SSL-сертификатов.

Основной сервер платформы

При необходимости в качестве эксперимента вы можете распределить компоненты основного сайта по различным серверам:

  1. Сервер базы данных MySQL может быть перемещён на отдельную машину с большим объёмом оперативной памяти и NVMe дисками в качестве хранилища. Убедитесь, что между серверами приложений и сервером базы данных имеется очень быстрый канал связи.
  2. ClickServer может быть также вынесен на отдельную машину. На этой машине не требуется установка вообще никакого стороннего ПО. Запуск сервера кликов рекомендуется осуществлять вручную любым удобным способом.
  3. Сервер кеширования MemCached может быть вынесен на отдельную машину с быстрым доступом к сети. Это позволит использовать несколько серверов для обслуживания различных элементов приложения.
  4. При выполнении пунктов 1 и 3, редирект-домен можно выносить на отдельную машину с nginx в качестве веб-сервера. При этом, файлы самой платформы также должны быть установлены на сервере, возможно в скрытой папке (находящейся вне директории сайта). Из дистрибутива необходимы папки core и data (без содержимого).
  5. При выполнении пунктов 1 и 3, можно перенести работу по API на отдельную машину. Настройка работы с URL при этом целиком и полностью ложится на вашего ИТ-специалиста.