Надежная эксплуатация высоконагруженных систем
Контекст
Современные информационные системы часто функционируют в условиях высоких нагрузок: миллионы транзакций в день, тысячи одновременных подключений, интенсивная работа с большими объемами данных, интеграция с внешними сервисами и приложениями (в том числе с 1С). Отказоустойчивость, производительность и масштабируемость становятся критически важными характеристиками инфраструктуры.
Для СУБД это означает необходимость быстрой обработки запросов, эффективной работы с пулами соединений, гибкой архитектуры хранения данных и минимального времени отклика, даже в условиях пиковых нагрузок.
Проблема
При эксплуатации СУБД в высоконагруженной среде возникают типовые сложности:
- деградация производительности из-за роста числа подключений;
- неэффективные планы выполнения запросов, приводящие к замедлению операций;
- блокировки и узкие места при работе с большим объемом данных в партиционированных таблицах;
- невозможность быстрой масштабируемости;
- ограниченная поддержка платформ, таких как 1С;
- сложность развертывания высокодоступных и управляемых кластеров, особенно в контейнеризованных средах.
Эти проблемы ведут к нарушению SLA, затрудняют сопровождение, увеличивают нагрузку на администраторов и разработчиков.
Решение
Для обеспечения надежной эксплуатации высоконагруженных систем в СУБД Pangolin доступны следующие функциональности, которые расширят возможности разработчика:
- Поддержка работы с 1С;
- **Улучшенный пулер соединений - Pangolin Pooler;
- Корректировка, фиксация и подмена планов запросов;
- Неблокирующее нативное интервальное партиционирование;
- Глобальные индексы и глобальные ограничения на партиционированные таблицы;
- Поставка Docker-образа СУБД Pangolin.
Совокупность этих решений позволяет добиться стабильной, управляемой и масштабируемой работы СУБД Pangolin в условиях высоких нагрузок, снизить издержки на администрирование и сопровождение, а также обеспечить гибкость в развертывании.
В подразделах ниже представлено более детальное описание данных функциональностей.
Поддержка работы с 1С
Данная функциональность позволяет использовать СУБД Pangolin в качестве СУБД для «Платформы 1С: Предприятие».
Включение поддержки 1С активирует:
- оптимизации планировщика запросов;
- изменения в работе внутренних алгоритмов СУБД;
- дополнительные расширения.
Возможность является отключаемой, так как полная совместимость поведения продукта Pangolin с выключенной поддержкой 1С и с включенной поддержкой 1С отличается. Оптимизации и изменения могут приводить к построению планов с деградацией производительности при использовании без 1С. Рекомендуется включать поддержку при использовании продукта совместно с 1С.
Более подробное описание данной функциональности представлено в разделе «Поддержка 1С» документа «Администрирование функциональностей».
Пулер соединений Pangolin Pooler
Компонент Pangolin Pooler – это менеджер пулов соединений СУБД Pangolin. Данный компонент является доработанной версией утилиты PgBouncer.
Предназначением компонента является минимизация издержек, связанных с установлением новых подключений к СУБД Pangolin. Pangolin Pooler позволяет уменьшить накладные расходы на базу данных в случае, когда огромное количество физических соединений ведет к падению производительности СУБД Pangolin.
К ключевым доработкам программы PgBouncer в рамках создания компонента Pangolin Pooler относятся:
- Режим сквозной аутентификации пользователей, который дополнительно осуществляет поддержку аутентификации пользователей методом LDAP и аудирование действий пользователя в лог компонента Pangolin Pooler;
- Поддержка подготовленных запросов для транзакционного режима кластера высокой доступности Pangolin;
- Поддержка использования сертификатов PKCS#12 и управление сертификатами для Pangolin с Secret Management System (SecMan);
- Поддержка топологии «N-ЦОД» в Pangolin Pooler;
- Реализация вывода команды
SHOW POOLS
в лог компонента; - Создание команды
RESET_AUTH
, которая сбрасывает в исходное состояние сквозную аутентификацию пользователей.
Более подробное описание и управление компонентом и его доработками представлено в разделе «Администрирование Pangolin Pooler» документа «Руководство администратора».
Корректировка, фиксация и подмена планов запросов
В теории порядок выполнения запроса определяет оптимизатор запросов – программа, определяющая оптимальный «маршрут» на основании информации о количестве записей, распределения данных и индексах.
План выполнения запроса на практике может быть неоптимальным по ряду причин:
- некорректная/неполная статистика;
- недостаточные/избыточные индексы;
- некорректные настройки стоимостей операций;
- ошибки работы оптимизатора.
Неоптимальный маршрут выполнения может приводить к увеличенному времени выполнения запросов, деградации сервиса в целом (вплоть до отказа) или несоблюдению SLA.
Реализованная возможность фиксации и подмены планов запросов позволяет оперативно и без влияния на существующую структуру объектов:
- принудительно определять план выполнения SQL-запроса, выполняемого как самостоятельный запрос, подготовленный запрос или запрос в составе PL/pgSQL-блока;
- корректировать в процессе план выполнения запроса на стороне сервера при его обработке без необходимости вносить изменения в его текст на стороне отправляющего его приложения.
Подробнее о расширениях, которые предоставляют данную функциональность представлено в разделе «Управление планами запросов» документа «Руководство администратора».
Неблокирующее нативное интервальное партиционирование
Неблокирующее нативное интервальное партиционирование - это возможность создать партиционированную таблицу, указав лишь правило разбиения на партиции и сразу наполнять данными. В этом случае при добавлении данных отсутствующая партиция будет создана автоматически, вместо генерации сообщения об ошибке о необходимости создать партицию вручную. В остальном поведение автопартиционированных таблиц не отличается от стандартного партиционирования.
Более подробное описание и настройка функциональности представлено в разделе «Нативное интервальное партиционирование» документа «Администрирование функциональностей».
Глобальные индексы и глобальные ограничения на партиционированные таблицы
СУБД Pangolin предоставляет возможность создавать и использовать глобальные ограничения уникальности по полям партиционированных таблиц, отличных от полей ключа партиционирования. Тем самым повышая эффективность поиска записей в партиционированных таблицах для предикатов, не включающих ключ партиционирования.
Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Администрирование функциональностей».
Поставка Docker-образа СУБД Pangolin
В СУБД Pangolin возможно запускать Docker-образы компонентов продукта в кластерных конфигурациях с одним главным узлом и произвольным числом узлов реплицирования. Решение позволяет создавать многоконтейнерные приложения, где роль кластера базы данных берет на себя Pangolin DB, а управление пулом соединений обеспечивает Pangolin Pooler.
В Docker-образе включены определенные функциональности, не требующие конфигурирования. Пользователю доступны преднастроенные функциональные возможности, которые активируются специальным ключом при старте контейнера.
Дополнительно можно самостоятельно активировать и настроить также ряд функциональных возможностей.
Список данных функциональностей (включенных и дополнительно настраиваемых), а также процесс запуска образа представлен в разделе «Docker-образы СУБД Pangolin» документа «Руководство по установке».