Архитектура и масштабируемость CS-Cart¶
Общие сведения¶
CS-Cart — монолитное PHP-приложение. Витрина, административная панель, REST API, бизнес-логика и механизм расширения работают в рамках одного приложения и одного runtime-окружения.
Платформа поддерживает расширение через модули, хуки, контроллеры, шаблоны и сервисные классы без использования и нативной поддержки микросервисов. Такой подход дает ряд преимуществ:
- простота эксплуатации: одна установка и единый цикл обновлений;
- отсутствие риска рассинхронизации данных между сервисами;
- более предсказуемая отладка и диагностика проблем;
- простота расширяемости через хуки, модули и шаблоны без необходимости поддерживать распределенную систему;
- низкий порог входа: CS-Cart можно быстро развернуть на обычном хостинге или VPS-сервере;
- единый REST API для интеграции с основными возможностями платформы.
Масштабирование выносится на уровень проверенных инфраструктурных компонентов (кэша, CDN, балансировщиков нагрузки и базы данных), а не достигается за счет дробления бизнес-логики на отдельные сервисы.
CS-Cart можно развернуть в горизонтально масштабируемой инфраструктуре, однако масштабирование достигается за счет внешних инфраструктурных компонентов, а не встроенных механизмов кластеризации.
Это дает дополнительную гибкость: платформа не навязывает жесткую кластерную архитектуру или фиксированную схему серверов. Пользователь самостоятельно определяет, как масштабировать проект и какие внешние компоненты использовать. Такой подход особенно ценен для технически подготовленных команд и проектов со специфическими требованиями к инфраструктуре.
Горизонтальное масштабирование¶
CS-Cart поддерживает работу на нескольких веб-серверах. Такая схема требует ручной настройки инфраструктуры. Типичная конфигурация может включать несколько веб-серверов с CS-Cart, балансировщик нагрузки, общее файловое хранилище, общий Redis, общую базу данных.
CS-Cart не выполняет автоматическую настройку или оркестрацию распределенной инфраструктуры. Основное преимущество такого подхода — прозрачность, контроль и предсказуемость инфраструктуры. Платформа не скрывает инфраструктурные механизмы и не ограничивает пользователя встроенной схемой кластеризации.
Настройка распределенной схемы — нескольких серверов, балансировщиков, общих файлов и кэша — выполняется администратором, хостинг-провайдером или DevOps-командой. При этом CS-Cart поддерживает работу с Redis, CDN, Varnish и облачными хранилищами, что позволяет строить масштабируемую инфраструктуру с учетом конкретных требований проекта. Такой подход особенно полезен для продвинутых пользователей и компаний, которые хотят самостоятельно контролировать архитектуру своей инфраструктуры.
Механизмы кэширования¶
CS-Cart использует несколько уровней кэширования для повышения производительности и снижения нагрузки на базу данных. Поддерживаются следующие встроенные механизмы кэширования:
- Redis. Redis можно использовать как хранилище кэша, пользовательских сессий и блокировок. Это особенно полезно, если CS-Cart работает на нескольких веб-серверах: все серверы могут обращаться к одному Redis и использовать общий кэш и общие сессии.
- CDN. CS-Cart умеет подключать CDN для раздачи статических файлов, например изображений, CSS, JavaScript и assets. В коде предусмотрен CDN-бэкенд CloudFront. CDN помогает быстрее отдавать файлы пользователям и снижает нагрузку на основной сервер.
- Varnish / обратный прокси-кэш (reverse proxy cache) поддерживается через модуль Full Page Cache. CS-Cart может работать с Varnish для кэширования целых страниц. Varnish ставится перед приложением и может отдавать уже готовые страницы без обращения к PHP и базе данных. В CS-Cart есть механизм заголовков и инвалидации кэша для Varnish.
- Встроенный кэш приложения. CS-Cart кэширует настройки, служебные данные, блоки витрины и часть подготовленных данных приложения. По умолчанию кэш может храниться в файлах, но его можно переключить на другие бэкенды, включая Redis.
- Кэш статических файлов и ресурсов (assets). Система кэширует и переиспользует скомпилированные CSS/JavaScript и другие статические ресурсы. Эти файлы также могут отдаваться через CDN.
Шардирование и партиционирование¶
CS-Cart не предоставляет встроенной поддержки репликации или шардирования базы данных на уровне приложения. Платформа использует одну конфигурацию подключения к базе данных: db_host / db_name. Все запросы приложения (как чтение, так и запись) выполняются через это подключение.
Такой подход упрощает резервное копирование, восстановление, миграции и обновления, обеспечивает ACID-гарантии для заказов, остатков и промоакций (ACID — атомарность, согласованность, изоляцию и долговечность операций), позволяет избежать проблем рассинхронизации между master и replica, а также использует единую схему базы данных с базовыми индексами.
Отсутствие встроенного шардирования и репликации компенсируется следующими инфраструктурными механизмами:
- Redis и файловый кэш снижают количество обращений к базе данных;
- Varnish позволяет отдавать страницы без PHP и SQL-запросов;
- CDN берет на себя доставку статического контента;
- используются пагинация и временные таблицы для тяжелых выборок;
- S3-совместимые хранилища позволяют использовать общие файлы на нескольких веб-серверах;
- массовые операции выполняются пакетами, а не через шардирование.
В конфигурации CS-Cart отсутствуют отдельные настройки master/slave или primary/replica. Для большинства интернет-магазинов встроенные механизмы репликации не требуются, поскольку типичная высокая нагрузка на операции чтения (read-heavy workload) витрины обычно эффективно закрывается комбинацией кэша, CDN и Varnish.
Шардирование каталога по партициям или шардам в продукте также отсутствует. Крупные каталоги обрабатываются в рамках единой базы данных, если не используются внешние инфраструктурные решения. Для компенсации используются инфраструктурные механизмы, описанные выше.
Оптимизация базы данных¶
CS-Cart содержит базовые индексы базы данных и инструмент оптимизации таблиц (Optimize database в настройках), но не предоставляет автоматический подбор индексов для больших каталогов. Для крупных магазинов оптимизация индексов обычно выполняется вручную на основе анализа нагрузки и медленных SQL-запросов. Вместо автоматического подбора индексов рекомендуется использовать внешние инструменты мониторинга и диагностики, например:
- Percona Toolkit;
- MySQL Enterprise Monitor;
- slow_query_log;
- настройку InnoDB buffer pool;
- увеличение объема RAM;
- апгрейд серверного оборудования при необходимости.
Функция Optimize database выполняет техническое обслуживание таблиц базы данных: оптимизирует хранение данных, обновляет статистику для планировщика запросов MySQL и пересортировывает данные в отдельных таблицах при необходимости.
Этот инструмент не предназначен для автоматической настройки производительности больших каталогов. Для ускорения работы крупных каталогов обычно используются кэширование, оптимизация серверной инфраструктуры и ручная настройка индексов на основе анализа медленных запросов.
Настройка и оптимизация индексов выполняются вручную в зависимости от характера нагрузки и структуры каталога.